Количество строк в диапазоне Specifi c - PullRequest
0 голосов
/ 26 апреля 2020

Я пишу команду для копирования и вставки выборок на основе значений ячеек. Пожалуйста, смотрите код примера ниже.

То, с чем я борюсь, - это пункт назначения, затем ввод данных в строку ниже. Функция работает при массовом использовании, но при повторном использовании она перезапишет данные, уже находящиеся в строке 34, а затем продолжит перезаписывать строки ниже.

Что будет лучше для этой цели? команда countta или row.count? И если да, то как бы это написать?

Sub x115()

Dim r As Long, endRow As Long, pasteRowIndex As Long, y As Range

endRow = 31 ' last row

pasteRowIndex = 34 ' Entry Row but the range needs to be between B34 and B64

Set y = ActiveSheet.Range("B:M")

For r = 1 To endRow 'Loop through activesheet and search for 115
    If Cells(r, "B").Value = 115 Then 'Found



        'Copy the current row

        Intersect(y, Rows(r)).Copy Cells(pasteRowIndex, 2)
        Intersect(y, Rows(r)).ClearContents

        pasteRowIndex = pasteRowIndex + 1



End If

Next r

End Sub

1 Ответ

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

Чтобы получить LastRow динамически, для столбца A:

Dim LastRow As Long

LastRow = Sheets.Cells(Rows.Count, 2).End(xlUp).Row.
' the 1 in Cells(Row.Count, 1) indicates column 1 which is  A

Если я правильно понимаю, вы хотите, чтобы значение 115 было вставлено в следующую пустую строку в столбце B, вы можете назначить pasteRowIndex так же, как и так:

Dim pasteRowIndex As Long

pasteRowIndex = Sheets.Cells(Rows.Count, 2).End(xlUp).Row.
' the 2 in Cells(Row.Count, 1) indicates column 1 which is B

Если pasteRowIndex должен находиться между строками, строки 34 и 64 вставляются в оператор If...Then...Else. Что-то вроде:

If pasteRowIndex < 34 Or pasteRowIndex > 64 Then
    MsgBox "PasteRowIndex =" & pasteRowIndex  & vbNewLine & "It must be between rows 34 and 64."
    Exit Sub
Else
    'Continue with procedure.
End If

Тот же принцип, что и для диапазона c:

Dim pasteRowIndex As Long

pasteRowIndex = Sheets.Cells(64, 2).End(xlUp).Row.
'You could change Cells(64, 2) with Range("B64") too.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...