Tại sao nội suy 2 chiều lớn hơn 7 cột bị lỗi (1 người xem)

Liên hệ QC

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

khanhduydang

Thành viên mới
Tham gia
19/10/08
Bài viết
8
Được thích
2
Cho mình hỏi ko bít lỗi gì trong đoạn mã bên dưới mà khi số cột lớn hơn 7 cột thì không tra được giá trị nội suy 2 chiều (lỗi #Value)
Xin giúp đỡ mình sửa lại cho hoàn chỉnh. Cám ơn mọi người trước.
Mã:
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
 

File đính kèm

Khó quá hay sao mà 42 lần đọc chưa thấy 1 cao nhân nào chỉ giúp? help me, please
 
Upvote 0
/-)úng là khó & mình đề nghị xài cái này chắc êm xui nè!

Khó quá hay sao mà 42 lần đọc chưa thấy 1 cao nhân nào chỉ giúp? help me, please

PHP:
Option Explicit
 Function NoiSuyGPE(VungTra As Range, xX As Double, yY As Double) As Double
    'Ham Noi Suy 2 Chieu Tai GPE.COM (Sa_DQ)'
    Dim iW As Integer, jI 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
    
    Dim RgNg As Range, RgDoc As Range
    Dim Rng As Range, Clls As Range
    Set RgNg = VungTra.Cells(1, 1).Resize(1, VungTra.Columns.Count - 1)
    Set RgDoc = VungTra.Cells(1, 1).Resize(VungTra.Rows.Count, 1)
    
1    For Each Rng In RgNg
2      If Rng <= yY And Rng.Offset(, 1) >= yY Then
3        y1 = Rng:           y2 = Rng.Offset(, 1)
        For Each Clls In RgDoc
5        If Clls <= xX And Clls.Offset(1) >= xX Then
         x1 = Clls:         x2 = Clls.Offset(1)
        '3*'
7       a11 = Cells(Clls.Row, Rng.Column):  a12 = Cells(Clls.Row, Rng.Column + 1)
        a21 = Cells(Clls.Row + 1, Rng.Column): a22 = Cells(Clls.Row + 1, Rng.Column + 1)
9         t1 = (a12 - a11) * (yY - y1) / (y2 - y1) + a11
         t2 = (a22 - a21) * (yY - y1) / (y2 - y1) + a21
11         NoiSuyGPE = (t2 - t1) * (xX - x1) / (x2 - x1) + t1
         Exit For
13        End If
        Next Clls
15      End If
    Next Rng
17    If NoiSuyGPE = 0 Then  '!'
        MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
19    End If
End Function
 
Upvote 0
Sửa

Mã:
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

Thành

Mã:
For j = 2 To vungtra.[COLOR=#ff0000]Columns[/COLOR].Count
              If vungtra.Cells(1, j) <= Y And vungtra.Cells(1, j + 1) >= Y Then
        For i = 2 To vungtra.[COLOR=#ff0000]Rows[/COLOR].Count
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
Option Explicit
 Function NoiSuyGPE(VungTra As Range, xX As Double, yY As Double) As Double
    'Ham Noi Suy 2 Chieu Tai GPE.COM (Sa_DQ)'
    Dim iW As Integer, jI 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
    
    Dim RgNg As Range, RgDoc As Range
    Dim Rng As Range, Clls As Range
    Set RgNg = VungTra.Cells(1, 1).Resize(1, VungTra.Columns.Count - 1)
    Set RgDoc = VungTra.Cells(1, 1).Resize(VungTra.Rows.Count, 1)
    
1    For Each Rng In RgNg
2      If Rng <= yY And Rng.Offset(, 1) >= yY Then
3        y1 = Rng:           y2 = Rng.Offset(, 1)
        For Each Clls In RgDoc
5        If Clls <= xX And Clls.Offset(1) >= xX Then
         x1 = Clls:         x2 = Clls.Offset(1)
        '3*'
7       a11 = Cells(Clls.Row, Rng.Column):  a12 = Cells(Clls.Row, Rng.Column + 1)
        a21 = Cells(Clls.Row + 1, Rng.Column): a22 = Cells(Clls.Row + 1, Rng.Column + 1)
9         t1 = (a12 - a11) * (yY - y1) / (y2 - y1) + a11
         t2 = (a22 - a21) * (yY - y1) / (y2 - y1) + a21
11         NoiSuyGPE = (t2 - t1) * (xX - x1) / (x2 - x1) + t1
         Exit For
13        End If
        Next Clls
15      End If
    Next Rng
17    If NoiSuyGPE = 0 Then  '!'
        MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
19    End If
End Function

Cảm ơn bác code này dùng tốt. Mình đã tìm nhưng không thấy. Nhờ Google tìm rồi. Tốt nhất là cái mình copy ở trên.
Cám ơn bro vì đã giúp đỡ.
Thanks PTM0412
 
Upvote 0
Bạn chọn cái nào tốt để xài thì cũng hợp lý. Tuy nhiên bạn cũng cần biết chỗ sai của mình ở đâu.
 
Upvote 0
Web KT

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

Back
Top Bottom