Я новичок в макросах и 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
Вы покажете, какой код вы уже писали? Я рад помочь вам отладить ваш код и ответить на вопросы о том, как ссылаться на рабочие книги, рабочие листы и диапазоны в вашем коде. Однако, если все, что вы хотите, это «можете ли вы написать код для меня?» ответ - нет. Если бы я решил решить эту проблему, я бы ввел оба набора данных в Access. Решение этой проблемы с запросом займет 10 минут. – Blackhawk
Спасибо, что ответили. У меня есть код. Но как я могу разместить его здесь? Превышено максимальное число символов. – user3697608
Вместо того, чтобы вставить его в комментарий, вы можете нажать ссылку «изменить» под своим вопросом и добавить туда код. Там должно быть много места, но на самом деле все, что вам нужно сделать, - это минимальный пример того, что вы делаете. Например, используете ли вы функции AutoFilter? Перебираете ли вы каждую строку, чтобы проверить ее на список компаний? Вы загружаете список в структуру данных, например массив или коллекцию? Если вы включите небольшой фрагмент кода, который отвечает на эти вопросы, этого должно быть достаточно. – Blackhawk