Tạo hàm tính độ ẩm từ chênh lệch nhiệt kế khô - ướt (1 người xem)

Liên hệ QC

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

mymapmap

Thành viên hoạt động
Tham gia
4/5/09
Bài viết
167
Được thích
24
Nghề nghiệp
KTV Điện tử
Mình có công thức tính %RH từ hai đại lượng t68 nhiệt độ nhiệt kế khô, và tw nhiệt độ nhiệt kế ướt để tính %RH theo diễn giải tính toán trong file đính kèm. Giờ mình muốn nó thành một hàm hay một add in chỉ cần gọi hàm nhập hai đại lượng t68 và tw sẽ trả về kết quả %RH. ví dụ %RH =CVRH(t68,tw)= 98
Các Thầy chỉ giúp cách thực hiện với.
Cảm ơn nhiều.
mymapmap.
 

File đính kèm

Hàm tự tạo để tính tổng có nội dung như sau:
PHP:
Option Explicit
Function TongE(Rng As Range, NhD As Double)
 Dim J As Byte
 For J = 1 To 4
    TongE = TongE + Rng(J).Value * (NhD + 273.15) ^ (J - 2)
 Next J
End Function

Cách xài:
Tại [F14] ta nhập cú fáp: =TongE(E3:E6,E2)

Sẽ cho ta kết quả như ở ô bên trái liền kề
 
Upvote 0
Xin cảm ơn Thầy SA_DQ về sự quan tâm giúp đề tài mình nêu. Nhưng ở đây thầy có thể đưa ra hàm tính đến kết quả sau cùng ở cell J11 từ hai đại lượng đầu vào t68, tw. nó có các bước như sau:
b1: từ t68 ở ô tô vàng E1 theo công thức hàm mủ bên trái tính được es
b2: từ tw ở ô tô vàng E18 cũng theo công thức hàm mủ bên trái tính được ew
b3: từ ew ta tính e theo công thức RH bên trái e = ew-Ap(t68-tw)
b4 : ra sản phẩm cuối cùng tính ra RH = e/es*100
trong file đính kèm có ở sheet 2 có bảng số liệu t68 và giá trị tw ta dùng hàm tự tạo chuyển sang vùng mới là giá trị %RH
Cảm ơn!
 

File đính kèm

Upvote 0
4 bước theo iêu cầu của bạn đã tính xong

Nhưng chưa rõ iêu cầu này lắm:
trong file đính kèm có ở sheet 2 có bảng số liệu t68 và giá trị tw ta dùng hàm tự tạo chuyển sang vùng mới là giá trị %RH
Như G1..G4 lấy ở đâu trên trang Sheet2?
 

File đính kèm

Upvote 0
Ở đây g1...g4 cũng như A p là các hằng số mình nghỉ có thể khai báo trong modul luôn và việc tính es, ew cũng như e không cần thể hiện trong bảng tính. mà chỉ từ t68, tw quá trình tính toán bên trong code và trả về giá trị %RH trên bảng tính.
Ở Sheet 2 là một ứng dụng của mình đổi data vùng A2:I41 là t68 với tw ở cell L1 là oC sang vùng M2:U41 là %RH
Đây là những gì mình cần nhưng có lẽ sự diễn giải của mình không được rõ làm mất thời gian quý báo các thầy. Rất mong sự giúp đở để mình hoàn thành bảng tính
Xin cảm ơn Thầy SA_DQ và Thầy HYEN17 Đã chỉ giúp.
Xin cảm ơn!
 
Upvote 0
(1) Ở đây g1...g4 cũng như A p là các hằng số mình nghỉ có thể khai báo trong modul luôn và việc tính es, ew cũng như e không cần thể hiện trong bảng tính. mà chỉ từ t68, tw quá trình tính toán bên trong code và trả về giá trị %RH trên bảng tính.

(2) Ở Sheet 2 là một ứng dụng của mình đổi data vùng A2:I41 là t68 với tw ở cell L1 là oC sang vùng M2:U41 là %RH
Đây là những gì mình cần nhưng có lẽ sự diễn giải của mình không được rõ làm mất thời gian. . . . Rất mong sự giúp đở để mình hoàn thành bảng tính

