Страницы: 1
RSS
Вставить под таблицей все строки, которые содержат в одном из столбцов ключевое слово
 
добрый вечер,

Посмотрел много похожих тем, попробовал вставить куски кодов - не работает.

Есть макрос, который формирует из разных данных таблицу. В этой таблице в ячейках  колонки 16, начиная с 5 строки идет описание товаров. Если в описании есть ключевое слово "+пакетик", то строку нужно скопировать целиком и вставить в первую свободную строку внизу 2 раза. Можно вначале вставить один раз копии всех строк, содержащих "+пакетик" , потом еще один раз копии всех строк, содержащих "+пакетик". (В итоге такие строки должны всего повторятся 3 раза).

заранее спасибо
 
Boris DIMA,
Код
Sub aaa()
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row

With ActiveSheet.Range(Cells(1, 16), Cells(lLastRow, 16))
  Set c = .Find("+пакетик", LookIn:=xlValues)
  If Not c Is Nothing Then
    firstResult = c.Address
    Do
      lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
      Range(Cells(c.Row, 1), Cells(c.Row, 26)).Copy Cells(lLastRow + 1, 1)
      Range(Cells(c.Row, 1), Cells(c.Row, 26)).Copy Cells(lLastRow + 2, 1)
      Set c = .FindNext(c)
      If c Is Nothing Then Exit Do
    Loop While c.Address <> firstResult
  End If
End With
End Sub
 
Спасибо, работает.

вопро по этой строке:

Set c = .Find("+пакетик", LookIn:=xlValues)

может быть так нужно? :

Set c = .Find("*+пакетик*", LookIn:=xlValues)
 
Boris DIMA,
а Вы попробовали использовать приведенный мною код?
Изменено: evgeniygeo - 26.09.2022 06:18:22
 
Мне кажется достаточно установить фильтр
В столбце Р (Наименование экспресс-груза) установить в текстовом фильтре содержит "+пакетик". И копируйте полученные данные куда вам угодно
 
Msi2102,
кстати тоже вариант)))
 
Boris DIMA,
Цитата
вопро по этой строке:
Код
Set c = .Find("+пакетик", LookIn:=xlValues)

У метода Find есть параметр LookAt, который определяет:
искать целиком элемент данных или его часть.
По умолчанию используется xlPart
 
Цитата
написал:
Boris DIMA,
а Вы попробовали использовать приведенный мною код?
1. Я встраиваю ваш код в мой макрос. Он не работал, я добавил звездочки и кое-что поправил в своей части - стало работать. попробую ваш код отдельно без изменений. Я не критиковал, а именно уточнил, потому что не знаю ситаксис и как работает оператор .Find

2. Msi2102 - вариант очевидный, я пробовал давно, у меня не получилось добиться результата. Я копировал отфильтрованное, вставлял через Range , но компилятор постоянно выбрасывал ошибку, что вставка по Range некорректна при указании абсолютного адреса. Разбор похожих ситуаций не помог.

3. evgeniygeo есть возможность вставлять не просто скопированные строки, а вначале заменить значение нескольких ячеек во вставляемой строке?

ячейки столбцов 16,17,18, 19 ?
 
Странно, куда-то ответ делся, попробую повторить:

evgeniygeo  поскольку я вставляю ваш код в свой макрос, а после вставки он не сработал, то я что-то еще в своем поправил и поставил "*". Сейчас работает, а учитывая то, что написал Kuzmich , наверное и без звездочек тоже работает. Спасибо!

Msi2102 - пробовал фильтр, но после копирования отфильтрованного не давало вставить , как Range - ругался про абсолютную адресацию первой ячейки вставки. Побороть не смог.

evgeniygeo как сделать так, чтобы во вставляемых строках в ячейках 16 -17-18 столбцов прописывалось : в 16- "зеленый"; 17-"синий" ;18 -"последний"; и так в каждой вставляемой строке?
 
Цитата
Kuzmich написал:
По умолчанию используется xlPart
К сожалению, не так:
Цитата
Параметры для аргументов LookIn, LookAt, SearchOrder и MatchByte сохраняются при каждом использовании этого метода. Если не указать значения этих аргументов при следующем вызове метода, будут использоваться сохраненные значения.
Владимир
 
Цитата
Boris DIMA написал:
а после вставки он не сработал,
а в примере он работает для Вас?
 
sokol92, написал
Цитата
К сожалению, не так:
Полностью с вами согласен, просто предположил, что у ТС до этого параметр был xlPart
Цитата
как сделать так, чтобы во вставляемых строках в ячейках 16 -17-18 столбцов прописывалось : в 16- "зеленый"; 17-"синий" ;18 -"последний"; и так в каждой вставляемой строке?
Попробуйте добавить в код соответствующие строки
Код
    Do
      lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
      Range(Cells(c.Row, 1), Cells(c.Row, 26)).Copy Cells(lLastRow + 1, 1)
        Cells(lLastRow + 1, 17) = "Синий"
      Range(Cells(c.Row, 1), Cells(c.Row, 26)).Copy Cells(lLastRow + 2, 1)
        Cells(lLastRow + 2, 18) = "Последний"
        Cells(c.Row, 16) = "Зеленый"
      Set c = .FindNext(c)
      If c Is Nothing Then Exit Do
    Loop While c.Address <> firstResult
 
Цитата
написал:

Цитата
как сделать так, чтобы во вставляемых строках в ячейках 16 -17-18 столбцов прописывалось : в 16- "зеленый"; 17-"синий" ;18 -"последний"; и так в каждой вставляемой строке?
Попробуйте добавить в код соответствующие строки
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10            Do            lLastRow = Cells(Rows.Count, 1).  End  (xlUp).Row            Range(Cells(c.Row, 1), Cells(c.Row, 26)).Copy Cells(lLastRow + 1, 1)              Cells(lLastRow + 1, 17) =   "Синий"            Range(Cells(c.Row, 1), Cells(c.Row, 26)).Copy Cells(lLastRow + 2, 1)              Cells(lLastRow + 2, 18) =   "Последний"              Cells(c.Row, 16) =   "Зеленый"            Set   c = .FindNext(c)            If   c   Is   Nothing   Then   Exit   Do          Loop   While   c.Address <> firstResult   
 
Kuzmich Спасибо! работает.

evgeniygeo без * тоже работает, спасибо.
Страницы: 1
Наверх