nội suy và tăng độ phân giải bảng dữ liệu từ bảng dữ liệu rời rạc

Liên hệ QC

htrung4

Thành viên mới
Tham gia
28/10/09
Bài viết
5
Được thích
1
Chào các bác cao thủ excel, em có một file dữ liệu như trong file đính kèm, dữ liệu đó là rời rạc và độ phân giải khá thấp. Bây giờ em muốn nội suy để tạo ra một bảng dữ liệu từ file dữ liệu này, với độ mịn của cột a là 1 (ví dụ: dữ liệu của cột a sẽ chạy từ -108, -107, -106,-105,-104,-103,-102 ..... chứ không giảm liền như trong bảng, từ -108 về -102). Bác nào chuyên về mảng này giúp em với ạ, cám ơn các bác nhiều :D
 

File đính kèm

  • quy dao chan.xlsx
    13.6 KB · Đọc: 9
chia nhỏ để làm gì? cụ thể các số mới dùng cho việc gì?
 
3 cột A,B,C có quan hệ như thế nào, cái gì thay đổi sẽ làm A,B,c thay đổi?
 
Đây là dữ liệu trong một đồ án của em, cụ thể là 1 robot. Dữ liệu chia nhỏ để tăng độ mịn của việc điều khiển. Bác có thể xử lý được không? :)
Hình như là môn Robot công nghiệp hay Cơ điện tử gì gì đó hử?

PHP:
Function sRobot(sRng As Variant, ByVal kcol As Long) As Variant
Const p As Integer = 1
If TypeName(sRng) <> "Variant()" Then Exit Function
Dim maxR As Long, i As Long, r As Long, s1, s2, t As Long, stp As Long
If kcol > UBound(sRng, 2) Then Exit Function
maxR = UBound(sRng, 1)
ReDim dArr(1 To 1000000)
For i = 1 To maxR - 1
    If i < r Then GoTo 1
    s1 = sRng(i, kcol)
    If s1 <> Empty Then
        For r = i + 1 To maxR
            s2 = sRng(r, kcol)
            If s2 <> Empty Then
                If s1 <= s2 Then stp = p Else stp = -p
                For s = s1 To s2 Step stp
                    t = t + 1
                    If t > 1 Then
                        If dArr(t - 1) = s Then
                            t = t - 1
                            GoTo 2
                        End If
                    End If
                    dArr(t) = s
2:
                Next s
                Exit For
            End If
        Next r
    End If
1:
Next i
If t Then ReDim Preserve dArr(1 To t)
sRobot = Application.Transpose(dArr)
End Function
'---------------------------------
Sub Main()
Dim tmp, k As Long, KQ
tmp = Sheet1.Range("A2:C17").Value
For k = 1 To UBound(tmp, 2)
    KQ = sRobot(tmp, k)
    Sheet1.Range("E2").Offset(0, k - 1).Resize(UBound(KQ, 1), 1) = KQ
Next k
End Sub
 
Lần chỉnh sửa cuối:

File đính kèm

  • Capture.JPG
    Capture.JPG
    59.5 KB · Đọc: 12
Bác hiểu sai ý e rồi, như hình ta có 2 bảng, làm thế nào dùng nội suy để điền vào chỗ trống của bảng thứ 2.
Bạn vui tính ghê. Tôi đọc bài #1 mà "nội suy" ra cái bảng như hình trên tôi lăn ra ăn vạ luôn.

------------------
PHP:
Public Sub sRobot()
Const p As Integer = 1
Dim sArr(), maxA As Long, i As Long, r As Long, s1, s2, t As Long, stp As Long
sArr = Sheet1.Range("A2:C17").Value
maxA = UBound(sArr, 1)
ReDim dArr(1 To 1000000, 1 To 3)
For i = 1 To maxA - 1
    If i < r Then GoTo 1
    s1 = sArr(i, 1)
    If s1 <> Empty Then
        For r = i + 1 To maxA
            s2 = sArr(r, 1)
            If s2 <> Empty Then
                If s1 <= s2 Then stp = p Else stp = -p
                If r < maxA Then
                    For s = s1 To s2 - stp Step stp
                        If t > 1000000 Then GoTo 2
                        t = t + 1
                        dArr(t, 1) = s
                        If s = s1 Then
                            dArr(t, 2) = sArr(i, 2)
                            dArr(t, 3) = sArr(i, 3)
                        End If
                    Next s
                Else
                    For s = s1 To s2 Step stp
                        If t > 1000000 Then GoTo 2
                        t = t + 1
                        dArr(t, 1) = s
                        If s = s1 Then
                            dArr(t, 2) = sArr(i, 2)
                            dArr(t, 3) = sArr(i, 3)
                        End If
                        If s = s2 Then
                            dArr(t, 2) = sArr(r, 2)
                            dArr(t, 3) = sArr(r, 3)
                        End If
                    Next s
                End If
                Exit For
            End If
        Next r
    End If
1:
Next i
2:
If t Then Sheet1.Range("E2").Resize(t, 3) = dArr
End Sub
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom