Всем доброго времени суток.
Вопрос по VBA.
Есть лист Excel. Есть два столбца с данными (текстовые).
Необходимо в столбце В просмотреть определённый диапазон (напр. "В1:В200").
Есть условие, выбирать ячейку содержащую значение "*отдел*".
В общем, примерно так:
Sub search()
Worksheets("лист2").Activate
For Each cell In Range("b1:b200")
If cell = "отдел" Then 'если значение в ячейке = "отдел"
cell.Select
ActiveCell.Offset(0, -1).Select 'сдвигаемся на одну ячейку влево
Selection.Copy 'копируем данные в этой ячейке (текст)
Workbooks("Фонды.xls").Worksheets("Sheet1").Activate 'открываем книгу-получатель
Range("b6").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveCell.Offset(1, 0).Select
Workbooks("макрос.xls").Worksheets("лист2").Activate
End If
Next cell
End Sub
Всё бы хорошо, но уже при втором проходе цикла, в момент когда мы переходим в книгу-получатель данных,
снова активируется ячейка "В6", и ранее вставленные в неё данные затираются.
Может быть создать массив, и в него вставлять скопированную ячейку? Но как это сделать?
Можно, конечно, создать временный лист, в него вставлять скопированные данные,
из временного листа скопировать в книгу-получатель, и в конце удалить этот лист.
Но получается много кода, да и примитивно. Хочется как-то красиво сделать.
Sub search()
Dim i As Long, rg As Range
i = Workbooks("Фонды.xls".Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row + 1
Worksheets("лист1".Activate
For Each rg In Range("b1:b200"
If rg = "отдел" Then 'если значение в ячейке = "отдел"
rg.Offset(0, -1).Copy Workbooks("Фонды.xls".Worksheets(1).Cells(i, 2)
i = i + 1
End If
Next
End Sub