Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Фильтр в сводной таблице через переменные (значение ячеек)
 
Дмитрий(The_Prist) Щербаков, я даже не сомневался, что вы поймете и предложите рабочий вариант.
Я сделал точно так же, только лишние кавычки оставлял и получалось так

С Вашим кодом
Код
"[Date].[MonthNumber, Year].&[" & Range("U3").Value & "]",

А у меня было так:
Код
"[Date].[MonthNumber, Year]." &"[" & Range("U3").Value & "]",

И я подумал, что такой вариант нерабочий

Спасибо Вам большое, вы очень выручили! Хорошего вечера / дня!
Фильтр в сводной таблице через переменные (значение ячеек)
 
Цитата
V написал:
вместо [02.2024] подсунуть значение из ячейки.

Это все конечно прекрасно, но подставляя в разные места дату, как из переменных, так и из ячеек напрямую, получаю ошибки
Скрытый текст


По итогу к единому виду, который бы работал и давал результат я не могу
Крутил по разному, но ничего так и не смог самостоятельно запустить. Дело явно во мне и моих способностях, поэтому прошу помощи

Обычный фильтр на сводной таблице работает прекрасно, там и через переменные я кручу и через данные в ячейках, но тут ситуация с каким-то двойным внутри себя названием фильтра, поэтому какая-то путаница.
Фильтр в сводной таблице через переменные (значение ячеек)
 
Всем привет!

Нужна помощь, не могу разобраться с синтаксисом VBA кода, который помог бы мне в автоматическом режиме менять фильтрацию дат на необходимую мне.

Что имеется:
Таблица, в которой фильтр дат выглядит следующим образом
Скрытый текст

То есть, при нажатии на "+" ничего не открывается и выбирается точно такое же значение.

У меня отдельными строками выведены значения, которые автоматически меняются формулой, в зависимости от той даты, которая сегодня.
Фильтры динамичные, меняются от месяца к месяцу по принципу - игнорирует текущий, выбирает 3 предыдущих месяца. Вид значений: 02.2024, 01.2024, 12.2023 и так далее.
Скрытый текст

Макрорекордером записал код, но как подставить к нему переменные так и не смог сообразить
Код
ActiveSheet.PivotTables("Сводная таблица11").PivotFields( _
        "[Date].[MonthNumber, Year].[MonthNumber, Year]").VisibleItemsList = Array( _
        "[Date].[MonthNumber, Year].&[02.2024]", "[Date].[MonthNumber, Year].&[12.2023]")

