я получил следующий код, который долженCopy/Paste результаты
1) Поиск по моему слову, копировать и вставлять всю строку, содержащую слово в новый лист
2) Поиск для слово после 1-го, затем скопируйте и вставьте эту целую строку рядом с содержимым 1) на новом листе.
Может кто-то взглянуть, у меня возникли проблемы с получением результатов, нет ошибки, которую я получаю. Поэтому я предполагаю, что это вся копия и вставка в мое новое имя листа. Однако я не уверен на 100%.
Sub stack()
Dim OSheet As String
Dim NSheet As String
Dim i As Integer
Dim LRow As Integer
Dim NSLRow As Integer
OSheet = "Sheet1" 'Old Sheet Name
NSheet = "Sheet7" 'New Sheet Name
LRow = Sheets(OSheet).Cells(Rows.Count, 1).End(xlUp).Row 'Last Row in Old Sheet
Sheets(OSheet).Activate
For i = 2 To LRow
'Finds last row in the New Sheet
If Sheets(NSheet).Cells(2, 1) = "" Then
NSLRow = 1
Else
NSLRow = Sheets(NSheet).Cells(Rows.Count, 1).End(xlUp).Row
End If
'If cell has "First Name then..."
Dim StrX As String
If InStr(LCase(Cells(i, 1)), LCase("stack:")) Then
StrX = Range(Cells(NSLRow + 1, 1), Cells(NSLRow + 1, 6)).Address
Sheets(NSheet).Range(StrX).Value = Range(StrX).Value
ElseIf InStr(LCase(Cells(i, 1)), LCase("overflow:")) Then
StrX = Range(Cells(NSLRow + 1, 7), Cells(NSLRow + 1, 8)).Address
Sheets(NSheet).Range(StrX).Value = Range(StrX).Value
End If
Next i
End Sub
EDIT, ожидаемый результат:
! http://i.imgur.com/69elWuB.jpg
EDIT, обновленный код с некоторыми исправлениями, о которых вы, ребята, упомянули.
Sub stackv2()
'added Sheets(OSheets)to Range Cells
Dim OSheet As String
Dim NSheet As String
Dim i As Integer
Dim LRow As Integer
Dim NSLRow As Integer
OSheet = "Sheet1" 'Old Sheet Name
NSheet = "Sheet7" 'New Sheet Name
LRow = Sheets(OSheet).Cells(Rows.Count, 1).End(xlUp).Row 'Last Row in Old Sheet
Sheets(OSheet).Activate
For i = 2 To LRow
'Finds last row in the New Sheet
If Sheets(NSheet).Cells(2, 1) = "" Then
NSLRow = 1
Else
NSLRow = Sheets(NSheet).Cells(Rows.Count, 1).End(xlUp).Row
End If
'If cell has "First Name then..."
Dim StrX As String
If InStr(LCase(Cells(i, 1)), LCase("first name")) Then
StrX = Sheets(OSheet).Range(Sheets(OSheet).Cells(NSLRow + 1, 1), Sheets(OSheet).Cells(NSLRow + 1, 6)).Address
Sheets(NSheet).Range(StrX).Value = Range(StrX).Value
ElseIf InStr(LCase(Cells(i, 1)), LCase("last name")) Then
StrX = Sheets(OSheet).Range(Sheets(OSheet).Cells(NSLRow + 1, 7), Sheets(OSheet).Cells(NSLRow + 1, 8)).Address
Sheets(NSheet).Range(StrX).Value = Range(StrX).Value
End If
Next i
End Sub
«StrX = Range (Ячейки (NSLRow + 1, 1)), ячейки (NSLRow + 1, 6)). Адрес« Вы не определили, какой лист – Davesexcel
ссылается на лист в следующей строке, это был мой первый подумал –
@Nathan_Sav Итак? Не означает, что Excel будет рассматривать все вокруг как этот лист. У него все еще есть несколько вызовов диапазона и сотовой связи, которые явно не указывают лист. Никто не знает, на что ссылаются. Может быть полезно, если OP поставит точку останова на строке 'If Instr ...' для проверки значений «Ячейки (i, 1)» и «NSLRow». –