Копировать строку на новый лист, когда ячейка в первом столбце имеет определенный текст - PullRequest
0 голосов
/ 03 сентября 2018

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

Мне кажется, проблема в том, что он ищет значение, а не строку (может ли строка быть значением?). Нужно ли определять ячейку как строку? Извините, если это глупые вопросы - плохо знакомы с кодированием.

Sub copy_rows()
    Sheets.Add After:=Sheets(1)
    Sheets(2).Name = "New"
    For Each cell In Sheets(1).Range("B:B")
        If cell.Value = "banana" Then
            matchRow = cell.Row
            Rows(matchRow & ":" & matchRow).Select
            Selection.Copy
            Sheets("New").Select
            ActiveSheet.Rows(matchRow).Select
            ActiveSheet.Paste
        End If
    Next
End Sub

Вот пример листа 1:

apple     1     2     1
banana    1     3     5
carrot    1     1     1
banana    1     2     3

А вот и новый лист:

banana    1     3     5

banana    1     2     3

Кроме того, я не пытался сделать это в своем коде, но было бы хорошо, если бы между строками не было пробела.

Спасибо

1 Ответ

0 голосов
/ 03 сентября 2018

Это мой отредактированный код выше для работы с вашими примерами данных. Убедитесь, что рабочая книга, содержащая лист, из которого вы хотите скопировать, активна при запуске.

Sub copy_rows()
'create the new sheet
Sheets.Add After:=Sheets(1)
Sheets(2).Name = "New"

'get the number of rows you need to check
Dim RowCount As Integer
RowCount = WorksheetFunction.CountA(Sheets(1).Range("A:A"))

'iterate over the rows
For r = 0 To RowCount - 1
this_cell = Sheets(1).Range("A1").Offset(r, 0)
    If this_cell = "bananas" Then
        'iterate over the columns and copy cells to new sheet
        For c = 0 To 3
            Sheets(2).Range("A1").Offset(x, c) = Sheets(1).Range("A1").Offset(r, c)
        Next c
    'counter for the offset to next row in new sheet
    x = x + 1
    End If
Next r
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...