Bài tập về code VBA

Liên hệ QC

today100506

Thành viên chính thức
Tham gia
2/6/10
Bài viết
87
Được thích
41
Nghề nghiệp
IT
[HUUDUCTRAN] CODE MẪU ! XEM & PHÁT TRIỂN ! UPDATE LIÊN TỤC

Xin chào anh chị,

Em xin lập topic này để đưa lên các code mẫu (có kèm file mẫu + code)

Mời anh chị vào xem

Nếu thấy chỗ nào chưa hay, chưa đúng, chưa hợp lý
anh chị cứ góp ý, cứ nói..., cứ sửa...thoải mái !

Em xin chân thành cảm ơn !
 
Lần chỉnh sửa cuối:
Theo tôi thì, sau khi đã được ai đó hướng dẫn, thì bạn phải khắc phục, cũng tương tự như hàm ISEVENT thì hàm này ngược lại, vậy cho nên bạn phải theo hướng mới mà áp dụng chứ? Hay bạn cứ vẫn thích "phô trương" phương thức của bạn?

Chỉ là góp ý, còn tùy bạn muốn nghĩ tôi sao cũng được.

Qua bài số 57, chủ thớt có nói rõ là không muốn nghe lời bàn. Người nào muốn bàn thì phải chứng minh bằng code.

Điều này cho biết chủ thớt:
1. không quan tâm đến giải thuật mà chỉ quan tâm đến code; hoặc
2. cho rằng người không đưa ra code là người chỉ biết nói dóc; hoặc
3. cả hai điều trên

Thực ra, nếu chủ thớt quan tâm đến giải thuật thì đã chịu khó tìm hiểu và đã nhận ra rằng trên diễn đàn này có hơn một lần, tôi từng giải thích rằng dùng con toán MOD để xét số chẵn lẻ là cách của tay mơ. Dân sành điệu đem số ra xét bit nhỏ nhất; nếu bit này 'ON' là số lẻ, và 'OFF' lả số chẵn.
 
Lần chỉnh sửa cuối:
Upvote 0
Thực ra, nếu chủ thớt quan tâm đến giải thuật thì đã chịu khó tìm hiểu và đã nhận ra rằng trên diễn đàn này có hơn một lần, tôi từng giải thích rằng dùng con toán MOD để xét số chẵn lẻ là cách của tay mơ. Dân sành điệu đem số ra xét bit nhỏ nhất; nếu bit này 'ON' là số lẻ, và 'OFF' lả số chẵn.

Theo hàm ISEVEN của hàm Excel thì cách thức nó hoạt động là lấy số nguyên để tính, giả sử giá trị là 2.9999 thì nó vẫn tính là số chẳn. Cho nên ta chỉ cần chọn trong giá trị để lấy số nguyên là được (thay vì dùng hàm INT thì dùng hàm FIX nó chắc ăn hơn), sau đó dùng MOD để kiểm tra lại là được, cho nên không cần phải xét bit, theo em nghĩ như thế.
 
Upvote 0
Topic này đặt ở chuyên mục thư giãn thì hợp lý hơn, mình tin rằng lúc này số người vào đây để đọc code, tải file thì ít còn vào để xem diễn biến của topic và thư giãn thì nhiều.

Làm thêm chừng vài chục bài nữa chắc cũng phải vậy quá
Cười nhiều chút cho đời bớt khổ ###@#!***&&%:blowup:
 
Upvote 0
Theo hàm ISEVEN của hàm Excel thì cách thức nó hoạt động là lấy số nguyên để tính, giả sử giá trị là 2.9999 thì nó vẫn tính là số chẳn. Cho nên ta chỉ cần chọn trong giá trị để lấy số nguyên là được (thay vì dùng hàm INT thì dùng hàm FIX nó chắc ăn hơn), sau đó dùng MOD để kiểm tra lại là được, cho nên không cần phải xét bit, theo em nghĩ như thế.


Hàm MOD được thể hiện bằng một con toán chia và một con toán trừ. Bit And là một trong những con toán căn bản của CPU - rất nhanh và rất gọn. Vì vậy, nếu ngôn ngữ hổ trợ phép tính bit and thì nó giải thuật xét bit sẽ là giải thuật hiệu nghiệm hơn hàm MOD gấp bội lần.


