#excel #vba
Вопрос:
Я очень новичок в программировании, надеюсь, вы, ребята, сможете мне помочь. В столбце A у меня есть несколько строк, и я хотел бы подсчитать все те же строки в столбце L. И он должен перейти к следующей строке, если в столбце G нет ни слова о том, как он должен выглядеть:
A G L
zu=host,out=fr x 1
zu=host,out=fr x 2
zu=host,out=de x 1
zu=host,out=de x 2
zu=host,out=en x 1
zu=host,out=sw x 1
zu=host,out=sw x 2
zu=host,out=nw
zu=host,out=tw x 1
Это моя попытка, которая, к сожалению, не работает:
Dim i As Integer
Dim ws As Worksheet
Dim counter As Integer
Set ws = ActiveSheet
counter = 1
For i = 1 To 5000
If IsEmpty(ws.Range("A" amp; i)) Then
Exit For
End If
If ws.Range("A" amp; i).Value = ws.Range("A" amp; i 1).Value Then
ws.Range("L" amp; i).Value = counter
counter = counter 1
Exit For
Else: ws.Range("L" amp; i).Value = 1
counter = 1
Exit For
End If
Next i
MsgBox ("Finished ")
Комментарии:
1. Добро пожаловать в правление. Что не работает с кодом? Было бы проще использовать формулу рабочего листа.
2. Этого можно достичь простой формулой… Посадили
=COUNTIF($A$1:A1,A1)
в камеруL1
. Я предполагаю, что ваши данные начинаются с ячейкиA1
3. @DarrenBartrup-Кук ставит 1 в L1 и больше ничего не делает
4. @Siddharthout Я пытаюсь изучить VBA, поэтому я хотел бы решить эту проблему с помощью кода 🙂
5. хорошо. также опубликовал ответ с решением VBA
Ответ №1:
Нет необходимости в VBA. Этого можно достичь простой формулой. Поместите =COUNTIF($A$1:A1,A1)
в ячейку L1
и перетащите ее вниз. Я предполагаю, что ваши данные начинаются с ячейки A1
.
Если вы все еще хотите VBA, сделайте это:
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim LRow As Long
'~~> Set this to the relevant sheet
Set ws = Sheet1
With ws
'~~> Find last row in col A
LRow = .Range("A" amp; .Rows.Count).End(xlUp).Row
'~~> Put the formula in the Col L in 1 go!
.Range("L1:L" amp; LRow).Formula = "=COUNTIF($A$1:A1,A1)"
'~~> Convert formula to values
.Range("L1:L" amp; LRow).Value = .Range("L1:L" amp; LRow).Value
End With
End Sub
Скриншот
Комментарии:
1. Это отлично работает, но я хочу отредактировать функциональность, чтобы пропустить строки, в которых столбец G пуст. Как бы я сделал это с решением формулы?
2. Изменить
.Range("L1:L" amp; LRow).Formula = "=COUNTIF($A$1:A1,A1)"
на.Range("L1:L" amp; LRow).Formula = "=IF(G1="""","""",COUNTIF($A$1:A1,A1))"
3. И если вам нужна только формула, а не VBA, то используйте
=IF(G1="","",COUNTIF($A$1:A1,A1))
вместо=COUNTIF($A$1:A1,A1)
Ответ №2:
Наличие пустых строк означает, что это не так просто, как сравнение следующих или предыдущих строк.
Sub CountUp()
Dim ws As Worksheet
Dim LastRow As Long, i As Long, counter As Long
Dim sLastA As String
Set ws = ActiveSheet
LastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row
counter = 1
For i = 1 To LastRow
If ws.Cells(i, "G") > 0 Then
If ws.Cells(i, "A") = sLastA Then
counter = counter 1
Else
counter = 1
End If
ws.Cells(i, "L") = counter
sLastA = ws.Cells(i, "A")
End If
Next i
MsgBox ("Finished ")
End Sub
Ответ №3:
Вот несколько советов, как заставить исходный код работать:
Option Explicit
Sub Count()
Dim i As Long
Dim ws As Worksheet
Dim counter As Integer
Set ws = ActiveSheet
counter = 1
' Start at row 2
For i = 2 To 10
Debug.Print ("i=" amp; i)
' This will exit completely if it finds a blank in column G
If IsEmpty(ws.Range("G" amp; i)) Then
Exit For
End If
'Compare the current row to the previous row
If ws.Range("A" amp; i).Value = ws.Range("A" amp; i - 1).Value Then
Debug.Print ("i1=" amp; i)
counter = counter 1
' Don''t need to compare to previous value in column L - if current row doesn't match previous row, this just resets counter to 1.
Else
Debug.Print ("i2=" amp; i)
counter = 1
End If
' Always write counter to column L
ws.Range("L" amp; i).Value = counter
Next i
MsgBox ("Finished ")
End Sub
Комментарии:
1. Это, похоже, не работает для меня, даже если я вставил все это и добавил «End Sub», он не помещает никаких чисел в столбец L
2. Посмотрите, предоставляют ли инструкции debug.print какую — либо информацию-я оставил их намеренно: -) Вам нужно открыть немедленное окно Ctrl-G, чтобы увидеть вывод из них.
3. Где бы я их нашел? 😡