(1) Các giá trị G1..G4 bạn đã đưa ra tại [E2..E5]
& bài trên đã tính được giá trị %RH tại ô [K11] (& trùng khớp với trị do bạn tính ở ô trái liền kề.

(2) Vì chưa biết các "hằng" G1:G4 ở đâu? Nên chưa tính số liệu ra các ô trong bảng.
(Nếu lấy các trị [E2..E5] làm hằng thì %RH nhận được là số quá lớn (!)

Ví dụ tại [M2] mà áp công thức =TinhRH(Bon,A2,Sheet2!L$1) thì kết quả ra sẽ là: 154,452.8 )
 
Upvote 0
Dạ hằng số g1, g2, g3, g4 ,p là cố định luôn luôn nhận giá trị
g1= -6353.6311
g2= 34.04926034
g3= -0.019509874
g4= 0.0000128
p = 1013,25
Và mình cũng tính thử trong công thức cho giá trị trên ở sheet2 với t68 = 28,9 ở cell A2 và tw = 27,6 ở cell L1 thì %RH = 90,47.
Mình khai báo g1..g4 trong VBA như vậy có đúng không a?
Xin cảm ơn thầy ChanhTQ@
 

File đính kèm

Upvote 0
Bạn làm về kĩ thuật & chú í rắng sai 1 con toán bán 1 con trâu đó nha(1)

(3) Dạ hằng số g1, g2, g3, g4 ,p là cố định luôn luôn nhận giá trị
g1= -6353.6311
g2= 34.04926034
g3= -0.019509874
g4= 0.0000128
p = 1013,25
Và mình cũng tính thử trong công thức cho giá trị trên ở sheet2 với t68 = 28,9 ở cell A2 và tw = 27,6 ở cell L1 thì %RH = 90,47.

(2) Mình khai báo g1..g4 trong VBA như vậy có đúng không a?

(1) Ở trang tính 'Sheet2': Ai đời cả bảng [a2:I41] thì nhập số liệu đúng;
Nhưng tại [L1] lại nhập chuỗi là sao hỡi trời?!?

(2) Bạn khai báo như vậy là đúng; Xử lí chúng thì xem trong file.

(3) Ở trang 'Sheet1' bạn nhập không sai, nên đúng!
 

File đính kèm

Upvote 0
Nhưng chưa rõ iêu cầu này lắm:

Như G1..G4 lấy ở đâu trên trang Sheet2?
Mình sữa code của thầy HYEN17 lại như thế này thì thấy ok

Mã:
Option ExplicitConst HSa As Double = 66 * 10 ^ -5
Const HSb As Double = 0.00115
Const HSp As Double = 1013.25
Const g1 As Double = -6353.6311
Const g2 As Double = 34.04926034
Const g3 As Double = -0.019509874
Const g4 As Double = 0.000012811805

Function TinhRH(T68 As Double, Tw As Double)
 Dim Es As Double, Ew#, Aa#, Ap#, ApT#, Ee#, EsS#
 Es = Exp(TongE(T68))
 Ew = Exp(TongE(Tw))
 Aa = HSa * (1 + HSb * Tw)
 Ap = Aa * HSp
 ApT = Ap * (T68 - Tw)
 Ee = (0.01 * Ew) - ApT
 EsS = 0.01 * Es
 TinhRH = Ee / EsS * 100
End Function
Function TongE(NhD As Double)
    TongE = g1 * (NhD + 273.15) ^ -1 + g2 * (NhD + 273.15) ^ 0 + g3 * (NhD + 273.15) ^ 1 + g4 * (NhD + 273.15) ^ 2
End Function

Không biết các thầy còn ý kiến hay nào để code ngắn gọn hơn không a?
Xin cảm ơn các Thầy đã giúp đỡ.
Xin cảm ơn nhiều.
 
Upvote 0
Cái này chỉ là đưa lên để tham khảo thêm thôi; Chuyện ngắn gọn thì . . . .
PHP:
Function TongG(NhD As Double)
 Dim J As Byte, Arr()
 Arr() = Array(g1, g2, g3, g4)
 For J = 1 To 4
    TongG = TongG + Arr(J - 1) * (NhD + 273.15) ^ (J - 2)
 Next J
End Function
 
Upvote 0
Code thì nghiêm chỉnh mới quan trọng. Chứ ngắn gọn chỉ dùng để loè người mới học code.
Code của bạn ở bài #9 có 2 vấn đề:
1. 273.5 cũng là hằng số. Tại sao lại không khai báo nó trước?
2. Trong hàm TongE, con toán NhD + 273.5 được tính đến 4 lần. Nếu dùng một biến chứa, dài thêm 1 dòng, thì giảm được 3 lần tính. Thí dụ nhỏ cho bạn thấy, ngắn gọn không hẳm đã là tốt.

Còn một vấn đề nhỏ nữa. Theo kỹ thuật code thì các hằng số của bạn chỉ sử dụng cho hàm, không sử dụng nơi khác. Khai báo chúng theo tầm vực toàn cục của module là trái luật gói gọn (chỉ trái luật, chứ không hẳn là sai). Nên khai báo chúng bên trong hàm.
 
Upvote 0
Web KT

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

Back
Top Bottom