phân tích: số nguyên được chứa trong bộ nhớ dưới dạng nhị phân. Theo dạng nhị phân, bit nhỏ nhất tượng trưng cho số 1. Số lẻ có dạng 2n + 1 cho nên bit nhỏ nhất này luôn luôn ON, ngược lại số có dạng 2n thì bit này OFF.
Đồng thời, trong VBA phép and là phép toán bit. Có nghĩa là hai vế sẽ được AND từng bit một với nhau. Ví dụ, số 1 là 01, and với số 2 là 10 sẽ ra 0; và 1 and 3 = 1 (3 nhị phân là 11); 2and 3 = 2
Suy ra, khi ta đem 1 AND với một số có bit nhỏ nhất ON thì kết quả sẽ là 1; Trái lại, nếu số có bit nhỏ nhất OFF thì kết quả là 0.


áp dụng:
If (n And 1) Then
là số lẻ
Else
là số chẵn
End If


function IsEven_Che(byVal n As Long) As Boolean
IsEven_Che = not (1 and n)
End Function


gọn gàng nhẹ nhàng. Nếu muốn bẫy lỗi gì đó thì viết thêm 1 hàm gói bên ngoài, và bẫy lỗi trước khi gọi hàm này.
 
Lần chỉnh sửa cuối:
Upvote 0
Hàm MOD được thể hiện bằng một con toán chia và một con toán trừ. Bit And là một trong những con toán căn bản của CPU - rất nhanh và rất gọn. Vì vậy, nếu ngôn ngữ hổ trợ phép tính bit and thì nó giải thuật xét bit sẽ là giải thuật hiệu nghiệm hơn hàm MOD gấp bội lần.


phân tích: số nguyên được chứa trong bộ nhớ dưới dạng nhị phân. Theo dạng nhị phân, bit nhỏ nhất tượng trưng cho số 1. Số lẻ có dạng 2n + 1 cho nên bit nhỏ nhất này luôn luôn ON, ngược lại số có dạng 2n thì bit này OFF.
Đồng thời, trong VBA phép and là phép toán bit. Có nghĩa là hai vế sẽ được AND từng bit một với nhau. Ví dụ, số 1 là 01, and với số 2 là 10 sẽ ra 0; và 1 and 3 = 1 (3 nhị phân là 11); 2and 3 = 2
Suy ra, khi ta đem 1 AND với một số có bit nhỏ nhất ON thì kết quả sẽ là 1; Trái lại, nếu số có bit nhỏ nhất OFF thì kết quả là 0.


áp dụng:
If (n And 1) Then
là số lẻ
And
là số chẵn
End If


function IsEven_Che(byVal n As Long) As Boolean
IsEven_Che = not (1 and n)
End Function


gọn gàng nhẹ nhàng. Nếu muốn bẫy lỗi gì đó thì viết thêm 1 hàm gói bên ngoài, và bẫy lỗi trước khi gọi hàm này.

tôi từng giải thích rằng dùng con toán MOD để xét số chẵn lẻ là cách của tay mơ...
Đây là điều em muốn nghe...
Giờ em lại học được thêm một điều mới...
Xin cảm ơn VetMini
 
Upvote 0
Một cái bài dở bẹt, cũ đã 6 năm mà cũng ráng đào lên được.
Đào lên thì mới có cớ tham gia. Chả nhẽ hơn 3 năm không viết bài nào? Không có khó khăn gì, vd. không làm gì liên qua tới ếch xào, chả nhẽ bịa ra một vấn đề để hỏi?
 
Upvote 0
Đào lên thì mới có cớ tham gia. Chả nhẽ hơn 3 năm không viết bài nào? Không có khó khăn gì, vd. không làm gì liên qua tới ếch xào, chả nhẽ bịa ra một vấn đề để hỏi?
Ý tôi nói là hết chỗ lại đi đào một cái thớt mà chính mình cũng cho là đăng trật góc.
Nếu đã cho là nó trật chỗ thì làm ngơ cho nó chìm luôn, bới lên chi?

(Ờ mà bác nói "có cớ tham gia" tôi mới nhận ra hình như chính cái nit cũng là hơn 3 năm đào lại)
1582537807993.png
 
Upvote 0
Ý tôi nói là hết chỗ lại đi đào một cái thớt mà chính mình cũng cho là đăng trật góc.
Nếu đã cho là nó trật chỗ thì làm ngơ cho nó chìm luôn, bới lên chi?

(Ờ mà bác nói "có cớ tham gia" tôi mới nhận ra hình như chính cái nit cũng là hơn 3 năm đào lại)
View attachment 232413
E vẫn vào mà chẳng qua, k cmt rep topic thôi. :D Chứ đào lại đâu. Bác nói thế buồn
 
Upvote 0
Web KT

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

Back
Top Bottom