Trao đổi về thuật toán trong lập trình VBA (7 người xem)

Liên hệ QC

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

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,201
Được thích
24,664
Tôi mở chủ đề này vì thấy ít các nhà lập trình VBA (hay ngôn ngữ khác) quan tâm và không thấy trao đổi.

Hiểu đơn giản nhất: Thuật toán là một dãy hữu hạn các bước, mỗi bước mô tả chính xác các phép toán hoặc hành động cần thực hiện, giải quyết một vấn đề hay bài toán nào đó. Như vậy, để giải quyết một bài toán nào đó, cần phải có trình tự các bước giải quyết, đó là thuật toán.

Trong lập trình, thuật toán đóng vai trò hết sức quan trọng, quyết định đến sự thành công của các bài toán trong VBA. Chúng ta không thể giải được bài toán nếu không nắm được thuật toán (nhiều bạn nhờ giúp đỡ công việc mà chính họ nhiều khi còn hiểu một cách ấm ớ +-+-+-+). Ngoài ra 1 bài toán có thể có nhiều lời giải. Có lời giải khoa học, ngắn gọn, nhanh chóng, có lời giải thì dài dòng... Điều đó phụ thuộc vào tư duy và kỹ năng của mỗi người...
Cũng phải khẳng định nếu không có tư duy thuật toán tốt thì việc xây dựng chương trình lớn trên VBA coi như không khả thi.

Do vậy, tôi lập chủ đề này để chúng ta trao đổi thêm về thuật toán và kỹ năng giải quyết.
 
Lần chỉnh sửa cuối:
Thuật dùng ngôn ngữ truy vấn dữ liệu T-SQL, không dùng VBA. Các thành viên tham khảo, nếu không dùng Addin A-Tools thì có thể dùng ADO để thực thi T-SQL
Tiếc rằng T-SQL, A-Tools, ADO không phải thuật toán, chỉ là công cụ thực hiện thuật toán mà thôi.
 
Upvote 0
Tôi thì chẳng biết thuật toán là cái gì hết, khi gặp một vấn đề cần giải quyết gì thì tôi cứ làm sao cho ra được chính xác kết quả yêu cầu, thế là xong!
Còn ứng dụng nó cho cái gì tôi cũng chẳng biết, người ta yêu cầu làm gì mình làm cái đó thôi, còn người ta ứng dụng cho cái gì thì đó là việc của người ta ... ẹc ... ẹc .... |||||

Đó là bài toán TỔNG HỢP VÀ TÍNH TỔNG thôi mà (như PivotTable ấy)
Với VBA, cứ dùng Dictionary là xong chuyện:
Trả lời vậy mới đúng là HTN chứ
 
Upvote 0
Đếm bi, đếm màu:

Nếu đề bài không xác định phạm vi giới hạn thì dùng Dictionary đúng là tổng quát và đơn giản dễ hiểu nhất - đối với người đã biết dùng qua công cụ này.

Nếu bài cho phép đặt phạm vi giới hạn thì dùng kỹ thuật chỉ số mảng trực tiếp cũng là cách rất hữu hiệu. Kỹ thuật này ta sẽ thường gặp trong các bài toán đếm số ký tự khác nhau trong chuỗi.

Nguyên tắc chỉ số mảng:

Ví dụ ta có thể giới hạn số màu trong 255 màu. Như vậy biến mauCuaVienBi được giới hạn trong khoảng 1-255
Dim cacMau(1 to 255) as Integer
Vòng lặp:
- Lấy bi từ hộp
- cacMau(mauCuaVienBi) = cacMau(mauCuaVienBi) + 1
Kết vòng lặp
Khi đọc hết số bi trong hộp, ta sẽ có một mảng chứa số đếm của mỗi màu.

Lưu ý: nếu không có giới hạn thì màu trong VBA hình như lên tới 16777215 (vbWhite)
 
Upvote 0
Hôm qua hướng dẫn các học viên biến thuật toán thành hiện thực bằng cách xây dựng hàm tương tự COUNTIF. Đúng là không dễ dàng biến từ SƠ ĐỒ KHỐI thành mã VBA. !$@!!
 
Upvote 0
Đúng là không dễ dàng biến từ SƠ ĐỒ KHỐI thành mã VBA. !$@!!
cái này không đúng à nha có sơ đồ khối mô tả thuật toán, việc còn lại code rất dễ dàng, ngôn ngữ chỉ là hình thức để test ý tưởng trên thuật toán thôi. Giống như người thợ xậy không biết gì về thiết kế nhưng người ta nhìn vào bảng vẽ thì tự động biết xây

Biểu diễn hàm countif bằng thuật toán cũng đơn giản không có khó đâu:
Ý tưởng
Viết 1 function (giá trị cần tìm, dãy số) trả về true hoặc false (true là giá trị cần tìm trùng khớp với dãy số, false là ngược lại)
Hàm main() sử dụng vòng lập duyệt và tất cả các giá trị mõi lần duyệt gọi lại function (giá trị cần tìm, dãy số) và tăng biến đếm lên nếu nó đúng yêu cầu, như vậy là ok
 
Lần chỉnh sửa cuối:
Upvote 0
cái này không đúng à nha có sơ đồ khối mô tả thuật toán, việc còn lại code rất dễ dàng, ngôn ngữ chỉ là hình thức để test ý tưởng trên thuật toán thôi. Giống như người thợ xậy không biết gì về thiết kế nhưng người ta nhìn vào bảng vẽ thì tự động biết xây

Thì mô tả thuật toán bằng sơ đồ khối mà anh (không liên quan đến ngôn ngữ lập trình). Sau đó là việc áp dụng với ngôn ngữ lập trình, trong tình huống này là VBA.
 
Upvote 0
Web KT

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

Back
Top Bottom