ai giúp e viết code tra bảng nội suy có 3 yếu tố với

Liên hệ QC

keentwo

Thành viên thường trực
Tham gia
14/3/10
Bài viết
211
Được thích
185
Nghề nghiệp
SV DHXD
e có 1 file như sau.
a(c) nào có thể viết code nội suy cho e với.
bản chất vẫn là nội suy 1 chiều.nhưng e chưa thành thạo lắm nên vẫn chưa viết được+-+-+-+
 

File đính kèm

  • ham INDEX.xls
    34 KB · Đọc: 53
e có 1 file như sau.
a(c) nào có thể viết code nội suy cho e với.
bản chất vẫn là nội suy 1 chiều.nhưng e chưa thành thạo lắm nên vẫn chưa viết được+-+-+-+
Chú lập thế này ko ổn về mặt cơ sở dữ liệu roài.
Chú ý : hiện nay khi kiểm toán người ta chỉ chọn loại xe tiêu chuẩn 10 tấn (ko chọn 12T... như chú đã viết)
 
Upvote 0
hìhi.lâu không gặp a.
cái file này e làm cho vui thôi.chứ e mới làm đường 1 làm sao hiểu được cái này.
mục đích là viết để hiểu excel thôi.có gì a cứ viết nhé.e sẽ vận dụng vào các file khác.
thank a nhiều lắm.
 
Upvote 0
e có 1 file như sau.
a(c) nào có thể viết code nội suy cho e với.
bản chất vẫn là nội suy 1 chiều.nhưng e chưa thành thạo lắm nên vẫn chưa viết được+-+-+-+

Bạn làm ơn cho biết trị Eyc nội suy:=1520 bạn tính ra được bằng cách nào?

Không fải ai cũng biết cách tính nội suy bãn à; Nhưng VBA thì lại có thể.

Rất mong bạn bổ sung & cảm ơn trước.
 
Upvote 0
trong file đó mình trình bày tuần tự các bước mình làm để tìm ra Eyc nội suy:=1520 mà.
phần e ghi tính toán bằng index và match đó là phần e tính toán ra.nhưng làm như vậy dài dòng quá.e muốn 1 đoạn code VBA xử lý luôn cơ.
hay a xem hộ e file này nhé.chỉ còn phần này nữa là xong file thuỷ văn nhưng e không biết xử lý thế nào?
http://www.mediafire.com/?5zjzyetidmm
trong đó có yêu cầu cụ thể rồi ạ.
 
Upvote 0
Đúng là trong file bạn có trình bày đầy đủ. & hàm của bạn đây

PHP:
Option Explicit
Function NoiSuy3TS(VungTra As Range, Truc, Duong As String, LLg As Double) As Double
 Dim LMD As Range, LLX As Range, sRng As Range
 Dim Rws As Long, Col As Byte
 Dim Eyc As Double, X0 As Double, X1 As Double
 
 Set LMD = VungTra.Cells(1).Resize(VungTra.Rows.Count)
 Set LLX = VungTra.Cells(, 1).Resize(, VungTra.Columns.Count)
 Set sRng = LMD.Find(Truc & Duong, , xlFormulas, xlWhole)
 If Not sRng Is Nothing Then
   Rws = sRng.Row
 Else
   NoiSuy3TS = 1 * 10 ^ (-9):                Exit Function
 End If
 With Application.WorksheetFunction
   X0 = .Lookup(LLg, LLX)
 End With
 Set sRng = LLX.Find(X0):                    Col = sRng.Column
 X1 = sRng.Offset(, 1).Value:                Eyc = Cells(Rws, Col).Value
 
 NoiSuy3TS = Eyc + (LLg - X0) * (Cells(Rws, Col + 1).Value - Eyc) / (X1 - X0)
 
End Function
 

File đính kèm

  • GPE.rar
    14.3 KB · Đọc: 64
Upvote 0
thank a nhiều lắm.đúng thứ e cần.
liệu a có thể viết code cho e file này không?để e hoàn thành file tính toán thuỷ văn.chỉ còn bảng tra này e không xử lý được.
http://www.mediafire.com/?5zjzyetidmm
 
Upvote 0
Bạn có thể tính bằng tay trường hợp cụ thể bạn đã đưa trong file không?

Liệu a có thể viết code cho e file này không?để e hoàn thành file tính toán thuỷ văn.chỉ còn bảng tra này e không xử lý được.
http://www.mediafire.com/?5zjzyetidmm

