hungpronc9
Thành viên mới 

			
		- Tham gia
 - 29/8/16
 
- Bài viết
 - 8
 
- Được thích
 - 0
 
Mọi người dúp e nội suy 2 chiều bảng này phát giá trị e ghi trong bảng rồi! View attachment noisuy (1).xls
				
			
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
     If (vungtra.Cells(i, 1) <= X And vungtra.Cells(i + 1, 1) >= X) Or _
        (vungtra.Cells(i + 1, 1) <= X And vungtra.Cells(i, 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
     Exit Function
     End If
    Next i
     MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
End Function
Function noisuy2(vtra As Range, X As Double, Y As Double) As Double
    'ham noi suy 2 chieu
    Dim ktra As Boolean, vungtra
    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
    vungtra = vtra
    For j = 2 To UBound(vungtra, 2) - 1
      If (vungtra(1, j) <= Y And vungtra(1, j + 1) >= Y) Or _
            (vungtra(1, j + 1) <= Y And vungtra(1, j) >= Y) Then
       For i = 2 To UBound(vungtra, 1) - 1
        If (vungtra(i, 1) <= X And vungtra(i + 1, 1) >= X) Or _
            (vungtra(i, 1) <= X And vungtra(i + 1, 1) >= X) Then
         x1 = vungtra(i, 1): x2 = vungtra(i + 1, 1)
         y1 = vungtra(1, j): y2 = vungtra(1, j + 1)
         a11 = vungtra(i, j): a12 = vungtra(i, j + 1)
         a21 = vungtra(i + 1, j): a22 = vungtra(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
         Exit Function
        End If
       Next i
      End If
    Next j
     MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
End Function
	



Tiêu đề vi phạm nội qui, lần sau đọc kỹ nội qui đăng bài
Bạn sử dụng code mới
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 If (vungtra.Cells(i, 1) <= X And vungtra.Cells(i + 1, 1) >= X) Or _ (vungtra.Cells(i + 1, 1) <= X And vungtra.Cells(i, 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 Exit Function End If Next i MsgBox "gia tri can tim ko nam trong bang tra", vbInformation End Function Function noisuy2(vtra As Range, X As Double, Y As Double) As Double 'ham noi suy 2 chieu Dim ktra As Boolean, vungtra 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 vungtra = vtra For j = 2 To UBound(vungtra, 2) - 1 If (vungtra(1, j) <= Y And vungtra(1, j + 1) >= Y) Or _ (vungtra(1, j + 1) <= Y And vungtra(1, j) >= Y) Then For i = 2 To UBound(vungtra, 1) - 1 If (vungtra(i, 1) <= X And vungtra(i + 1, 1) >= X) Or _ (vungtra(i, 1) <= X And vungtra(i + 1, 1) >= X) Then x1 = vungtra(i, 1): x2 = vungtra(i + 1, 1) y1 = vungtra(1, j): y2 = vungtra(1, j + 1) a11 = vungtra(i, j): a12 = vungtra(i, j + 1) a21 = vungtra(i + 1, j): a22 = vungtra(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 Exit Function End If Next i End If Next j MsgBox "gia tri can tim ko nam trong bang tra", vbInformation End Function
bạn chỉnh lại code{MÌnh có gửi file phụ lục 10 đó mình có làm vd nội suy 2 chiều nhưng k được bạn vào đó xem hộ mình với]
![]()
Function noisuy2(vtra As Range, X As Double, Y As Double) As Double
    'ham noi suy 2 chieu
    Dim ktra As Boolean, vungtra
    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
    vungtra = vtra
    For j = 2 To UBound(vungtra, 2) - 1
      If WorksheetFunction.IsNumber(vungtra(1, j)) And _
            WorksheetFunction.IsNumber(vungtra(1, j + 1)) And _
            ((vungtra(1, j) <= Y And vungtra(1, j + 1) >= Y) Or _
            (vungtra(1, j + 1) <= Y And vungtra(1, j) >= Y)) Then
       For i = 2 To UBound(vungtra, 1) - 1
        If WorksheetFunction.IsNumber(vungtra(i, 1)) And _
            WorksheetFunction.IsNumber(vungtra(i + 1, 1)) And _
            ((vungtra(i, 1) <= X And vungtra(i + 1, 1) >= X) Or _
            (vungtra(i, 1) <= X And vungtra(i + 1, 1) >= X)) Then
         x1 = vungtra(i, 1): x2 = vungtra(i + 1, 1)
         y1 = vungtra(1, j): y2 = vungtra(1, j + 1)
         a11 = vungtra(i, j): a12 = vungtra(i, j + 1)
         a21 = vungtra(i + 1, j): a22 = vungtra(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
         Exit Function
        End If
       Next i
      End If
    Next j
     MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
End Function