2015-08-21 3 views
0

Что нужно сделать, это сравнить имя из столбца G, найти это имя в столбце E и если есть совпадение, скопировать все на новый лист. Сейчас код ищет значение, называемое Mail box, каждый раз, когда он находит его в диапазоне от столбца E, он копирует всю строку на новый лист2.Excel VBA Поиск значения в столбце и копирование строки на новый лист для всех значений соответствия

Я могу преобразовать код, который вместо поиска в почтовом ящике ищет значение в ячейке G1, но мне понадобится код, чтобы сделать это несколько раз для значения в строке G2, G3, G4 , G5 ... G20.

Sub SearchForString() 

    Dim LSearchRow As Integer 
    Dim LCopyToRow As Integer 

    On Error GoTo Err_Execute 

    'Start search in row 4 
    LSearchRow = 4 

    'Start copying data to row 2 in Sheet2 (row counter variable) 
    LCopyToRow = 2 

    While Len(Range("A" & CStr(LSearchRow)).Value) > 0 

     'If value in column E = "Mail Box", copy entire row to Sheet2 
     If Range("E" & CStr(LSearchRow)).Value = "Mail Box" Then 

     'Select row in Sheet1 to copy 
     Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select 
     Selection.Copy 

     'Paste row into Sheet2 in next row 
     Sheets("Sheet2").Select 
     Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select 
     ActiveSheet.Paste 

     'Move counter to next row 
     LCopyToRow = LCopyToRow + 1 

     'Go back to Sheet1 to continue searching 
     Sheets("Sheet1").Select 

     End If 

     LSearchRow = LSearchRow + 1 

    Wend 

    'Position on cell A3 
    Application.CutCopyMode = False 
    Range("A3").Select 

    MsgBox "All matching data has been copied." 

    Exit Sub 

Err_Execute: 
    MsgBox "An error occurred." 

End Sub 
+0

Ваш вопрос непонятен. Вы понимаете, что делает ваш опубликованный код? Если да, укажите, где в коде поведение не то, что вы ожидаете/желаете. Если вы этого не понимаете, не запускайте его; работающий код, который вы не можете прочитать, может привести к вредоносному поведению и может не дать вам успехов в работе, если ваши данные изменятся настолько, что ваши макросы больше не работают так, как вы хотите. –

+0

Привет, прямо сейчас код ищет значение, называемое Mail box, каждый раз, когда он находит его в диапазоне от столбца E, он копирует всю строку на новый лист2. Я способен преобразовать код, который вместо поиска в поле «Почта» ищет значение в ячейке G1, но мне понадобится код, чтобы сделать это несколько раз для значения в строке G2, G3, G4, G5 .. .G20. Спасибо – Jstsmtle

+0

Я отредактировал ваш вопрос, чтобы включить ваши разъяснения; см. мой ответ ниже. –

ответ

0

Основываясь на ваш комментарий, кажется, вы просто хотите увидеть, если любая клетка в колонке Е соответствует любой ячейке в колонке G, а затем выполнить ваше копирование. Вы можете достичь этого следующим образом:

'If value in column E = Matches anything in column G, copy entire row to Sheet2 
    Dim searchTerm As String 
    For i = 1 To 20 
     searchTerm = Range("G" & i).Text 
     If Range("E" & CStr(LSearchRow)).Value = searchTerm Then 

     'Select row in Sheet1 to copy 
     Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select 
     Selection.Copy 

     'Paste row into Sheet2 in next row 
     Sheets("Sheet2").Select 
     Rows(CStr(LCopyToRow) & ":" & CStr(LCopyToRow)).Select 
     ActiveSheet.Paste 

     'Move counter to next row 
     LCopyToRow = LCopyToRow + 1 

     'Go back to Sheet1 to continue searching 
     Sheets("Sheet1").Select 

     End If 
Next i 

Это просто перебирает G1: G20, подбирает каждое значение G существует, и для каждого ряда Е (в виде петли с петлей While), он проверяет для каждого значения из G, а затем выполняет копирование.

+0

Привет Оценка. Спасибо, что вы терпеливы. Но когда я пытаюсь запустить код, который вы предоставили, я всегда получаю ошибку. Я предположил, что мне нужно вставить код вместо части между частью while, но она также не работает. Не могли бы вы вставить весь свой код с суб-до конца. благодаря – Jstsmtle

Смежные вопросы