Hỏi về lỗi code

Liên hệ QC
Status
Không mở trả lời sau này.

binhnguyenthanh

Thành viên chính thức
Tham gia
18/8/09
Bài viết
79
Được thích
9
Em có đoạn code để đánh dấu các dòng theo điều kiện nhưng không biết lỗi do đâu nhờ mọi người check giúp.
Trong đoạn code em thêm điều kiện với hàm Abs thì không chạy được nữa.
 

File đính kèm

Em có đoạn code để đánh dấu các dòng theo điều kiện nhưng không biết lỗi do đâu nhờ mọi người check giúp.
Trong đoạn code em thêm điều kiện với hàm Abs thì không chạy được nữa.
sai dấu ngoặc
Mã:
Abs(Hour(cll.Offset(, 10)) - Hour(cll.Offset(-1, 11))) < 1
Sao không xét bằng nhau cho gọn, cần gì hàm ABS
 
sai dấu ngoặc
Mã:
Abs(Hour(cll.Offset(, 10)) - Hour(cll.Offset(-1, 11))) < 1
Sao không xét bằng nhau cho gọn, cần gì hàm ABS

Đó là cách so sánh A ở trong khoảng B+-1
Cách này cũng dùng để so sánh số thực. Trong lập trình, hai số thực được coi là bằng nhau khi Abs(A-B) < ép si lon
 
Đó là cách so sánh A ở trong khoảng B+-1
Cách này cũng dùng để so sánh số thực. Trong lập trình, hai số thực được coi là bằng nhau khi Abs(A-B) < ép si lon
Hàm Hour trả về số nguyên nên xét bằng trực tiếp cũng được
Số ép si lon trong VBA thường qui ước là bao nhiêu vậy bạn. Cám ơn bạn
 
Độ chính xác của máy tính mà ta dùng trên thị trường hiện nay là 15 chữ số.
Ép si lon tuỳ theo độ chính xác mà bạn cần thiết, nhưng không thể nhỏ hơn 10^-15
 
Vấn đề là em cần điều kiện Abs vì muốn loại bỏ những dòng có khoảng thời gian cách nhau nhỏ hơn 1 giờ (như trong file dòng 52;53 với khoảng thời gian là 7:58 và 8:00)
 
Vấn đề là em cần điều kiện Abs vì muốn loại bỏ những dòng có khoảng thời gian cách nhau nhỏ hơn 1 giờ (như trong file dòng 52;53 với khoảng thời gian là 7:58 và 8:00)
Với điều kiện nầy thì dùng biểu thức luận lý
Mã:
Abs(Hour(cll.Offset(, 10)) * 60 + Minute(cll.Offset(, 10)) - Hour(cll.Offset(-1, 11)) * 60 - Minute(cll.Offset(-1, 11))) < 60
 
Em cũng thấy là thừa một dấu ngoặc ")" nhưng khi xóa đi thì lại báo lỗi. Hic.
Hic cái khỉ mốc. Bên trái có 5 cái, bên phải cũng 5 cái, thừa chỗ nào?

Vấn đề là em cần điều kiện Abs vì muốn loại bỏ những dòng có khoảng thời gian cách nhau nhỏ hơn 1 giờ (như trong file dòng 52;53 với khoảng thời gian là 7:58 và 8:00)
Với đòi hỏi này, dùng công thức Hour để lấy giờ là sai rồi.
Đem ô 53 trừ thẳng cho ô 52, lấy phần thập phân (bỏ phần nguyên), lấy Abs và so sánh với 1.

Lý thuyết thì vậy, nhưng thực hành thì uyển chuyển một chút cho công thức nó gọn. Tức là lấy Abs trước khi bỏ phần nguyên
Mod(Abs(A52-A53), 1) < 1

(đó là cách so giờ, bất kể ngày. Nếu thực sự cần thời điểm gần nhau thì phải thêm code xét ngày)
 
Hic cái khỉ mốc. Bên trái có 5 cái, bên phải cũng 5 cái, thừa chỗ nào?


Với đòi hỏi này, dùng công thức Hour để lấy giờ là sai rồi.
Đem ô 53 trừ thẳng cho ô 52, lấy phần thập phân (bỏ phần nguyên), lấy Abs và so sánh với 1.

Lý thuyết thì vậy, nhưng thực hành thì uyển chuyển một chút cho công thức nó gọn. Tức là lấy Abs trước khi bỏ phần nguyên
Mod(Abs(A52-A53), 1) < 1

(đó là cách so giờ, bất kể ngày. Nếu thực sự cần thời điểm gần nhau thì phải thêm code xét ngày)
Hình như phải chuyển thời gian theo đơn vị giờ vì đơn vị mặc định là ngày
Chuyển qua lại số và thời gian giờ, phút bằng cách nhân 24, 24*60 thường có sai số rất nhỏ, dùng hàm hour để loại sai số nầy
 
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom