Чтобы изменить значение только видимых ячеек (то есть тех, которые отображаются в фильтре), вы можете использовать SpecialCells(xlCellTypeVisible)
Так что для вашего примера код, который будет идти в первом брейке, будет
"Range("B2:B18").SpecialCells(xlCellTypeVisible).Value= "Samsung"
и второй перерыв
"Range("B2:B18").SpecialCells(xlCellTypeVisible).Value= "Apple"
Вам нужно изменить "18" на последний ряд. (Или вы можете определить переменную с именем LastRow, а затем вызвать ее вместо жесткого кодирования числа, что означает, что оно будет динамически меняться в зависимости от количества строк.)
С LastRow
Sub Macro1()
Dim LastRow As Long
LastRow = ActiveSheet.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
Range("Table1[type phone]").Select
ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=1, Criteria1:= _
"=*samsung*", Operator:=xlAnd
Range("Table1[company]").Select
Range("B2:B" & LastRow).SpecialCells(xlCellTypeVisible).Value= "Samsung"
ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=1, Criteria1:= _
"=*iphone*", Operator:=xlAnd
Range("Table1[company]").Select
Range("B2:B" & LastRow).SpecialCells(xlCellTypeVisible).Value= "Apple"
End Sub
Мы создали новую переменную с именем LastRow и определили ее как long (тип числа). Затем мы определили LastRow в соответствии с формулой, которую я использую с этого сайта:
https://www.thespreadsheetguru.com/blog/2014/7/7/5-different-ways-to-find-the-last-row-or-last-column-using-vba
Наконец, мы заменяем Range ("B2: B18") на Range ("B2: B" и LastRow), который динамически заменяет 18 на число LastRow.