Прошу помочь с макросом, который бы брал значения из 3х ячеек и фильтровал сводную таблицу по этим критериям.
Файл пример предоставить не могу, т.к. сводная таблица - подключение к БД, отсоединяя которую, файл перестает реагировать на фильтры (

Всем заранее большое спасибо за помощь!
Оптимизация кода - удаление строк, если пустые столбцы
 
Ігор Гончаренко, спасибо большое, все работает очень быстро
Где можно почитать про команды вашего кода, хочу не просто применить на своем файле, а понять, что происходит в этом коде  
Оптимизация кода - удаление строк, если пустые столбцы
 
Ігор Гончаренко, это не просто скорость космического корабля, это прям... Нет слов
Единственное, что я не упомянул в первом сообщении, как такой код задать для листа, который не активен в книге (т.к. все действия запускаются таким образом, чтобы не активировать туда-сюда листы)

Активный лист в книге "Главная", лист, на котором выполняются все действия - "Бренды без продаж W"
Оптимизация кода - удаление строк, если пустые столбцы
 
webley, закинул Ваш код к себе

Заменил только немного, т.к. у меня лист скрыт, на котором это действие воспроизводится и выбран другой (основной)
Получается так:
Код
    Dim r As Long
    For r = ActiveWorkbook.Worksheets("Бренды без продаж W").Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
        If ActiveWorkbook.Worksheets("Бренды без продаж W").Cells(r, "B") & Cells(r, "C") & Cells(r, "D") = "" Then Rows(r).Delete
    Next r
    MsgBox "Done"
Но, в таком виде он не работает, хотя выдает msgbox

Упомянуть этот момент забыл в первом сообщении, мой косяк, прошу прощения
Если убрать ссылку на лист в книге, в таком случае все работает. Как можно оформить с названием листа этот код?

Спасибо
Оптимизация кода - удаление строк, если пустые столбцы
 
Всем привет!

Добрые люди, помогите решить одну проблему
Есть вот такой рабочий код:
Код
'Ищем последнюю ячейку на листе, в которой хранится хоть какое-то значение
    Set rF = ActiveSheet.Range("D1:D1000").Find("*", , xlValues, xlWhole, , xlPrevious)
    If Not rF Is Nothing Then
        lLastRow = rF.Row    'последняя заполненная строка
        lLastCol = rF.Column 'последний заполненный столбец
    End If

Range(rF, rF).Select

Do
    ActiveCell.Offset(-1, 0).Activate
        If ActiveCell = "" Then
            If ActiveCell.Offset(0, -1) = "" Then
                If ActiveCell.Offset(0, -1) = "" Then
                    ActiveCell.EntireRow.Delete
                End If
            End If
        End If
    lLastRow = lLastRow - 1
    
Loop While lLastRow <> 2

Этот код ищет пустые ячейки в столбцах B, C и D и если все строки в столбцах пустые - удаляет строку.
Но этот код очень долго обрабатывает информацию.

Подскажите, как можно данный код оптимизировать, чтобы он работал быстрее
Каждый раз около 50-300 строк обычно. Но бывает меньше и больше.

Пример файла во вложении

Всем спасибо за помощь!
Меню выбора данных в UserForm (без использования Multipage)
 
Цитата
написал:
Застрели не понял, чем мультипейдж не устраивает? Вероятно, вы не умеете его готовить?
Ran, огромное спасибо за пример с Multipage, посидел на выходных, разобрался как он работает и как его можно настроить под мои задачи. В принципе, "меню" на Multipage создать даже проще оказалось, чем прописывать процедуры.

Подкрутил еще туда изменение цвета через .ForeColor, но не уверен, что такой вариант корректный. Хотя, он работает для меня очень хорошо
Код
Private Sub Label11_Click()
    Me.MultiPage1.Value = 0
    Label12.ForeColor = vbWhite
    Label13.ForeColor = vbWhite
    Label14.ForeColor = vbWhite
    Label15.ForeColor = vbWhite
    Label16.ForeColor = vbWhite
    Label17.ForeColor = vbWhite
    Label11.ForeColor = vbYellow
End Sub
Private Sub Label12_Click()
    Me.MultiPage1.Value = 1
    Label12.ForeColor = vbYellow
    Label13.ForeColor = vbWhite
    Label14.ForeColor = vbWhite
    Label15.ForeColor = vbWhite
    Label16.ForeColor = vbWhite
    Label17.ForeColor = vbWhite
    Label11.ForeColor = vbWhite
End Sub

Прописываю так в каждом Label (кнопки меню) и по итогу меняется цвет.

Спасибо всем, кто помог мне разобраться в этой интересной штуке!!!
Изменено: x7turist - 14.08.2023 13:29:39
Меню выбора данных в UserForm (без использования Multipage)
 
Цитата
написал:
Тут в вашей теме нет не одного примера с использованием MultiPage.
Подумал, что в посте №6 использован был Multipage, но пробежал мельком, полноценно сяду разбираться чуть позже, как раскидаю основные задачи на работе.

В любом случае, благодаря сайту узнал очень многое про VBA и благодарен всем, кто помогает новичкам с решением вопросов и появляющихся проблем.
Меню выбора данных в UserForm (без использования Multipage)
 
Цитата
написал:
Но мы же не знаем что хочет ТС, молчит он. У  tolikt  хороший пример тому. Ждём что скажет  x7turist
Был за городом, поэтому не мог вовремя ответить, чтобы поддержать тему.

Цитата
написал:
По совету  MikeVol  используется принцип Скрыть/Отобразить нужную группу контролов при нажатии на надпись в меню.Также используется пример из статьи  РАБОТА С МОДУЛЯМИ КЛАССОВ .
Видимо, пойду самостоятельно изучать статью, так далеко я еще не заходил в работе с VBA. Спасибо большое за Ваш пример, я с ним ознакомился и он выглядит так, как мне нужно. Попробую разобраться во всем, что там используется.

Цитата
написал:
Застрели не понял, чем мультипейдж не устраивает? Вероятно, вы не умеете его готовить?
Скорее всего не умею, потому что как уже выше писал, не забирался так далеко в VBA. Но пример отличный, стало интересно разобраться в Multipage, ведь выглядит очень интересно. Где-то можно почитать подробнее про возможности Multipage? - Буду благодарен за информацию


P.S. Оба варианта в теме мне подходят, спасибо большое всем, кто предложил варианты.
Меню выбора данных в UserForm (без использования Multipage)
 
Файл меню пример, в котором есть данная форма
Меню выбора данных в UserForm (без использования Multipage)
 
Всем привет!

Уперся в стену и не могу продвинуться в решении проблемы с полноценным меню в Userform.

Задача: сделать переключение вкладок на вызванной UserForm через нажатие на текст в Label. CommandButton использовать не вариант, т.к. есть обводка вокруг кнопки, которая не выглядит лаконично.

С чем трудности: в одном и том же окне разместить разную информацию и переключаться между через "боковое меню"

Выглядит следующим образом
Скрытый текст


Уперся сначала в моменте, каким образом реализоваться переход между вкладками - решил сделать на каждую вкладку userform, чтобы визуально были одинаковыми, но справа в окошке была своя информация.

Далее уперся в закрытие формы, т.к. из любой вкладки может вызываться любая другая, соответственно, нужно прописать несколько выгрузок активных открытых форм.
Код
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False

'Выгружаем форму
Unload 'Дальше не знаю как продолжить

'Загружаем форму (Главная)
Load FormHome

Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True

Проблема еще и в том, что в данном случае, мне необходимо переключение из-за большого количества кнопок с действиями, которые не помещаются по итогу на полную форму в одной Userform

После выгрузки формы, кстати, не загружается новая, что очень странно. То есть в коде выше, если я укажу выгружаемую форму как она есть, то новая форма не загрузится.

Пытался еще таким вариантом, но ломается на строчке "FormProga.UserForm.Unload"
Код
Dim FormProga As UserForm
    For Each FormProga In ActiveWorkbook.UserForm
             FormProga.UserForm.Unload
    Next

И еще так
Код
Dim FormProga As UserForm
    For Each FormProga In ActiveWorkbook.UserForm
             FormProga.Unload.UserForm
    Next

Файл пример прикрепить не получилось, я закинул по ссылке на файловый хостинг

https://dropmefiles.com/HffER

Буду очень признателен, если толкнете меня в нужное русло или поможете решить такую вот задачку.
Удаление строки по 4м условиям в столбцах этой строки
 
Цитата
написал:
это хорошо, что у ТС только 4 столбца (от В до Е), а не 20 ))
На данном этапе 4, но может будет и больше в будущем.
Цитата
написал:
P.S. ТС, вы в вашем примере строку с "AMD" потеряли на листе "Что нужно получить"
Вот почему руками лучше не делать, можно случайно удалить то, что не нужно удалять

Я ваш код сегодня проверю, спасибо большое за помощь, возможно, в будущем, когда столбцов станет больше, ваш код решит мою проблему моментально!
Удаление строки по 4м условиям в столбцах этой строки
 
Цитата
написал:
У меня нет идентера, поэтому без отступов...
Код работает отлично, спасибо большое за помощь!
Это решило мою проблему
Удаление строки по 4м условиям в столбцах этой строки
 
Цитата
написал:
У меня нет идентера, поэтому без отступов...
Спасибо большое! Проверить код постараюсь сегодня, но завтра в любом случае отпишусь по результату!
Цитата
Hugo написал:
Про округление ничего не говорили, поэтому не округлял.
Округление не нужно, я уже там сам сделаю. Важнее было решить проблему с этими строками. Спасибо еще раз!
Изменено: x7turist - 27.06.2023 18:14:49
Удаление строки по 4м условиям в столбцах этой строки
 
Цитата
написал:
Н/Д - это CVErr(xlErrNA)
У меня Н/Д не из-за того, что формула не работает, а из-за копирования на лист в виде значений, а не формул

Поэтому я проверяю ячейки на нахождении в них значений #Н/Д

Можно поменять на листе #Н/Д на любой другой текст, но замена у меня отказывается работать через макрос. И не всегда работает через обычную замену через CTRL+F
Удаление строки по 4м условиям в столбцах этой строки
 
Всем привет!

Нужна помощь знающих людей с задачей, которую пытался решить самостоятельно, но так и не пришел к нужному варианту ее решения

Имеется таблица с данными, кол-во строк может быть около 10, может быть около 1000 (но обычно не больше 150-200)

Необходимо найти последнюю заполненную ячейку на листе и удалить из диапазона (A3:Ex(где x - последняя строка)) все строки по условию:

i = номер проверяемой строки

1. Cells(i, 2) = "#Н/Д"
2. Cells(i, 3) = "#Н/Д"
3. Cells(i, 4) = "#Н/Д"
4. Cells(i, 5) = "#Н/Д"

Если во всех этих строках есть "#Н/Д", удалить строку
Если не во всех ячейках в строке "i" это значение - пропустить и не удалять, перейти к следующей строке
Затем удалить с листа все "#Н/Д" из ячеек, чтобы остались пустые ячейки

Пытался решить несколькими способами, из последнего этот:
Код
Dim ND As String
ND = "#Н/Д"
    
Dim UdalenieStrok As Long
    UdalenieStrok = Cells(Rows.Count, 1).End(xlUp).row
        i = UdalenieStrok
     
Do
    Cells(i, 2).Select
        If ActiveCell = ND Then
            Cells(i, 3).Select
                If ActiveCell = "#Н/Д" Then
                    Cells(i, 4).Select
                        If ActiveCell = "#Н/Д" Then
                            Cells(i, 5).Select
                                If ActiveCell = "#Н/Д" Then
                                    Rows(i).Delete
                                End If
                        Else
                            GoTo Prohod2
                        End If
                Else
                    GoTo Prohod2
                End If
        Else
            GoTo Prohod2
        End If
Prohod2:
    i = i - 1
Loop While i <> 1
Но на строке If ActiveCell = ND Then или, если ее поменять на строку If ActiveCell = "#Н/Д" Then, вылетает ошибка синтаксиса Run Time Error:13

Файл примера во вложении

Прошу помощи в решении задачи

Заранее всем спасибо большое за помощь!
Изменено: x7turist - 27.06.2023 17:19:47
Остановка макроса, внесение изменений в ячейки, продолжение выполнения макроса
 
Цитата
написал:
Как вариант используйте умную таблицу, тогда  не придется останавливать макрос, просто после окончания макроса, добавляйте значения в конец таблицы "Списки" и они автоматически добавятся в таблицу "Данные".
Это дополняет идею, написанную выше и в целом, звучит как абсолютное решение моего вопроса.
Умные таблицы мне пригодятся, потому что так действительно удобно это выглядит и еще мне такое пригодиться попозже, в формировании другого отчета

Спасибо большое!
Остановка макроса, внесение изменений в ячейки, продолжение выполнения макроса
 
Цитата
написал:
Сделайте в модуле 2 процедуры. Макрос1 - будет запускаться вначале и останавливаться (заканчиваться "Exit Sub") с появлением кнопки. Макрос2 - будет запускаться при нажатии кнопки и код в нем будет прописан не с начала, а с нужного момента (продолжение обработки).
Блин, это ведь реально самое простое решение

Сделать макрос, который завершается появлением кнопки, а на кнопку привязать новый макрос, который запускается как продолжение и выполняет все нужные мне операции

Гениально, спасибо большое! Кажется это то самое решение моей проблемы.
Остановка макроса, внесение изменений в ячейки, продолжение выполнения макроса
 
Цитата
написал:
Если бы Вы приложили файл с примером и объяснили, что именно Вы хотите сделать, то было бы гораздо проще

Я переношу информацию из одного файла Excel (с ценами, названием продукта и так далее) в другой Excel (назовем его шаблон).
В шаблоне есть вкладки "Данные" и "Список".
На вкладке данные формируется информация из первого файла Excel. В колонке "А" прописана формула ВПР, которая тянет данные с листа "Список".

Мне необходимо сделать следующее:
1. Перенести данные из одной книги в другую, чтобы сформировать колонки "В, С, G, H" на листе "Данные" (я это сделал)
2. Отфильтровать значения по столбцу "А" для поиска данных, которые не подтянулись через ВПР (я это сделал)
3. Если в колонке "А" есть данные с "#Н/Ф", временно притормозить работу макроса, чтобы:
   А) Добавить руками недостающие данные на лист "Список"
   Б) Подтянуть все данные через ВПР на листе "Данные"
4. Продолжить выполнение макроса

Заранее невозможно узнать, каких позиций не хватает. Поэтому добавление нужно делать только в момент формирования отфильтрованного списка.

Файл примера приложил:
Остановка макроса, внесение изменений в ячейки, продолжение выполнения макроса
 
Цитата
написал:
Фильтруйте и удаляйте макросом
Мне не нужно удалять эти строки, мне нужно на основе этих строк добавлять информацию на другой лист, чтобы ВПР работал правильно.
Но для этого нужно добавить эту информацию на лист "Список" руками, чтобы макрос висел на фоне и ждал, пока я запущу его обратно, после исправления всех косячных строк!
Остановка макроса, внесение изменений в ячейки, продолжение выполнения макроса
 
Всем привет!

Столкнулся с проблемой, из-за которой не получается решить задачу.
Есть таблица, в которой макрос выполняет вычисления и перенос информации.
Скрытый текст

В колонке "А" у меня прописана формула ВПР, которая тянет данные с другого листа по колонке "B". В колонку "В" данные переносятся с другого листа. Иногда случается ситуация, когда ВПР не может подтянуть данные, из-за отсутствия необходимых данных на листе "Список", откуда ВПР тянет данные.

Для достижения цели, необходимо отсортировать все косячные ячейки с текстом #Н/Д (здесь нет проблем)
Скрытый текст

После чего временно остановить макрос, пока не будет нажата кнопка "Продолжить", которую я генерирую самим макросом.
Скрытый текст

После остановки макроса, необходимо внести данные на листе "Список" руками, чтобы ВПР подтянуло все значения, которых не хватает. Далее я нажимаю на кнопку, она удаляется и макрос продолжает свою работу до появления такой же таблицы, где нужно остановить макрос (действия повторяются).

Как я пытался решить:
Скрытый текст

Прочитал на сайте несколько статей, где предлагались разные варианты, включая DoEvents, но т.к. я не очень силен в VBA, привязать к своей задаче решение не смог.

Вопрос в следующем, как реализовать данный механизм, чтобы во время остановки макроса можно было выполнять другие действия, в частности, изменение данных на листе. После выполненных действий производить запуск не с самого начала, а с места, где макрос остановился?
Изменено: Сергей Верухин - 19.06.2023 12:54:33
Разделение текста в ячейке, умножение числа из ячейки и обратный сбор в 1 ячейку
 
Цитата
написал:
В R2:
Код
    [URL=#]?[/URL]       1      =ПОДСТАВИТЬ(ЕСЛИ(ЛЕВСИМВ(Q2;1)=  " "  ;ПРАВСИМВ(Q2;ДЛСТР(Q2)-1);Q2);СИМВОЛ(160);  ""  )   
 
Ля
Так быстро и решение
Спасибо огромнейшее, все работает!
Чуть-чуть до "истины" не добрался, надеялся без помощи форумчан сделать  
Разделение текста в ячейке, умножение числа из ячейки и обратный сбор в 1 ячейку
 
Всем добрый день.
Очень тяжелое название темы, поэтому постараюсь объяснить что мне нужно.

Есть некий прайс, который формируется по принципу
Смайлик в юникоде, название игры, -, цена, р

Выглядит так: 📍ATV Drift & Tricks Definitive Edition - 170₽

Что хочу сделать в конечном варианте:
Взять название игры, а цену уменьшить на 25 или 30 % (в формуле *0,75 или *0,7). Далее в новую ячейку записать тоже самое название, но с новой ценой

Т.к. хочу сделать скидку на полный прайс, не хочется каждую строку править вручную. Ниже файл прикрепил, пытался сделать, но загвоздка в лишнем пробеле, который появляется при разделении строчки с названием и ценой. У меня может быть цена 160₽ или 2160₽, но количество знаков всегда 3 или 4 после -.

Формула =ЕСЛИ(ЛЕВСИМВ(Q4;1)=" ";ПРАВСИМВ(Q4;ДЛСТР(Q4)-1);Q4) не удаляет пробелы, из-за этого последующие формулы перестают работать.

Вижу вариант такой, но он мне не подходит:
Написать название игры в А1 ячейку, цену в А2, с наценкой А3, с буквой ₽в ячейку А4 и собрать все по формуле Объединить, но такой вариант не канает, потому что прайс-лист постоянно меняется, и нужно CTRL+C и далее CTRL+V

Надеюсь, понятно объяснил, что хотелось бы видеть. Направьте в нужное русло, чтобы сделать реализацию такой вот штуковины!
Изменено: Сергей Верухин - 24.08.2022 14:21:33
Разделение текста в ячейке на 2 разные ячейки
 
Jack Famous, перенес себе в макрос, все работает как часы. Спасибо огромнейшее!
Пойду теперь разбираться, что в этом макросе за что отвечает и как он вообще функционирует. Много неизвестных команд

Еще раз всем спасибо!
Разделение текста в ячейке на 2 разные ячейки
 
Jack Famous, прикрепил файлы, в которых видно, что и как нужно сделать.

Небольшое уточнение по задаче, которую макрос должен по итогу выполнять:
1. Строк может быть от 5 и до 1000-5000 штук. Эта цифра всегда разная. Самостоятельная остановка, как только заканчиваются данные в таблице
2. Макрос должен делить только те значения, которые указаны на примере ниже: - остальные должен игнорировать
До:

После:
Разделение текста в ячейке на 2 разные ячейки
 
Всем привет!
Нужна помощь с разделением текста в ячейке. Описание ниже из соседней темы, там было обсуждение начато:
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=151352&a...

Цитата
Ігор Гончаренко написал:
Сергей Верухин,
вы не мытарства свои описывайте в попытке найти решение, а описывайте задачу
написали ОДНУ! фразу: Шумоглушитель SHK 160/6
я написал как ее разделить
я не знаю что там у вас еще быввает на сколько частей и как его поделить
это-то понимаете? что я не могу угадать с написанием макроса не имея представления, а что там может быть в данных
Ігор Гончаренко, дело в том, что я попросил сделать разделение только по одному условию, чтобы дальше решить задачу своими силами. Если бы я хотел получить готовое решение моей задачи, я бы описывал все подробно, как в нормальном ТЗ. Но я не хочу получить готовое решение на все, потому что тогда не научусь сам. Вы мне дали направление, я его пытался применить самостоятельно, дополнив некоторыми параметрами и условиями. Я попробовал самостоятельно сделать, у меня не вышло и поэтому я снова обратился к Вам. В этом все и дело (


Хотел еще уточнить по вот этой истории:
Цитата
написал:
Цитата
Сергей Верухин написал:
А1 -  Шумоглушитель SHK 160/6
 
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14      Sub   SplitNoLatino()        Dim   r&, re, ms, s$        Set   re = CreateObject(  "VBScript.RegExp"  )        re.Pattern =   "[А-Яа-яЁё ]+"  :  r = 1        Do   While   Not   IsEmpty(Cells(r, 1))          s = Cells(r, 1)          If   re.test(s)   Then            Set   ms = re.Execute(s)            Cells(r, 3) = Trim(ms(0))            Cells(r, 4) = Right(s, Len(s) - Len(ms(0)))          End   If          r = r + 1        Loop    End   Sub   
 
Этот способ работает отлично, но есть некоторые нюансы, решить которые не могу уже пару часов. Пытался условие дополнительное ввести - не работает. Пытался через переменные, тоже не работает. Мой код ниже.
Пытаюсь сделать исключение, т.к. не все позиции нужно разделять, а если точнее, то вот:
Код
Sub SpliTest()
  Dim r&, re, ms, s$
  Set re = CreateObject("VBScript.RegExp")
  re.Pattern = "[А-Яа-яЁё ]+":  r = 26
  Do While Not IsEmpty(Cells(r, 2))
        If ActiveCell Like "*" & "Установка" & "*" Or ActiveCell Like "*" & "Приточная" & "*" Or ActiveCell Like "*" & "Вытяжная" & "*" _
        Or ActiveCell Like "*" & "id" & "*" Then
            r = r + 1
            GoTo Prodoljit
        End If
    s = Cells(r, 2)
    If re.test(s) Then
      Set ms = re.Execute(s)
      Cells(r, 2) = Trim(ms(0))
      Cells(r, 3) = Right(s, Len(s) - Len(ms(0)))
    End If
Prodoljit:
    r = r + 1
  Loop
End Sub
Собственно, ячейки, в которых есть текст "Установка, Приточная, Вытяжная, id..." разделять не нужно.

Обратный клапан DV-K100 OK нужно делить.
П2 (ОАСС)   id2440491 Приточная установка DV-B05000 R /[P1]-[K1]-[F1]-[SVH-W.3]-[V1.КЦ31С (1.1/3000)]-[H1]-[P1] - не нужно.

Повторяются в неделимых ячейках обычно слова, написанные выше. (для примера)

Оптимизация кода макроса
 
Ігор Гончаренко, я лично написал, что для меня Ваш способ не работает, только потому, что "не дорос" еще до такого сложного (на мой взгляд сейчас) описания функций VBA. С точки зрения чего-то нового и что требует внимания и изучения - тут полное попадание. Как время на работе будет, буду изучать и пытаться разобраться в том варианте, который предложили Вы.

Хотел еще уточнить по вот этой истории:
Цитата
написал:
Цитата
Сергей Верухин написал:
А1 -  Шумоглушитель SHK 160/6
 
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14      Sub   SplitNoLatino()        Dim   r&, re, ms, s$        Set   re = CreateObject(  "VBScript.RegExp"  )        re.Pattern =   "[А-Яа-яЁё ]+"  :  r = 1        Do   While   Not   IsEmpty(Cells(r, 1))          s = Cells(r, 1)          If   re.test(s)   Then            Set   ms = re.Execute(s)            Cells(r, 3) = Trim(ms(0))            Cells(r, 4) = Right(s, Len(s) - Len(ms(0)))          End   If          r = r + 1        Loop    End   Sub   
 
Этот способ работает отлично, но есть некоторые нюансы, решить которые не могу уже пару часов. Пытался условие дополнительное ввести - не работает. Пытался через переменные, тоже не работает. Мой код ниже.
Пытаюсь сделать исключение, т.к. не все позиции нужно разделять, а если точнее, то вот:
Код
Sub SpliTest()
  Dim r&, re, ms, s$
  Set re = CreateObject("VBScript.RegExp")
  re.Pattern = "[А-Яа-яЁё ]+":  r = 26
  Do While Not IsEmpty(Cells(r, 2))
        If ActiveCell Like "*" & "Установка" & "*" Or ActiveCell Like "*" & "Приточная" & "*" Or ActiveCell Like "*" & "Вытяжная" & "*" _
        Or ActiveCell Like "*" & "id" & "*" Then
            r = r + 1
            GoTo Prodoljit
        End If
    s = Cells(r, 2)
    If re.test(s) Then
      Set ms = re.Execute(s)
      Cells(r, 2) = Trim(ms(0))
      Cells(r, 3) = Right(s, Len(s) - Len(ms(0)))
    End If
Prodoljit:
    r = r + 1
  Loop
End Sub
Собственно, ячейки, в которых есть текст "Установка, Приточная, Вытяжная, id..." разделять не нужно.

Обратный клапан DV-K100 OK нужно делить.
П2 (ОАСС)   id2440491 Приточная установка DV-B05000 R /[P1]-[K1]-[F1]-[SVH-W.3]-[V1.КЦ31С (1.1/3000)]-[H1]-[P1] - не нужно.

Повторяются в неделимых ячейках обычно слова, написанные выше. (для примера)

Изменено: Сергей Верухин - 11.08.2022 10:52:52
Оптимизация кода макроса
 
Jack Famous, а я и не против потратить рабочее время на написание того, что мне нужно для дальнейшей работы. Так что спасибо вам за помощь!
Оптимизация кода макроса
 
Jack Famous, Применил все ваши советы, с массивами ни разу не работал, есть теперь почва для изучения и улучшения навыков в этом деле. Спасибо вам, в будущих макросах буду использовать такой вариант массовой замены, потому что удобно. Единственный минус - большое количество позиций для изменения, долго набивал все в Excel :-D

Ігор Гончаренко, попробовал ваш способ, но по какой-то причине он не менял значения как мне нужно. Способ с такой заменой и интересен и сложен, мне нужно немного поизучать массивы, чтобы понять, что именно вы мне предложили (пока чуточку туповат для понимания).

Вопрос не совсем по теме, кроме Слепцовой, кого еще можно почитать, интересует развитие в сторону массивов и сложных функций для вычисления!
И еще один, в какую сторону рыть информацию, в случае, когда мне нужно сделать разделение текста по ячейкам.

Пример:
А1 -  Шумоглушитель SHK 160/6
Мне нужно чтобы в ячейке А1 было - Шумоглушитель, в ячейке А2 - SHK 160/6/
После применения макроса, естественно.

В любом случае, всем спасибо огромное!
Изменено: Сергей Верухин - 10.08.2022 16:27:08
Страницы: 1 2 След.
Наверх