Необходимо реализовать следующую задачу: 1. отобрать в таблице строки, для которых значение в первой ячейке равно заданному. 2. перенести на другой лист файла из отобранных строк заданный диапазон ячеек. 3. при переносе копировать не формулы, а значения.
Интуитивно понимаю как это делается, но практически не помогло ни чтение описаний функций, ни попытка разобраться в макросах с форума.
отбор по значению yes
<!-- Пока удалось додуматься только до того, чтобы применить к массиву выбранного диапазона ячеек из строки вот такую формулу =ЕСЛИ(IRR!A2="yes";ИНДЕКС(IRR!O2:AD2;0;0);0) НО, она не решает вопрос не копирования строк без значения "yes" -->
Необходимо реализовать следующую задачу: 1. отобрать в таблице строки, для которых значение в первой ячейке равно заданному. 2. перенести на другой лист файла из отобранных строк заданный диапазон ячеек. 3. при переносе копировать не формулы, а значения.
Интуитивно понимаю как это делается, но практически не помогло ни чтение описаний функций, ни попытка разобраться в макросах с форума.
отбор по значению yes
<!-- Пока удалось додуматься только до того, чтобы применить к массиву выбранного диапазона ячеек из строки вот такую формулу =ЕСЛИ(IRR!A2="yes";ИНДЕКС(IRR!O2:AD2;0;0);0) НО, она не решает вопрос не копирования строк без значения "yes" -->Iberia
Во второй лист, к сожалению, нельзя добавлять столбцы, иначе опять возвращаемся к ручной правке этого листа. Но решение красивое, спасибо :-). А можно ли его применить сразу к массиву?
Во второй лист, к сожалению, нельзя добавлять столбцы, иначе опять возвращаемся к ручной правке этого листа. Но решение красивое, спасибо :-). А можно ли его применить сразу к массиву?Iberia
Sub toCSV() Dim x Dim i&, v&, c& Dim arRes(1 To 10000, 1 To 5) v = 0 x = Sheets(1).Range("A2:S" & Sheets(1).[a65536].End(xlUp).Row).Value For i = 1 To UBound(x) If x(i, 1) = "yes" Then v = v + 1 For c = 1 To 5 arRes(v, c) = x(i, c + 14) Next End If Next Sheets(2).[a2].Resize(v, 5) = arRes Sheets(2).Columns("A:E").AutoFit End Sub
[/vba]
Вариант макросом: [vba]
Код
Sub toCSV() Dim x Dim i&, v&, c& Dim arRes(1 To 10000, 1 To 5) v = 0 x = Sheets(1).Range("A2:S" & Sheets(1).[a65536].End(xlUp).Row).Value For i = 1 To UBound(x) If x(i, 1) = "yes" Then v = v + 1 For c = 1 To 5 arRes(v, c) = x(i, c + 14) Next End If Next Sheets(2).[a2].Resize(v, 5) = arRes Sheets(2).Columns("A:E").AutoFit End Sub
Так в конце в v имеем количество отобранных строк, и при выгрузке не нужно его уменьшать на 1, чтоб лишнее не выгружать/затирать или возможно нарвёмся на ошибку
Я обычно сперва делаю
[vba]
Код
v = v + 1
[/vba]
а уж затем
[vba]
Код
For c = 1 To 5 arRes(v, c) = x(i, c + 14) Next
[/vba]
Так в конце в v имеем количество отобранных строк, и при выгрузке не нужно его уменьшать на 1, чтоб лишнее не выгружать/затирать или возможно нарвёмся на ошибку Hugo