#excel #vba
#excel #vba
Вопрос:
Это мой код :
For Each cell In Range("D2:D" amp; LastCompoundInterval)
LastTransaction = Range("H" amp; Rows.Count).End(xlUp).Row
If <some condition>
...
If <some condition>
...
End If
Range("H" amp; LastTransaction) = DateAdd("m", m, cell.Offset(0, -2).Value)
Range("I" amp; LastTransaction) = 0
End If
Next cell
Я добавляю значения в конец столбцов H
и I
, которые имеют одинаковое количество строк, но LastTransaction
переменная для последней строки остается неизменной на каждой итерации. Разве это не должно обновлять каждую итерацию?
Ответ №1:
Прежде всего, ответ на ваш вопрос Не должен ли он обновлять каждую итерацию? — Да. Он обновляет LastTransaction, но он просто остается прежним.
Вам нужно пересчитать lastrow, как перед следующим подобным образом, если вы хотите перейти к следующей строке.
LastTransaction = Range("H" amp; Rows.Count).End(xlUp).Row 'Maybe you also need to add a 1 here if you want to have the first empty cell in column H
For Each cell In Range("D2:D" amp; LastCompoundInterval)
' LastTransaction = Range("H" amp; Rows.Count).End(xlUp).Row
If <some condition>
...
If <some condition>
...
End If
Range("H" amp; LastTransaction) = DateAdd("m", m, cell.Offset(0, -2).Value)
Range("I" amp; LastTransaction) = 0
End If
LastTransaction = Range("H" amp; Rows.Count).End(xlUp).Row 1
Next cell
Ответ №2:
LastTransaction
происходит из Range("H" amp; Rows.Count).End(xlUp).Row
. Он получит номер строки последней непустой ячейки в столбце H.
Rows.Count
здесь означает общее количество строк на активном листе, которое является константой. Все выражение идентично следующей ручной операции:
- найдите последнюю ячейку (с наибольшим номером строки) в столбце H
- найдите следующую непустую ячейку вверх, нажав ctrl up arrow
- верните номер строки этой ячейки
Комментарии:
1. Это отвечает только на вопрос «почему переменная остается неизменной». Пока я все еще пытался выяснить, что означает определение «последней строки на каждой итерации» и «добавления», я вижу ответ @JMP. Вы можете обратиться к этому.
Ответ №3:
Я думаю, что ваш код должен быть:
For Each cell In Range("D2:D" amp; LastCompoundInterval)
LastTransaction = Range("H" amp; Rows.Count).End(xlUp).Row
If <some condition>
...
If <some condition>
...
End If
Range("H" amp; LastTransaction 1) = DateAdd("m", m, cell.Offset(0, -2).Value)
Range("I" amp; LastTransaction 1) = 0
End If
Next cell
Ранее он только перезаписывал значение последней строки в столбцах и не добавлял другое значение в качестве другой строки. 1
создает новую запись в следующей доступной строке.