Đếm từ trong Excel VBA
Dưới đây chúng ta sẽ xem xét một chương trình trong Excel VBA đếm số từ trong một phạm vi đã chọn. Một hoặc nhiều khoảng trắng được giả định để phân tách các từ.
Tình huống:
-
Đầu tiên, chúng ta khai báo hai đối tượng Range và ba biến. Chúng tôi gọi các đối tượng Range là rng và ô. Một biến Số nguyên mà chúng tôi gọi là cell AdWords, một biến Số nguyên mà chúng tôi gọi là tổng AdWords và một biến Chuỗi mà chúng tôi gọi là nội dung.
Dim rng As Range, cell As Range Dim cellWords, totalWords As Integer, content As String
-
Chúng ta khởi tạo đối tượng Range rng với phạm vi đã chọn và hai biến kiểu Integer với giá trị 0.
Set rng = Selection cellWords = 0 totalWords = 0
-
Chúng tôi muốn kiểm tra từng ô trong một phạm vi được chọn ngẫu nhiên (phạm vi này có thể có kích thước bất kỳ). Trong Excel VBA, bạn có thể sử dụng vòng lặp Cho Mỗi Tiếp theo cho việc này. Thêm các dòng mã sau:
For Each cell In rng Next cell
Lưu ý: rng và ô được chọn ngẫu nhiên ở đây, bạn có thể sử dụng bất kỳ tên nào.
Hãy nhớ tham khảo những tên này trong phần còn lại của mã của bạn.
-
Tiếp theo, chúng tôi xác định cho mỗi ô trong phạm vi này nó chứa bao nhiêu từ. Để bỏ qua ô có chứa công thức, hãy thêm dòng mã sau vào giữa For Each và Next (chỉ khi ô.HasFormula là false, chúng tôi tiếp tục).
If Not cell.HasFormula Then End If
-
Đầu tiên, chúng ta ghi nội dung của ô vào nội dung biến.
Tiếp theo, chúng ta loại bỏ các khoảng trắng ở đầu và cuối (nếu có). Trong Excel VBA, bạn có thể sử dụng hàm Trim cho việc này. Ví dụ: “excel vba” sẽ được chuyển đổi thành “excel vba”. Thêm các dòng mã sau vào câu lệnh If của bạn.
content = cell.Value content = Trim(content)
Lưu ý: hàm trim trong Excel VBA không loại bỏ khoảng trắng thừa giữa các từ, nhưng điều đó OK trong ví dụ này.
-
Tại thời điểm này, một ô vẫn có thể trống. Nếu ô trống, chúng tôi chỉ định giá trị 0 cho biến ô AdWords. Nếu không, nó chứa ít nhất một từ và chúng tôi chỉ định giá trị 1 cho biến ô AdWords. Thêm các dòng mã sau vào câu lệnh If của bạn.
If content = "" Then cellWords = 0 Else cellWords = 1 End If
Tất nhiên, một ô có thể chứa nhiều hơn một từ. Đó chính xác là những gì chúng ta muốn tìm hiểu ngay bây giờ. Ví dụ chúng tôi lấy: “excel vba”. Nếu một ô chứa ít nhất một khoảng trắng ở giai đoạn này, nó chứa ít nhất một từ nữa. Bạn có thể sử dụng chức năng Hướng dẫn trong Excel VBA để tìm kiếm khoảng trắng.
Hướng dẫn (content, “”) tìm vị trí của khoảng trắng đầu tiên trong nội dung.
-
Chúng tôi sẽ sử dụng cấu trúc Do While Loop. Mã đặt giữa những từ này (ở bước 8, 9 và 10) sẽ được lặp lại miễn là phần sau Do While là đúng. Chúng tôi muốn lặp lại các bước này với điều kiện là hướng dẫn (nội dung, “”)> 0 là đúng (miễn là nội dung chứa khoảng trắng và nhiều từ hơn). Thêm Vòng lặp Do While vào câu lệnh If của bạn.
Do While InStr(content, " ") > 0 Loop
-
Tiếp theo, chúng ta lấy phần nội dung bắt đầu từ vị trí của khoảng trắng đầu tiên. Chúng tôi sử dụng chức năng Mid cho việc này.
content = Mid(content, InStr(content, " "))
Ví dụ: Mid (“excel vba”, InStr (“excel vba”, “”)) sẽ cho “vba”.
-
Chúng tôi cắt lại chuỗi.
content = Trim(content)
Kết quả: “vba”
-
Chúng tôi tăng số lượng ô từ lên 1.
cellWords = cellWords + 1
Vòng lặp Do While này sẽ được lặp lại miễn là nội dung chứa một khoảng trắng và do đó có nhiều từ hơn. Trong ví dụ của chúng tôi, chúng tôi thoát khỏi Do While Loop vì “vba” không chứa khoảng trắng nữa! Kết quả: ô này chứa 2 từ.
-
Sau khi đã kiểm tra một ô, chúng tôi thêm từ khóa ô vào tổng số từ khóa biến. Dòng mã này nên được đặt bên ngoài Vòng lặp Do While nhưng trong câu lệnh If.
totalWords = totalWords + cellWords
Toàn bộ quá trình bắt đầu lại cho ô tiếp theo cho đến khi tất cả các ô đã được kiểm tra.
-
Cuối cùng, chúng tôi hiển thị giá trị của tổng số AdWords bằng cách sử dụng hộp thư. Dòng mã này nên được đặt bên ngoài vòng lặp For Each Next.
MsgBox totalWords & " words found in the selected range."
-
Chạy thử chương trình.
Kết quả: