Sử dụng VBA cho hàm if lấy giá trị tương đối

Liên hệ QC

hitmen

Thành viên mới
Tham gia
14/3/11
Bài viết
23
Được thích
5
Các bác cho em hỏi câu lệnh này sai ở chỗ nào

If Texbox1.Value = "* LPV *" Then
Textbox2 = "bac 2"
Else
Textbox2 = "bac 1"
End If

Em muốn tìm trong textbox1 giá trị có chữ LPV thì textbox 2 hiện chữ "Bậc 2" còn không thì là "Bậc 1"
 
Các bác cho em hỏi câu lệnh này sai ở chỗ nào

If Texbox1.Value = "* LPV *" Then
Textbox2 = "bac 2"
Else
Textbox2 = "bac 1"
End If

Em muốn tìm trong textbox1 giá trị có chữ LPV thì textbox 2 hiện chữ "Bậc 2" còn không thì là "Bậc 1"
Bạn sửa lại điều kiện Texbox1.Value = "* LPV *" thành Instr(Texbox1.Value,"LPV")>0
 
Upvote 0
PHP:
const sTxt1 as string ="*LPV*"
Const sTxt2 as string ="*XXX gioi danh*"
Dim sMatch as string
sMatch = vba.ucase(textbox1.value)
If sMatch  like sTxt1 or sMatch like sTxt2 then
Textbox2.value="bac 2"
Else
Textbox2.value="bac 1"
End if
 
Upvote 0
Em cám ơn các bác, vậy em muốn thêm 1 giá trị nữa ví dụ If Texbox1.Value Like "*LPV*" or ""*ABC*"Then

lại không được ạ
Sửa cho đúng cú pháp là được, chẳng hạn:
If Texbox1.Value Like "*LPV*" Or Texbox1.Value Like ""*ABC*" Then
 
Upvote 0
Em cám ơn các bác, vậy em muốn thêm 1 giá trị nữa ví dụ If Texbox1.Value Like "*LPV*" or ""*ABC*"Then

lại không được ạ

Bạn cần học thêm về cách xét ưu tiên toán tử trong biểu thức
Bạn có 3 điểm sai:
1. Số dấu nháy kép trong một biểu thức luôn luôn phải là số chẵn. Biểu thức của bạn có 5 dấu, số lẻ.
2. "Like" là một toán tử, "Or" cũng là một toán tử. Trong một biểu thức lô gic thì ưu tiên của Or sau hầu hết các toán tử khác. Tức là biểu thức của bạn nếu không sai ngữ pháp (syntax - xem lỗi 3) thì cũng ra sai kết quả.
3. Like là toán tử so sánh; hai vế bên trái và phải của nó phải là chuỗi. Or là toán tử lô gic; hai vế bên trái và phải của nó đều phải là lô gic (boolean). Trong biểu thức của bạn, theo ngữ pháp thì VBA sẽ coi như bên phải Or là một trị boolean, nếu không ép được chuỗi "*ABC*" ra boolean thì nó sẽ báo lỗi.
 
Upvote 0
Copy trên xuống rồi thêm cái chỗ Or Texbox1.Value Like mà không có để ý phía sau dư mất một dấu nháy kép. Cái này gọi là cái tội ẩu.
Cách khác để giải quyết vấn đề ở bài #5 là thay bởi điều kiện InStr(Texbox1.Value,"LPV")+InStr(Texbox1.Value,"ABC")>0
 
Upvote 0
Em cám ơn anh Phúc, tiện thể em xin hỏi anh luôn về hàm và VBA vì em tìm chủ để hàm countif chưa đề cập đến vấn đề này.

Em có 1 cột gồm năm sinh của đối tượng, bây giờ em thống kê tổng hợp bao nhiêu người đến thời điểm year(now()) nhỏ hơn 18 tuổi

em dùng hàm =COUNTIF(B2:B6;YEAR(now())-{B2:B6}<"18") không được

1536422853214.png
 
Upvote 0
Em cám ơn anh Phúc, tiện thể em xin hỏi anh luôn về hàm và VBA vì em tìm chủ để hàm countif chưa đề cập đến vấn đề này.

Em có 1 cột gồm năm sinh của đối tượng, bây giờ em thống kê tổng hợp bao nhiêu người đến thời điểm year(now()) nhỏ hơn 18 tuổi

em dùng hàm =COUNTIF(B2:B6;YEAR(now())-{B2:B6}<"18") không được

View attachment 203460
Nó phải là =COUNTIF(B2:B6;">"&YEAR(NOW())-18), khỏi VBA luôn.
 
Upvote 0
Tính tuổi có thể có vài cách tính:
(0) Tính theo tròn năm
(1) Tính tròn tháng
& (2) tính tròn ngày

(1) Hay được áp dụng trong hưởng chế độ, chính sách về BHXH, như tính ngày fép được hưởng trong năm, niên hạn lên/xuống lương,. . . .
1 năm có 365.25 ngày & 1 tháng có 365.25/12 ngày

(2) Tuổi vị thành niên fạm fáp hay bị fạm fáp.
 
Upvote 0
Web KT
Back
Top Bottom