2012-05-14 3 views
0

У меня есть таблица, которая состоит из столбцов из A-P и линий 1 до 2016 (и продолжает расти). Я ищу простой способ поиска в электронной таблице для определенного слова, например «Gap», а также строки, содержащие слово «пробел», скопированное в Sheet2. Я хотел бы, если бы он мог использовать ящик, в который я вставлял слово, поэтому я могу искать разные вещи по мере необходимости.Поиск конкретного слова и скопировать строку в другой лист

Я не ожидаю, таблица, чтобы получить какой-либо меньше (это список элементов действий, мне это нужно искать, пока он не достигнет пустую строку).

Как это сделать?

ответ

1
'all variables must be declared  
Option Explicit 
Sub CopyData() 

'this variable holds a search phrase, declared as variant as it might be text or number 
Dim vSearch As Variant 
'these three variables are declared as long, technically the loop might exceed 32k (integer) therefore it is safer to use long 
Dim i As Long 
Dim k As Long 
Dim lRowToCopy As Long 

'the macro prompts a user to enter the search phrase 
vSearch = InputBox("Search") 
'varialbe i initially declared as 1 - macro starts calculations from the 1st row 
i = 1 
'macro will loop until it finds a row with no records 
'I called a standard XLS function COUNTA to count the number of non-blank cells 
'if the macro finds a row with no records it quits the loop 
Do Until WorksheetFunction.CountA(Sheets("Main").Rows(i)) = 0 

'here I let the macro to continue its run despite a possible errors (explanation below) 
    On Error Resume Next 
    lRowToCopy = 0 
'if Find method finds no value VBA returns an error, this is why I allowed macro to run despite that. In case of error variable lRowToCopy keeps 0 value 
'if Find method finds a searched value it assigns the row number to var lRowToCopy 
    lRowToCopy = Sheets("Main").Rows(i).Find(What:=vSearch, LookIn:=xlValues,  LookAt:=xlPart, SearchOrder:=xlByRows).Row 
'here we allow macro to disiplay error messages 
    On Error GoTo 0 

'if var lRowToCopy does not equal to 0 that means a row with a searched value has been found 
    If lRowToCopy > 0 Then 

    'this loop looks for the first blank row in 2nd sheet, I also used COUNTA to find absolutely empty row 
    For k = 1 To Sheets("ToCopy").Rows.Count 

     'when the row is found, the macro performs copy-paste operation 
     If WorksheetFunction.CountA(Sheets("ToCopy").Rows(k)) = 0 Then 

      Sheets("Main").Rows(i).Copy 
      Sheets("ToCopy").Select 
      Rows(k).Select 
      ActiveSheet.Paste 
      'do not forget to exit for loop as it will fill all empty rows in 2nd sheet 
      Exit For 

     End If 
    Next k 

    End If 

i = i + 1 
Loop 

End Sub 
+0

Ваш код будет большой с некоторыми комментариями и разъяснениями о том, как использовать это так, что OP (который, кажется, не хорошо знают VBA) будет знать, где начать – JMax

+0

Ok, я восстановить его, когда я вернитесь домой, теперь я на работе: D –

+0

@MarcinJanowski Я думаю, что JMax означал, что ваш ответ должен включать объяснение («ответ» на вопрос), а не просто код. – yoozer8

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