Như bài 1 í mà;
( --=0 Có vậy chúng ta nhanh đến đích hơn fần nào chăng?!)
 
Upvote 0
gửi tiền bối SA_DQ

do được a khích nên đã tự mày mò viết ra file này.vẫn là bài toán trên,nhưng e viết theo cách hiểu của e (tại e chưa viết bao giờ nên nhìn vào code của a e không có hiểu lắm+-+-+-+)
file này có được sự giúp đỡ của a khoavu có chỉ e 1 số câu lệnh.a xem và cho e ý kiến nhé
PHP:
Function NS3YT(VungTra As Range, xeduong As Range, taitrong As String, Duong As String, luuluong As Double) As Double
Dim i As Integer
Dim j As Integer
Dim X1 As Double, x2 As Double, y1 As Double, y2 As Double
Dim hang As Integer
For i = 1 To xeduong.Cells.Count
If Application.WorksheetFunction.Match(taitrong & Duong, xeduong, 0) = i Then
hang = i + 1
End If
Next i
For j = 1 To VungTra.Cells.Count
If VungTra.Cells(1, j) <= luuluong And VungTra.Cells(1, j + 1) >= luuluong Then
X1 = VungTra.Cells(1, j): x2 = VungTra.Cells(1, j + 1)
y1 = VungTra.Cells(hang, j): y2 = VungTra.Cells(hang, j + 1)
NS3YT = y1 + (y2 - y1) * (luuluong - X1) / (x2 - X1)
End If
Next j
End Function
-+*/
 

File đính kèm

  • noi suy 3 yeu to cua KIENNGUYEN.xls
    52.5 KB · Đọc: 38
Upvote 0
Mình thấy 1 số điểm, xin nói hết để bạn xem xét

E đã tự mày mò viết ra file này theo cách hiểu của e (tại e chưa viết bao giờ nên nhìn vào code của a e không có hiểu lắm+-+-+-+)
.a xem và cho e ý kiến nhé
PHP:
Option Explicit
Function NS3YT(VungTra As Range, xeduong As Range, taitrong As String, _
   Duong As String, luuluong As Double) As Double
Dim i As Integer, j As Integer
Dim X1 As Double, x2 As Double, y1 As Double, y2 As Double
Dim hang As Integer
For i = 1 To xeduong.Cells.Count
   If Application.WorksheetFunction.Match(taitrong & Duong, xeduong, 0) = i Then
      hang = i + 1
   End If
Next i

For j = 1 To VungTra.Cells.Count
   If VungTra.Cells(1, j) <= luuluong And VungTra.Cells(1, j + 1) >= luuluong Then
      X1 = VungTra.Cells(1, j): x2 = VungTra.Cells(1, j + 1)
      y1 = VungTra.Cells(hang, j): y2 = VungTra.Cells(hang, j + 1)
      NS3YT = y1 + (y2 - y1) * (luuluong - X1) / (x2 - X1)
   End If
Next j
End Function

(1) Bạn nên có thói quen dùng fím {TABLE} để thụt đầu dòng lệnh khi cần thiết.
Tuy bấm thêm 1 fím nhưng làm cho ta dễ nhìn, kiểm soát các dòng lệnh; Hầu nhằm tránh thiếu những dòng lệnh mà mình tạm gọi theo dân dã là "khoá lại", như End If, End Select, Next jJ, Loop, . . .
Vậy có thể làm dòng lệnh dài ra 1 cách cơ học; Lúc đó chúng ta cần biết thêm cách ngắt dòng lệnh dài như trong đoạn code mình dẫn ra bên trên.

(2) Điều này là chuyện bé tí tẹo, nhưng cũng nói ra luôn: Bạn khai dư biến 'J'. Vì trong chương trình của bạn có 2 vòng lặp 'I' & 'J' nhưng 2 vòng này không lồng vào nhau; Cái sau bắt đầu khi cái trước đã kết thúc. Nên hoàn toàn ta có thể dùng lại biến 'I'. Tất nhiên bạn có thể nói khó kiểm soát. Nhưng mình đưa ra 1 cách khác để bạn ngâm cứu mà thôi.

