Xin add in nội suy 1 chiều và 2 chiều

  • Thread starter Thread starter ohlexus
  • Ngày gửi Ngày gửi
Liên hệ QC

ohlexus

Thành viên mới
Tham gia
13/3/12
Bài viết
27
Được thích
6
Mình kiếm đc trong diễn đàn các hàm nội suy 1 chiều và 2 chiều rồi nhưng giờ mình muốn tạo thành add in để sử dụng cho bất kỳ bảng tính nào cũng đc, nhưng ko bít làm ntn, mong các bạn giúp đỡ
Đây là hàm mình đang dùng:
Mã:
Function noisuy1(vungtra As Range, X As Double, cot As Integer) As Double
    'ham noi suy 1 chieu
    Dim ktra As Boolean
    Dim i As Integer
    Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double
    For i = 1 To vungtra.Cells.Count
     kiemtra = False
     If vungtra.Cells(i, 1) <= X And vungtra.Cells(i + 1, 1) >= X Then
      x1 = vungtra.Cells(i, 1): x2 = vungtra.Cells(i + 1, 1)
      y1 = vungtra.Cells(i, cot): y2 = vungtra.Cells(i + 1, cot)
      noisuy1 = (y2 - y1) * (X - x1) / (x2 - x1) + y1
      ktra = True
     End If
    Next i
    If ktra = False Then
     MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
     Exit Function
    End If
End Function

Function noisuy2(vungtra As Range, X As Double, Y As Double) As Double
    'ham noi suy 2 chieu
    Dim ktra As Boolean
    Dim i As Integer, j As Integer
    Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double
    Dim a11 As Double, a12 As Double, a21 As Double, a22 As Double
    Dim t1 As Double, t2 As Double
    For j = 2 To vungtra.Cells.Count
      
      If vungtra.Cells(1, j) <= Y And vungtra.Cells(1, j + 1) >= Y Then
       For i = 2 To vungtra.Cells.Count
        ktra = False
        If vungtra.Cells(i, 1) <= X And vungtra.Cells(i + 1, 1) >= X Then
         x1 = vungtra.Cells(i, 1): x2 = vungtra.Cells(i + 1, 1)
         y1 = vungtra.Cells(1, j): y2 = vungtra.Cells(1, j + 1)
         a11 = vungtra.Cells(i, j): a12 = vungtra.Cells(i, j + 1)
         a21 = vungtra.Cells(i + 1, j): a22 = vungtra.Cells(i + 1, j + 1)
         t1 = (a12 - a11) * (Y - y1) / (y2 - y1) + a11
         t2 = (a22 - a21) * (Y - y1) / (y2 - y1) + a21
         noisuy2 = (t2 - t1) * (X - x1) / (x2 - x1) + t1
        
        End If
       Next i
        ktra = True
      End If
    Next j
    If ktra = False Then
     MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
     Exit Function
    End If
End Function
 
Có cách nào ko các bạn nhỉ
 
Cách đơn giản nhất và chuối nhất là bạn mở excel ra, nhấn ALT+F11, chuột phải vào ThisWorkbook, chọn Insert/Module. Copy code, paste vào trang mới mở ra đấy. Trở về cửa sổ excel, xoá sheet2,3 đi. Vào file, chọn save, bước này nhớ chọn định dạng là Add in trong ô Save as type. Thế là xong rồi đấy bạn.
 
làm sao để chạy được đoạn mã này trong bảng excel. ta nhập công thức như thế nào vậy? ai biết xin chỉ cụ thể giúp với!
 
làm sao để chạy được đoạn mã này trong bảng excel. ta nhập công thức như thế nào vậy? ai biết xin chỉ cụ thể giúp với!

Lưu code trên vào 1 file excel --> save as addin(1997-2003) ( file này có đuôi là *xla )

với phiên bản 2007-2010
--->
Mở file excel mới lên --> File --> Option ---> Addin ---> click vào nút go ở phía dưới bên trái cửa sổ
--> browser và chọn đến file addin ( *xla) của bạn và tích dấu "v" vào khung cửa sổ chọn


--> tại một ô cell bất kỳ trên bảng tính bạn gõ công thức = noisuy2(.....) là ok
 
Mình kiếm đc trong diễn đàn các hàm nội suy 1 chiều và 2 chiều rồi nhưng giờ mình muốn tạo thành add in để sử dụng cho bất kỳ bảng tính nào cũng đc, nhưng ko bít làm ntn, mong các bạn giúp đỡ
Đây là hàm mình đang dùng:
Mọi người cho mình hỏi, với các hàm phía trên thì nếu trường hợp nội suy không giống như người lập trình viết thì kết quả không đúng, có cách nào để code đúng với mọi trường hợp không
Cụ thể ở đây là:
nếu hàng nội suy đối số Y của hàm không xắp xếp tăng dần mà giảm dần:>>Hàm sẽ thông báo Msg
Nếu cột nội suy tham số X của hàm không xắp xếp tăng dần mà giảm dẫn>> cũng thế
Vậy để code luôn đúng thì sửa code thế nào? trên diễn đàn đã có Code nào đầy đủ đáp ứng yêu cầu này chưa?
Và cũng cho mình hỏi luôn cách làm là hiện Mgs thì nếu vùng tra nội suy có sự thay đổi(nghiêm trọng) mà dẫn đến nhiều công thức (đã viết trước dùng hàm Noisuy1,noisuy2) chuyến sang sai thì kết quả là ô bị sai là số 0 và User liên tục nhấn Ok,(hoặc tick chuột Close) nghe hơi nản, có cách khác không mọi người
Cho mình cảm ơn trước nha
 
Web KT

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

Back
Top Bottom