Не самый красивый и не самый оптимальный маршрут, но он выполнит свою работу, и я уверен, что вы можете это понять:
Option Explicit
Sub TestCount()
Dim rngCell As Range
Dim arrWords() As String, arrCounts() As Integer
Dim bExists As Boolean
Dim i As Integer, j As Integer
ReDim arrWords(0)
For Each rngCell In ThisWorkbook.Sheets("Sheet1").Range("A1:A20")
bExists = False
If rngCell <> "" Then
For i = 0 To UBound(arrWords)
If arrWords(i) = rngCell.Value Then
bExists = True
arrCounts(i) = arrCounts(i) + 1
End If
Next i
If bExists = False Then
ReDim Preserve arrWords(j)
ReDim Preserve arrCounts(j)
arrWords(j) = rngCell.Value
arrCounts(j) = 1
j = j + 1
End If
End If
Next
For i = LBound(arrWords) To UBound(arrWords)
Debug.Print arrWords(i) & ", " & arrCounts(i)
Next i
End Sub
Это будет проходить через A1: A20 на «Лист1». Если ячейка не пуста, она проверит, существует ли слово в массиве. Если нет, то он добавляет его в массив со счетчиком 1. Если он существует, он просто добавляет 1 к счетчику. Я надеюсь, что это соответствует вашим потребностям.
Кроме того, просто кое-что, о чем следует помнить после просмотра вашего кода: вы практически НИКОГДА не должны использовать On Error Resume Next
.