(3) Thay vì như bạn dùng vòng lặp 'I' thì mình áp dụng fương thức tìm kiếm (FIND())
Về tốc độ thì bạn fải thấy rằng fương thức này nhanh hơn hẵn vòng lặp. Bạn có thể tìm hiểu về fương thức này trong BOX lập trình khi rỗi.
(Tuy câu lệnh để áp dụng FIND() có vẻ dài dòng & rối; Nhưng 1 khi hiểu & nắm được công cụ này thì giống như ta bỏ xe đạp mà chuyển sang đi hôn đa vậy bạn à!

(4) Về tham số cung cấp cho hàm tự tạo mình dùng 1 tham số biến đối tượng, còn bạn dùng 2; Tuy nhiên tham số thứ hai của bạn có thể tìm ra bằng tham số thứ nhất đó nha. Để nó tìm trong nó thì dễ hơn là nó tìm trên cả trang tính chứ nhỉ(?)

Tóm lại xin chúc mừng bạn đã có đứa con tinh thần thật lành lặn, sáng sủa & quan trọng nhất là không bị khuyết tật hay dị dạng gì.

Còn bài về lưu lượng nước, hình như fải là hàm nội suy 2 chiều thì fải?
Hay bạn cho lên diễn đàn cách tính rợ của bạn đi!
Chờ tin bạn & chúc tuần làm việc hiệu quả với bạn!
 
Upvote 0
untitled.JPG
ngồi mãi mà vẫn không có ý tưởng.e đã viết code nội suy 2 chiều
PHP:
Function noisuy2(vungtra As Range, hang As Double, cot 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 i = 2 To vungtra.Cells.Count
 If vungtra.Cells(1, i) <= cot And vungtra.Cells(1, i + 1) >= cot Then
  For j = 2 To vungtra.Cells.Count
  ktra = False
    If vungtra.Cells(j, 1) <= hang And vungtra.Cells(j + 1, 1) >= hang Then
       x1 = vungtra.Cells(1, i): x2 = vungtra.Cells(1, i + 1)
       y1 = vungtra.Cells(j, 1): y2 = vungtra.Cells(j + 1, 1)
       a11 = vungtra.Cells(j, i): a12 = vungtra.Cells(j, i + 1)
       a21 = vungtra.Cells(j + 1, i): a22 = vungtra.Cells(j + 1, i + 1)
       t1 = (a12 - a11) * (cot - x1) / (x2 - x1) + a11
       t2 = (a22 - a21) * (cot - x1) / (x2 - x1) + a21
       noisuy2 = (t2 - t1) * (hang - y1) / (y2 - y1) + t1
    End If
  Next j
  ktra = True
 End If
Next i
If ktra = False Then
MsgBox "xem lai di nhe-kiennguyen", vbInformation
Exit Function
End If
End Function
nhưng mà chỉ đúng khi có 1 mảng nhỏ ứng trước với 1 vùng mưa cố định& θls & Tsd nhất định.
a có thể chỉ dẫn e.dùng cách nào để vùng tra là cả bảng luôn và biến hàng ' j ' chỉ chạy trong vùng mình muốn.Ví dụ như:sang vùng mưa II thì biến 'j' chỉ chạy từ B17-B23 còn biến ' i ' vẫn chạy cả bảng lớn
 

File đính kèm

  • bang Ap.xls
    39.5 KB · Đọc: 8
Upvote 0
Bạn thử tạm kiểm tra theo hàm của mình xem sao

(1) Hình như cách tính nội suy 2 chiều của bạn chưa đúng lắm
Với hàm của mình viết tại đây: http://www.giaiphapexcel.com/forum/showthread.php?5828-hàm-nội-suy-1-chiều-và-2-chiều/page2

Sẽ cho ra các kết quả sau:
Nếu cú fáp hàm là =NoiSuyGPE(VungTra,E3,E1) thì sẽ cho ra kết quả 0.26 (là trị đang chứa ở ô D12;

Nếu cú fáp hàm là: =NoiSuyGPE(VungTra,20,3) thì cho kết quả là 0.239 (Đâu đó giữa 0.26 & 0.19)

Nếu cú fáp hàm là: =NoiSuyGPE(VungTra,25,E1) thì cho kết quả là 0.225 (Đâu đó giữa 0.26 & 0.218)

Nếu cú fáp hàm là: =NoiSuyGPE(VungTra, 29, 4.9) thì cho kết quả là 0.1666 (Đâu đó rất gần trị tại E13)

Nếu bạn kiểm & thấy đúng với vùng mưa I ta sẽ cải tiến để áp dụng cho 1 trong 2 vùng mưa tùy chọn.

Chờ thông tin từ bạn.
 
Upvote 0
vâng a!
sau khi viết xong và áp dụng cho 1 số bảng,e thấy lạ là vì sao cho các biến 'i, j ' chỉ chạy trong vungtra.Cells.Count vậy mà kết quả của e lại ra 0.114 đây là kết quả của ô D19 của vùng mưa II.nhưng rõ ràng vùng tra của e chỉ là vùng mưa I.
khi xoá bỏ tất cả vùng mưa II đi thì kết quả lại ra đúng 0.26=D12 thật là lạ.
e định hỏi từ hôm qua rồi.nhưng không hiểu cơ chế vì sao VB lại chạy như vậy?và rõ ràng code e viết chỉ đúng khi quét hết cả 1 bảng lớn luôn.
a chỉ e với
 
Upvote 0
Nhờ bạn đặt vấn đề mà mình cải tiến đáng kể hàm nội suy 2 chiều không xài vòng lặp!

PHP:
Option Explicit
Function NS2_GPE(VungTra As Range, xX As Double, yY As Double, Optional Vung2 As Boolean = True)
 'Hàm Noi Suy 2 Chieu Cai Tién:'
 Dim Col As Byte, Rws As Long
 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, ClsX As Range, ClsY As Range
 
 Col = VungTra.Columns.Count:                Rws = VungTra.Rows.Count
 Set RgNg = VungTra.Cells(1, 1).Resize(, Col - 1)
 
 y1 = Application.WorksheetFunction.Lookup(yY, RgNg)
 Set ClsY = RgNg.Find(y1, , xlFormulas, xlWhole)
 y2 = ClsY.Offset(, 1).Value:                Col = ClsY.Column
 If Vung2 Then
   Set RgDoc = VungTra.Cells(1).Offset(1 + Rws \ 2).Resize(Rws \ 2)
 Else
   Set RgDoc = VungTra.Cells(1, 1).Resize(Rws \ 2)
 End If
 x1 = Application.WorksheetFunction.Lookup(xX, RgDoc)
 Set ClsX = RgDoc.Find(x1):                  Rws = ClsX.Row
 x2 = ClsX.Offset(1).Value
 
 a11 = Cells(Rws, Col):                      a22 = Cells(Rws + 1, Col + 1)
 a12 = Cells(Rws, Col + 1):                  a21 = Cells(Rws + 1, Col)
 t1 = (a12 - a11) * (yY - y1) / (y2 - y1) + a11
 t2 = (a22 - a21) * (yY - y1) / (y2 - y1) + a21
 NS2_GPE = (t2 - t1) * (xX - x1) / (x2 - x1) + t1
 
End Function
 

File đính kèm

  • GPE.rar
    27.2 KB · Đọc: 22
Upvote 0
(1) Hình như cách tính nội suy 2 chiều của bạn chưa đúng lắm
Với hàm của mình viết tại đây: http://www.giaiphapexcel.com/forum/showthread.php?5828-hàm-nội-suy-1-chiều-và-2-chiều/page2
e đã xem bài viết của a.
"Nhược điểm lớn nhất của hàm nội suy 2 chiều ( tại #1) là vòng lặp thứ hai lại phải duyệt toàn bộ các cells trong vùng chọn. Nhưng thực chất ta chỉ cần:
- Ở vòng lặp đầu tạm chấp nhận vì duyệt chỉ trong hàng đầu
- Vòng sau chỉ cần duyệt cột đầu của vùng dữ liệu; Vì ta đã khai báo 2 biến dạng Range (Rng & Clls), nên lưu trong nó (kèm theo 1 cách đương nhiên) các trị số cột & hàng của chúng.'"
a nói rất đúng,không cần để các biến chạy tất cả vùng tra nữa mà chỉ cần chạy trong hàng&cột cần dùng.
nhưng e thấy về bản chất thì code e viết với của a là giống nhau mà.
vậy tại sao của e lại không ra được như vậy?mong a trả lời.
(mà a à.e thấy a trình bày rất ổn.nhưng a có thể khi viết dùng tên các biến dễ hiểu hơn không,như xX=hàng , yY = cột , tên các biến RgNg,RgDoc... cũng nên đổi..đó chỉ là ý kiến của e thôi)
 
Upvote 0
. . . nhưng e thấy về bản chất thì code e viết với của a là giống nhau mà.
vậy tại sao của e lại không ra được như vậy?mong a trả lời.
(mà a à.e thấy a trình bày rất ổn.nhưng a có thể khi viết dùng tên các biến dễ hiểu hơn không,như xX=hàng , yY = cột , tên các biến RgNg,RgDoc... cũng nên đổi..đó chỉ là ý kiến của e thôi)

Xx cũng dễ hiểu đó chứ. Biểu trưng của tọa độ Đề các về trục hoành mà; Còn Yy là trục tung đó thôi.
Nói vậy cho vui thôi; Nếu thích bạn dùng chức năng thay thế có trong CS VBE theo ý bạn mấy hồi. Mình cũng hay thay thế như vậy lắm, với code của người khác mà muốn sở hữu cho riêng mình.

Còn hàm bài trên liền kề, tác giả đã bỏ vòng lặp đi rồi;

Trong đó gọi hàm LOOKUP() của Excel ra xài; Mục đích là để tìm nhanh hơn trị trong ô của trục tọa độ cần tra trị.
Sau đó lại từ trị tìm ra vị trí ô của nó. (Cần tìm vị trí ô để còn tra theo trục của nó 4 giá trị 'biên' của số liệu cần tra. Như trong trang tính đó là [F12].resize(2,2) & [F19].resize(2,2))
 
Upvote 0
PHP:
Option Explicit
Function NS2_GPE(VungTra As Range, xX As Double, yY As Double, Optional Vung2 As Boolean = True)
 'Hàm Noi Suy 2 Chieu Cai Tién:'
 Dim Col As Byte, Rws As Long
 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, ClsX As Range, ClsY As Range
 
 Col = VungTra.Columns.Count:                Rws = VungTra.Rows.Count
 Set RgNg = VungTra.Cells(1, 1).Resize(, Col - 1)
 
 y1 = Application.WorksheetFunction.Lookup(yY, RgNg)
 Set ClsY = RgNg.Find(y1, , xlFormulas, xlWhole)
 y2 = ClsY.Offset(, 1).Value:                Col = ClsY.Column
 If Vung2 Then
   Set RgDoc = VungTra.Cells(1).Offset(1 + Rws \ 2).Resize(Rws \ 2)
 Else
   Set RgDoc = VungTra.Cells(1, 1).Resize(Rws \ 2)
 End If
 x1 = Application.WorksheetFunction.Lookup(xX, RgDoc)
 Set ClsX = RgDoc.Find(x1):                  Rws = ClsX.Row
 x2 = ClsX.Offset(1).Value
 
 a11 = Cells(Rws, Col):                      a22 = Cells(Rws + 1, Col + 1)
 a12 = Cells(Rws, Col + 1):                  a21 = Cells(Rws + 1, Col)
 t1 = (a12 - a11) * (yY - y1) / (y2 - y1) + a11
 t2 = (a22 - a21) * (yY - y1) / (y2 - y1) + a21
 NS2_GPE = (t2 - t1) * (xX - x1) / (x2 - x1) + t1
 
End Function
e đã xem của a.nó đúng rồi.
nhưng câu hỏi e muốn hỏi tiếp là nếu có nhiều hơn các vùng mưa có đến IX vùng mưa thì khi đó ko thể dùng Optional Vung2 As Boolean = True.
màa à.làm thế nào để tô màu như a vậy?nhìn có màu vào dễ kiểm tra hơn hẳn--=0
(mà cái file kết quả xổ xố.a để pass code,liệu có thể cho biết được khôngg ạ?)
 

File đính kèm

  • NoiSuy1.xls
    48.5 KB · Đọc: 13
Lần chỉnh sửa cuối:
Upvote 0
(1)
nhưng câu hỏi e muốn hỏi tiếp là nếu có nhiều hơn các vùng mưa có đến IX vùng mưa thì khi đó ko thể dùng Optional Vung2 As Boolean = True.
màa à.làm thế nào để tô màu như a vậy?nhìn có màu vào dễ kiểm tra hơn hẳn (3) --=0
((2) mà cái file kết quả xổ xố.a để pass code,liệu có thể cho biết được khôngg ạ?)

Biến True/False chỉ xài trong trường hợp chọn 1 trong 2 fương án thôi; Nếu có 9 vùng mưa thì fải cung cấp cho hàm 1 tham số kiểu Byte, hoặc Integer hay Long . . . gì gì đó để cho hàm làm đúng iêu cầu của bạn về vùng mưa.

(2) File KQSX là file đánh đề, nên tác giả không có í định fổ biến hay cổ súy, chắc vậy.

(3) Tô màu bằng chuột bình thường mà. Có fải tô bằng macro hay CF đâu mà bạn!. . .

Thân ái!
 
Upvote 0
Cụ thể cho bạn hàm 4 vùng mưa luôn đây, he, he,. . .

Mã:
Option Explicit
[B]Function NS2_4_GPE(VungTra As Range, xX As Double, yY As Double, Optional Vung As Byte = 1)[/B]
 'Hàm Noi Suy 2 Chieu Cai Tién:'
 Dim Col As Byte, Rws As Long
 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, ClsX As Range, ClsY As Range
 
 Col = VungTra.Columns.Count:                Rws = VungTra.Rows.Count
 Set RgNg = VungTra.Cells(1, 1).Resize(, Col - 1)
 
 y1 = Application.WorksheetFunction.Lookup(yY, RgNg)
 Set ClsY = RgNg.Find(y1, , xlFormulas, xlWhole)
 y2 = ClsY.Offset(, 1).Value:                Col = ClsY.Column
 
 Rws = Rws \ 4             [COLOR=red]'<=|'[/COLOR]
 Set RgDoc = VungTra.Cells(1).Offset(1 + (Vung - 1) * Rws).Resize(Rws)
 
 x1 = Application.WorksheetFunction.Lookup(xX, RgDoc)
 Set ClsX = RgDoc.Find(x1):                  Rws = ClsX.Row
 x2 = ClsX.Offset(1).Value
 a11 = Cells(Rws, Col):                      a22 = Cells(Rws + 1, Col + 1)
 a12 = Cells(Rws, Col + 1):                  a21 = Cells(Rws + 1, Col)
 t1 = (a12 - a11) * (yY - y1) / (y2 - y1) + a11
 t2 = (a22 - a21) * (yY - y1) / (y2 - y1) + a21
 NS2_4_GPE = (t2 - t1) * (xX - x1) / (x2 - x1) + t1
[B]End Function[/B]
 
Lần chỉnh sửa cuối:
Upvote 0
gửi tiền bối SA_DQ và ChanhTQ@

e không rành lắm về phương thức FIND trong VBA nên e không dùng công thức đó.
mặt khác e nhìn vào code nôi suy 2 chiều của tiền bối SA_DQ }}}}} và 1 phần rất quan trọng của tiền bối ChanhTQ@ }}}}} trong code lúc nãy a viết đó là
Rws = Rws \ 4 mà khiến e nảy ra ý tưởng.
PHP:
Function NoiSuy2_CT(VungTra As Range, hangcantra As Double, _
                    cotcantra As Double, vungmua As Integer) As Double
 'Ham Noi Suy 2 Chieu cai tien GPE.COM (kiennguyen)'
Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double
 'x1,x2 ung voi cot : y1,y2 ung voi hang'
