Tìm lỗi sai trong code về mảng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

huyendhxd

Thành viên mới
Tham gia
28/9/12
Bài viết
3
Được thích
0
Chào cả nhà gia đình excel!!!
Chả là em mới tập làm VBA, Định viết hàm nội suy cho cái bảng như hình đính kèm theo hai chiều giá trị của dòng đầu tiên và cột đầu tiên. Kết quả là vẫn không chạy được. Các bác tìm lỗi giúp em với nhé. Cứ chém em thả ga cho đầu óc em được mở mang tí ạ. Em cảm ơn
Đây là code e viết
Option Explicit

Public Function Noisuy(x As Double, y As Double) As Double
Dim Dulieu(7, 7) As Double, chieu1(7, 1) As Double, chieu2(1, 7) As Double
Dim x1 As Double, x2 As Double
Dim i As Integer, j As Integer
Dim dl As Range, c1 As Range, c2 As Range
Set dl = Range("B2:H8").Value2
Set c1 = Range("A2:A8").Value2
Set c2 = Range("B1:H1").Value2
Dulieu = Range("B2:H8")
chieu1 = Range("A2:A8")
chieu2 = Range("B1:H1")
For i = 1 To 7
For j = 1 To 7
Dulieu(i, j) = dl.Cells(i, j).Value
chieu1(i, 1) = c1.Cells(i, 1).Value
chieu2(1, j) = c2.Cells(1, j).Value
Next
Next
For i = 1 To UBound(chieu1, 1) - 1 Step 1
For j = 1 To UBound(chieu2, 2) - 1 Step 1
If x >= chieu1(i, 1) And x <= chieu1(i + 1, 1) And y >= chieu2(1, j) And y <= chieu2(1, j + 1) Then
x1 = Dulieu(i, j) + (Dulieu(i + 1, j) - Dulieu(i, j)) / (chieu1(i + 1, 1) - chieu1(i, 1)) * (x - chieu1(i, 1))
x2 = Dulieu(i, j + 1) + (Dulieu(i + 1, j + 1) - Dulieu(i, j + 1)) / (chieu1(i + 1, 1) - chieu1(i, 1)) * (x - chieu1(i, 1))
Noisuy = x1 + (x2 - x1) / (chieu2(1, j + 1) - chieu2(1, j)) * (y - chieu2(1, j))
Else: MsgBox "Chon lai gia tri"
Next
Next
End Function
 

File đính kèm

  • 111.PNG
    111.PNG
    9.5 KB · Đọc: 25
Chào huyendhxd,

Bạn gửi file excel lên.
Nêu rõ dữ liệu ban đầu gồm những gì? Yêu cầu cần tính gì? Cho vài ví dụ minh họa.
Theo trên thì còn tính toán gì đó thì bạn vui lòng nêu luôn công thức tính như nào nhé.
 
Upvote 0
Chào cả nhà gia đình excel!!!
Chả là em mới tập làm VBA, Định viết hàm nội suy cho cái bảng như hình đính kèm theo hai chiều giá trị của dòng đầu tiên và cột đầu tiên. Kết quả là vẫn không chạy được. Các bác tìm lỗi giúp em với nhé. Cứ chém em thả ga cho đầu óc em được mở mang tí ạ. Em cảm ơn
Đây là code e viết
Option Explicit

Public Function Noisuy(x As Double, y As Double) As Double
Dim Dulieu(7, 7) As Double, chieu1(7, 1) As Double, chieu2(1, 7) As Double
Dim x1 As Double, x2 As Double
Dim i As Integer, j As Integer
Dim dl As Range, c1 As Range, c2 As Range
Set dl = Range("B2:H8").Value2
Set c1 = Range("A2:A8").Value2
Set c2 = Range("B1:H1").Value2
Dulieu = Range("B2:H8")
chieu1 = Range("A2:A8")
chieu2 = Range("B1:H1")
For i = 1 To 7
For j = 1 To 7
Dulieu(i, j) = dl.Cells(i, j).Value
chieu1(i, 1) = c1.Cells(i, 1).Value
chieu2(1, j) = c2.Cells(1, j).Value
Next
Next
For i = 1 To UBound(chieu1, 1) - 1 Step 1
For j = 1 To UBound(chieu2, 2) - 1 Step 1
If x >= chieu1(i, 1) And x <= chieu1(i + 1, 1) And y >= chieu2(1, j) And y <= chieu2(1, j + 1) Then
x1 = Dulieu(i, j) + (Dulieu(i + 1, j) - Dulieu(i, j)) / (chieu1(i + 1, 1) - chieu1(i, 1)) * (x - chieu1(i, 1))
x2 = Dulieu(i, j + 1) + (Dulieu(i + 1, j + 1) - Dulieu(i, j + 1)) / (chieu1(i + 1, 1) - chieu1(i, 1)) * (x - chieu1(i, 1))
Noisuy = x1 + (x2 - x1) / (chieu2(1, j + 1) - chieu2(1, j)) * (y - chieu2(1, j))
Else: MsgBox "Chon lai gia tri"
Next
Next
End Function
Xoá bớt một số dòng thừa đi là chạy được
Mã:
Public Function Noisuy(x As Double, y As Double) As Double
Dim Dulieu, chieu1, chieu2
Dim x1 As Double, x2 As Double
Dim i As Integer, j As Integer
Dulieu = Sheet1.Range("B2:H8")
chieu1 = Sheet1.Range("A2:A8")
chieu2 = Sheet1.Range("B1:H1")
For i = 1 To UBound(chieu1, 1) - 1 Step 1
    For j = 1 To UBound(chieu2, 2) - 1 Step 1
        If x >= chieu1(i, 1) And x <= chieu1(i + 1, 1) And y >= chieu2(1, j) And y <= chieu2(1, j + 1) Then
            x1 = Dulieu(i, j) + (Dulieu(i + 1, j) - Dulieu(i, j)) / (chieu1(i + 1, 1) - chieu1(i, 1)) * (x - chieu1(i, 1))
            x2 = Dulieu(i, j + 1) + (Dulieu(i + 1, j + 1) - Dulieu(i, j + 1)) / (chieu1(i + 1, 1) - chieu1(i, 1)) * (x - chieu1(i, 1))
            Noisuy = x1 + (x2 - x1) / (chieu2(1, j + 1) - chieu2(1, j)) * (y - chieu2(1, j))
        End If
    Next
Next
End Function
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom