2014-09-26 6 views
1

Я новичок в макросах и VBA, так что это может быть легко.vba programming - удалить целую строку, не содержащую

Мне нужно отфильтровать список компаний, так что компании, не соответствующие отраслевому коду, удаляются с excel-tab.

Более точно:

  • company.xls содержит полный список компаний, где столбец N, является , содержащие branchcodes
  • branch.xls, колонка А содержит branchcodes, имеющие значение, которое должен используется для фильтрации компаний в company.xls
  • Компании в company.xls, которые не имеют соответствия
    код филиала следует удалить из tab1 в tab2 компании.xls.

Надеюсь, это имеет смысл !?

Заранее благодарим за ваши ответы.

Function Search_String(x As String) As Boolean 
Dim Firstrow As Long 
Dim Lastrow As Long 
Dim Lrow As Long 
Dim Contained As Boolean 
Contained = True 

'We use the ActiveSheet but you can replace this with 
'Sheets("MySheet")if you want 
With Sheets("codes") 

    'We select the sheet so we can change the window view 
    .Select 

    'Set the first and last row to loop through 
    Firstrow = .UsedRange.Cells(1).Row 
    Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row 

    'We loop from Lastrow to Firstrow (bottom to top) 
    For Lrow = Lastrow To Firstrow Step -1 

     'We check the values in the A column in this example 
     With .Cells(Lrow, "A") 'Column letter for codes sheet 

      If Not IsError(.Value) Then 
       If InStr(x, .Value) Then Contained = False 
      End If 
     End With 
    Next Lrow 
End With 

Search_String = Contained 
End Function 


Sub Filtrer() 
Dim Firstrow As Long 
Dim Lastrow As Long 
Dim Lrow As Long 
Dim CalcMode As Long 
Dim ViewMode As Long 

With Application 
    CalcMode = .Calculation 
    .Calculation = xlCalculationManual 
    .ScreenUpdating = False 
End With 

With Sheets("search (14)") 'Sheet name with rows to be deleted 
    'We select the sheet so we can change the window view 
    .Select 

    'If you are in Page Break Preview Or Page Layout view go 
    'back to normal view, we do this for speed 
    ViewMode = ActiveWindow.View 
    ActiveWindow.View = xlNormalView 

    'Turn off Page Breaks, we do this for speed 
    .DisplayPageBreaks = False 

    'Set the first and last row to loop through 
    Firstrow = .UsedRange.Cells(1).Row 
    Lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row 

    'We loop from Lastrow to Firstrow (bottom to top) 
    For Lrow = Lastrow To Firstrow Step -1 

     With .Cells(Lrow, "N") 'Change this to the correct Sheets column that needs deleting 
      If Not IsError(.Value) Then 
       If Search_String(.Value) Then .EntireRow.Delete 
      End If 
     End With 
    Next Lrow 

End With 

ActiveWindow.View = ViewMode 
With Application 
    .ScreenUpdating = True 
    .Calculation = CalcMode 
End With 

End Sub 
+0

Вы покажете, какой код вы уже писали? Я рад помочь вам отладить ваш код и ответить на вопросы о том, как ссылаться на рабочие книги, рабочие листы и диапазоны в вашем коде. Однако, если все, что вы хотите, это «можете ли вы написать код для меня?» ответ - нет. Если бы я решил решить эту проблему, я бы ввел оба набора данных в Access. Решение этой проблемы с запросом займет 10 минут. – Blackhawk

+0

Спасибо, что ответили. У меня есть код. Но как я могу разместить его здесь? Превышено максимальное число символов. – user3697608

+0

Вместо того, чтобы вставить его в комментарий, вы можете нажать ссылку «изменить» под своим вопросом и добавить туда код. Там должно быть много места, но на самом деле все, что вам нужно сделать, - это минимальный пример того, что вы делаете. Например, используете ли вы функции AutoFilter? Перебираете ли вы каждую строку, чтобы проверить ее на список компаний? Вы загружаете список в структуру данных, например массив или коллекцию? Если вы включите небольшой фрагмент кода, который отвечает на эти вопросы, этого должно быть достаточно. – Blackhawk

ответ

1

Поправьте меня, если я ошибаюсь .Теперь вы хотите, чтобы позволить Вводится пользователем SheetName и ColumnName

Тогда следующий код поможет вам.

Dim SheetName As String 
Dim ColumnName As String 

SheetName = InputBox("Enter the Sheet Name ?") ' Ex Sheet1 
ColumnName = InputBox("Enter the column Name ?") ' Ex N 

With Sheets(SheetName) ' Replace this line 
With .Cells(Lrow, ColumnName) ' Replace this line 
+0

Спасибо Sathish. Это именно то, что я хотел, и он отлично работает! Еще раз спасибо – user3697608

+0

Пожалуйста, примите это как завершенное . :) –

+0

где я это делаю? – user3697608

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