Hàm IF đơn giản mà bị lỗi

Liên hệ QC

hon7643

Thành viên mới
Tham gia
14/4/09
Bài viết
48
Được thích
3
Mình đang làm 1 hàm IF rất đơn giản.
Nhưng khi kết hợp với hàm "tách số" học của bác ndu và nhiều bạn khác, thì lại cho kết quả không đúng.
Nghiệm hòai không được, nhờ các bạn sửa lỗi giúp
 

File đính kèm

  • Lỗi hàm IF.xls
    22.5 KB · Đọc: 20
Mình đang làm 1 hàm IF rất đơn giản.
Nhưng khi kết hợp với hàm "tách số" học của bác ndu và nhiều bạn khác, thì lại cho kết quả không đúng.
Nghiệm hòai không được, nhờ các bạn sửa lỗi giúp
để hàm thành thế này;
=IF(--TachSo(A2,1)>250,1.5,IF(--TachSo(A2,1)>150,1.25,1))
vì ban đầu tách số ra nó đang ở dạng text,dấu -- vào để thành dạng number
 
Mình đang làm 1 hàm IF rất đơn giản.
Nhưng khi kết hợp với hàm "tách số" học của bác ndu và nhiều bạn khác, thì lại cho kết quả không đúng.
Nghiệm hòai không được, nhờ các bạn sửa lỗi giúp
Bạn nhân với 1 (a1*1) để nó ở dạng số là được
 
vì ban đầu tách số ra nó đang ở dạng text,dấu -- vào để thành dạng number
Cảm ơn bạn khoavu87 đã trợ giúp.
Cách của bạn nhằm giải quyết định dạng text thành number, mình sẽ áp dụng.
Nhưng trước đó, mình có thử kiểm tra bằng cách +1 cho ô có giá trị C100 đã tách số thì kết quả = 101.
Bạn giải thích thêm nha.
 
Cảm ơn bạn khoavu87 đã trợ giúp.
Cách của bạn nhằm giải quyết định dạng text thành number, mình sẽ áp dụng.
Nhưng trước đó, mình có thử kiểm tra bằng cách +1 cho ô có giá trị C100 đã tách số thì kết quả = 101.
Bạn giải thích thêm nha.
để hiểu đơn giản bạn làm thế này , tại e2 bạn đặt hàm =TachSo(A2,1) ,kq=150
tại cell e3 bạn nhập số =150
tại cell e4 bạn đặt =e3=e2 , kết quả trả về là false
 
Để hiểu bản chất của vấn đề ta dùng code thử như sau:

Mã:
Sub test()
MsgBox Asc(1)
MsgBox Asc(Str(1))
End Sub

Số 1 khi là số cho mã=49 (Msgbox số 1)
Số 1 khi chuyển sang dạng chuỗi cho mã 32 (Msgbox số 2)
Nhưng thực khó phân biệt vì đều hiển thị 1. Khi tìm kiếm, so sánh tốt nhất ta chuyển về 1 thể đồng nhất dùng hàm Value hay Text. Đây là lỗi thường gặp trong việc sử lý mã TK trong HTTK kế toán.
 
Kết hợp gợi ý của các bác, mình có phần nào nhìn ra được vấn đề mà trước đây không thấy.
Thực sự là khó phân biệt kết quả của ô sau khi tách số - nó là text hay number, mình cứ chủ quan chỉ kiểm tra bằng cách làm vài công thức cộng trừ nhân chia, thấy nó cho kết quả đúng mình cho nó là dạng number. Tới khi đụng tới IF thấy sai nên mới hỏi.
Nhưng mà mình vẫn chưa thông 1 điều: "khi bác ndu và nhiều bác khác đã viết code tách số từ chuỗi, mình nghĩ là các số được tách ra - nó mặc nhiên được định dạng số". Bây giờ khi đụng chuyện tìm kiếm, so sánh thì mới phát hiện và phải thêm -- trước đối số, phải value or text. Hay là các bác làm luôn code tách số mà số khi được tách ra có định dạng số (không phải value nữa).
 
Bạn cứ dưa ra phương pháp, ví dụ tách sẽ tìm thấy cái mà bạn chưa giải quyết hết để chắc chắn là số hay text. (Cái Code mà bạn áp dụng ấy)
Ví dụ:
-Đối với hàm UDF nếu bạn khai
Function TachSo(byval ch as String) as Integer (Hay as Long) thì nếu hàm không trả về số thì hàm lỗi chứ không thể là Text được

-Đối với Sub: nếu kết quả trả về dạng Cells(x,y)=Val(xxxxx) thì bảo đảm nó lsf số
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom