2015-06-29 1 views
0

Мне нужно отсортировать несколько сотен строк в электронной таблице. Я хотел бы попытаться автоматизировать эту задачу с помощью кода vba, но я не знаю, как это сделать.Excel vba - поиск данных в 2 столбцах, затем перемещение строки на другой лист

В электронной таблице мне нужно найти столбец «А» (до конца данных) и идентифицировать любые ячейки в столбце «А», содержащие текст/слово «актив». Если ячейка содержит текстовую «активную» проверку в той же строке с ячейкой в ​​столбце «N». Если соответствующая ячейка в той же строке в столбце «N» является пустой, переместить всю строку в новый лист под названием «Удаленная»

Может кто-нибудь пожалуйста, помогите с некоторой УВОЙ

Благодаря Яна

ответ

0

Знаете ли вы, сколько строк вам нужно проверить или вам нужна функция, которая автоматически останавливается?

Sub CopyPaste() 

Dim MyRange as Range 
Dim Current_Range as Range 

'Nb_Rows can be any integer, even higher than the real number of rows. 
For i = 1 To Nb_Rows 
If Range("A" & i).Value = "asset" Then 
    If Range("N" & i).Value = "" Then 
     Set Current_Range = Cells(i, 1) 
     If MyRange Is Nothing Then 
      Set MyRange = Current_Range 
     Else 
      Set MyRange = Application.Union(MyRange, Current_Range) 
     End If 
    End If 
End If 
Next i 

If MyRange Is Nothing Then 
    Exit Sub 
Else 
    MyRange.EntireRow.Cut 
    Sheets("Removed").Paste 
End If 

End Sub 

Этот фрагмент кода должен работать. Я использовал Nb_Rows для цикла, возможно, вы должны изменить это значение. Помните, что я копирую/вставляю строки, что означает, что они останутся на первом листе. Я также предполагаю, что вы запускаете макрос при активации первого листа.

+0

Здравствуйте, Спасибо за ваш быстрый ответ. Количество строк варьируется от одной таблицы к другой. Обычно от 100 до 6-700, так что действительно нужна функция, которая автоматически останавливается (если только я не могу просто изменить Nb на 1000, чтобы он проверял до строки 1000). Также мне нужно, чтобы они были удалены из оригинального листа, поэтому им нужно их обрезать и вставить (могу ли я просто поменять «Копировать для выреза»)? Спасибо – ianf

+0

Вы можете установить 'Nb_Rows' на 1000, он будет проверять до строки 1000 без вырезания пустых строк, чтобы он ничего не изменил. И вы можете заменить '.Copy' на' .Cut'. Это будет работать, только если лист «Удалено» пуст. – Gido

+0

Спасибо, Gido, теперь он работает по мере необходимости. – ianf

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