Dim a11 As Double, a12 As Double, a21 As Double, a22 As Double
Dim t1 As Double, t2 As Double
Dim ktra As Boolean
Dim hangthu1 As Range, cotthu1 As Range
Dim Rw As Range, Cl As Range
Set hangthu1 = VungTra.Cells(1, 2).Resize(1, VungTra.Columns.Count)
Set cotthu1 = VungTra.Cells((VungTra.Rows.Count - 1) / 5 * (vungmua - 1) + 2, 1).Resize(7, 1)
 'neu co nhieu vung mua hon thi thay 5 = tong vungmua'
 'neu co nhieu hang hon trong 1 vung mua hon thi thay 7 = tong so hang cua 1vungmua'
For Each Cl In hangthu1
  If Cl <= cotcantra And Cl.Offset(, 1) >= cotcantra Then
        ktra = False
        y1 = Cl: y2 = Cl.Offset(, 1)
    For Each Rw In cotthu1
      If Rw <= hangcantra And Rw.Offset(1) >= hangcantra Then
           x1 = Rw: x2 = Rw.Offset(1)
           a11 = Cells(Rw.Row, Cl.Column): a12 = Cells(Rw.Row, Cl.Column + 1)
           a21 = Cells(Rw.Row + 1, Cl.Column): a22 = Cells(Rw.Row + 1, Cl.Column + 1)
           t1 = a11 + (a12 - a11) * (cotcantra - y1) / (y2 - y1)
           t2 = a21 + (a22 - a21) * (cotcantra - y1) / (y2 - y1)
           NoiSuy2_CT = t1 + (t2 - t1) * (hangcantra - x1) / (x2 - x1)
       End If
    Next Rw
    ktra = True
   End If
Next Cl
If ktra = False Then
  MsgBox "xem lai di nhe", vbInformation
Exit Function
End If
End Function
giờ thì thích bao nhiêu vùng mưa cũng được rồi. ;;;;;;;;;;; --=0
(có vẻ hơi quá khích)
 

File đính kèm

  • noisuy2 cai tien.xls
    49 KB · Đọc: 16
Upvote 0
Web KT
Back
Top Bottom