Логи c сломаны при достижении последних данных - PullRequest
0 голосов
/ 07 апреля 2020

Я хотел бы подсчитать избыточность данных в каждой строке в одном столбце при нажатии кнопки. Он отсортирует данные сначала и посчитает, и сколько раз это слово будет повторяться в этом столбце. Но когда оно дойдет до последнего слова, оно не будет подсчитывать и показывать, сколько избыточно этого слова. Это мой код

Dim start As Integer
Dim last As Integer
Dim word As String
Dim line As Integer
Dim count As Integer

line = 5
count = 1

With Columns("A")
    .Find(what:="*", after:=.Cells(1, 1), LookIn:=xlFormulas).Activate
    start = ActiveCell.Row
    last = ActiveCell.End(xlDown).Row
End With

Range(Cells(start, 1), Cells(last, 1)).Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo

For i = start To last
    word = Cells(i, 1).Value
    Cells(line, 6) = word
    For j = i + 1 To last
        If Cells(j, 1).Value = word Then
            count = count + 1
        Else
            Cells(line, 7) = count
            line = line + 1
            count = 1
        End If
        Exit For
    Next j
Next i

Я новичок в vba. Пожалуйста помоги. Заранее спасибо.

1 Ответ

0 голосов
/ 07 апреля 2020

недостаток логики c заключается в том Exit For, который побеждает цель l oop

For j = i + 1 To last
    If Cells(j, 1).Value = word Then
        count = count + 1
    Else
        Cells(line, 7) = count
        line = line + 1
        count = 1
    End If
    Exit For '<--- this will always makes the loop exit after first iteration
Next j

, поэтому вы должны устранить l oop и выполнить проверку для его первого только итерация

If Cells(i + 1, 1).Value = word Then
    count = count + 1
Else
    Cells(line, 7) = count
    line = line + 1
    count = 1
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...