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

Страницы: 1 2 След.
Формулы для обработки массива по ключу с условиями., Формула для формирования массива
 
Спасибо работает!
В верхней таблице, это был пример как у меня криво получилось, его переделывать не обязательно было. Но все равно спасибо за пример.
Изменено: Mergens - 18.12.2023 10:16:53
Формулы для обработки массива по ключу с условиями., Формула для формирования массива
 
Добрый день!
Помогите составить формулы обрабатывающую данные из таблицы.
Сложно сформулировать, т.к. несколько условий есть. В файле приложил пример, как криво "сделал", и как надо.
Для примера сделал через ВПР, но так не нужно, в таблице не будет составных ключей.

Смысл в следующем, данные отсортированы по ключевым полям и дате(по убывающей), для удобства поиска.
1. В столбцах D:G по кварталам, необходимо вернуть первые записи по кварталам, кроме самой первой за год.
2. В столбцах H:I записи из п.1 по порядку с переносом строки с датами, т.е. те самые первые записи для кварталов кроме самой первой за год.
3. В столбцах J:L самая первая запись по году.

Вот как то так, в формулы извлекающие массив по условиям играть что-то не получается(((.
Ни как не могу вернуть строку, значение или массив по нескольким ключевым полям.
Изменено: Mergens - 15.12.2023 17:20:57
Получить диапазон по имени стиля
 
Спасибо за ответы, сделал поиск по совету Ігор Гончаренко и добавил формирование диапазона строк по совету testuser.
Думал, возможно есть стандартные возможности выбора диапазона строк по стилю.
Получить диапазон по имени стиля
 
Добрый день!
Как в VBA выбрать все ячейки с заданным стилем на листе?
Скрытие ячеек при печати и вывод после, Печать листа без вывода заданных ячеек строк
 
Привет всем!
Подскажите как при просмотре и печати, не выводить на просмотр и соответственно на печать значения из ячеек строки, при этом другие ячейки в строке должны выходить на печать, поэтому скрывать строку не рассматриваю. Но после печати надо все вернуть назад как было. Скрываемые ячейки засунул в именованный диапазон HidePrint.
Пока реализовал по событию  Workbook_BeforePrint форматирование через цвет шрифта и фона в белый для ячеек.
Назад возвращаю по событию Worksheet_SelectionChange.
Поискал по событиям Листа/Книги, но ничего годного не нашел.

скрываю при печати:
Код
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    With Range("HidePrint")
        With .Font
             .ThemeColor = xlThemeColorDark1
             .TintAndShade = 0
            .ThemeFont = xlThemeFontNone
        End With
        With .Interior
             .Pattern = xlNone
        End With
        .Borders.LineStyle = xlNone
    End With
End Sub

Вывожу после печати:
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With Range("HidePrint")
        .Columns(1).Style = "Вывод"
        .Columns(2).Style = "Вывод"
    End With
End Sub
Изменено: Mergens - 18.01.2023 02:33:09
VBA. Вызов функции из переменной, Библиотеки VBA
 
Цитата
написал:
Application.Run
Спасибо, именно то что нужно, все работает.
VBA. Вызов функции из переменной, Библиотеки VBA
 
Добрый день, друзья!

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

Sub Fill()
Dim sFunct
Dim res

 sFunct = "Mult"   'имя функции в переменной

 res = sFunct(3, 4)
 
End Sub

Function Mult(arg1, arg2)  ' вызываемая функция
 Mult = arg1 * arg2
End Function
Изменено: Mergens - 29.07.2022 11:55:41
Создание плоской многоуровневой иерархии из списка, через связи родитель-потомок., Создание иерархии из списка значений
 
JayBhagavan, Спасибо, но пока кроме Вас желающих пока нет, к сожалению конечно. Я думал также, что верхний узел оказался не самым верхним.
Создание плоской многоуровневой иерархии из списка, через связи родитель-потомок., Создание иерархии из списка значений
 
JayBhagavan, Есть ошибка при формировании, если разные значения у ROOT, например Root1...RootN, то собирается не корректно. нарушается последовательность.
Я скинул файл со всем списком, но к сожалению больше 100 Кб нельзя, поэтому в архиве и разбит на части.

Файлы удалены - превышение допустимого размера вложения [МОДЕРАТОР]
Изменено: vikttur - 21.07.2021 00:08:03
Создание плоской многоуровневой иерархии из списка, через связи родитель-потомок., Создание иерархии из списка значений
 
JayBhagavan, Супер! Спасибо, большое. работает отлично.
Изменено: Mergens - 20.07.2021 17:59:35
Создание плоской многоуровневой иерархии из списка, через связи родитель-потомок., Создание иерархии из списка значений
 
Mershik,Файл и описание требуемого обновил, на листе 2 ожидаемый результат
Результат выполняется в варианте решения 1(в макросе), но т.к. там заложена рекурсия, то на больших объемах более 30000 строк выполняется очень долго.
Поэтому необходимо ускорить в разы, вот и ищу вариант решения проблемы.
Изменено: Mergens - 20.07.2021 01:57:50
Создание плоской многоуровневой иерархии из списка, через связи родитель-потомок., Создание иерархии из списка значений
 
Добрый день, форумчане!
Помогите пожалуйста, мне необходимо сделать список в соответствии с последовательностью значения в иерархии.
Необходимый результат выводится через реализованный макрос CreateHier_V1 на лист2 и группируется по Outlinelevel.
Но на больших объемах строк, выполнение очень долгое. поэтому нужно другое решение.

Делаю на Scripting.Dictionary по полям в таблице
УзелПозиция узла у родителяРодительТип узла
NODEIDNODEPOSITIONPARENTIDNODETYPE
Примечание:
NODEPOSITION - Игнорируем
NODETYPE - определяет уровень вложенности

Условия
1. Ускорить выполнение макроса, путем избавления от рекурсии
2. Записи повторяются, поэтому повторы игнорировать.
3. Самый верхний узел родитель ROOT не нужен.

Примечание: Для типа узла "U" - записи идут вместе, а затем их листья. Наглядно видно если отфильтровать по узлу  "U" (Например строки, 891 - 914, 981 - 1028)
Изменено: vikttur - 20.07.2021 19:30:41
Полезные библиотеки/классы VBA, Библиотеки VBA
 
Всем, добрый день!
Хотел бы поинтересоваться, каким библиотеками Вы пользуетесь в VBA?
Я в основном использую стандартные Scripting и RegExp. Для решения поставленных задач, возможно есть ещё интересные объекты, о которых не в курсе.
Если не сложно, просветите, или скиньте ссылку на методичку)))
Изменено: Mergens - 04.07.2021 01:12:01
Регулярное выражение. Взять часть наименования из столбца А и столбца B и получить новое наименование.
 
Kuzmich,
К сожалению, не совсем корректно отрабатывает в некоторых случаях.
Все таки лучше через RegExp
Регулярное выражение. Взять часть наименования из столбца А и столбца B и получить новое наименование.
 
Сергей, спасибо, но не все строки обработало корректно.

Kuzmich, да спасибо, буду исправлять на лету,
Вообще все должно работать на VBA, это я для удобства вписал функции на VBA, чтобы патроны подобрать.
Регулярное выражение. Взять часть наименования из столбца А и столбца B и получить новое наименование.
 
Ошибка, можно игнорировать.
Регулярное выражение. Взять часть наименования из столбца А и столбца B и получить новое наименование.
 
В том то и проблема, что список этот надо сформировать. готового нет.
Для первого столбца все таки можно брать все до "тире(Буква в верхнем регистре), но надо отсеять начало.
Изменено: Mergens - 23.04.2021 14:51:40
Регулярное выражение. Взять часть наименования из столбца А и столбца B и получить новое наименование.
 
Добрый день!
Прошу помочь, не получается получить данные через регулярное выражение.
Файл пример приложил.
в столбце А Наименование 1
в столбце B Наименование 2

Задача Взять часть наименования из столбца А и столбца B. Получив новое наименование.

При это в столбце А надо проигнорировать Маску "*(символы)(Цифра(ы))(символы)"В общем все до 2го пробела, Далее взять все (Символы) до "- (Символ в верхнем регистре)".  = Результат (Символы)

Из столбца B берем последние символы до первого пробела с тире от конца строки : Маска "- (символы)(конец строки)" = результат (символы)

Пример простой:
ВЛ 220кВ Камская ГЭС-Апрельская 1                               |Сегмент 3 - оп.5 - оп.248
Ожидаемый результат: Камская ГЭС - оп.248

Более сложные, где "-" 3 раза
ВЛ 220кВ   П-уральская-С-уральская ГРЭС 2                     |Сегмент 1 - оп.1 - оп.120
Ожидаемый результат: П-уральская - оп.120

В верхнем регистре 5 букв.
ВЛ 220кВ Белоярская   АЭС-Курчатовская2                        |Сегмент 2 - оп.11 - оп.26
Ожидаемый результат: Белоярская АЭС - оп.26

П.С. Все обработки будут работать в VBA. Функции вставлены для подбора паттернов. Так что можно прямо на VBA писать обработку.
Изменено: Mergens - 23.04.2021 15:32:44
Создание паттерна для извлечения времени ЧЧ:ММ через регулярные выражения RegExp
 
Цитата
Может так:
([0-1][0-9]|[2][0-3])([,|/|\-|\.|\*|\+|:])?([0-5][0-9])?
Работает, Спасибо.
Но, придется все таки перечислить все знаки разделители. Я исходил из того чтобы взять любое, что похоже на ЧЧ ММ или ЧЧ, и исключить корректно заведенное через ЧЧ:ММ ([^\:])?.  
Изменено: Mergens - 29.03.2021 11:06:29
Создание паттерна для извлечения времени ЧЧ:ММ через регулярные выражения RegExp
 
Kuzmich, спасибо, я не знал что можно указывать для метода .Replace указатели места замены из шаблона.

Конструкция [^\:] работает. Спасибо.

"К сожалению так и не получилось избавится от корректной записи, все равно обрабатывается и она попадает.
В файле приложил сделав новую функцию и паттерн к ней.

Посмотрите пожалуйста, что можно сделать."

Update: кажется нашел решение таким паттерном  ([0-1][0-9]|[2][0-3])([^\:])?([0-5][0-9])([^\:])? - не работает если ЧЧ
Изменено: Mergens - 29.03.2021 11:07:00
Создание паттерна для извлечения времени ЧЧ:ММ через регулярные выражения RegExp
 
Kuzmich, Спасибо больше.  А конструкция [^\:] не подойдёт?
([0-1][0-9]|[2][0-3])([^\:])?([0-5][0-9]), и что значит знак $ в замене? "$1:00", "$1:$3"
Создание паттерна для извлечения времени ЧЧ:ММ через регулярные выражения RegExp
 
Цитата
Как-то наоборот приводят к правильному написанию времени при различных разделителях типа , / или -
Вы правы, вот как раз я такой случай и рассматриваю, что могут завести различными разделителями, или без разделителя просто указав конкретный час, это мне и требуется получить, если время не корректным разделителем меняем разделитель на корректный :, если завели просто час, добавляю разделитель : и 00.
Но если завели время в правильном формате, то мне надо игнорировать такое заведение.
Исключить имелось в виду написание в паттерне исключения по корректно заведенных чч:мм, чтобы не попадали в выборку

например :
все ниже меняем на 12:00
12
12,00
12*00
12-00
12/00
12+00
но если завели 12:00 то менять ничего не надо и данная запись не должна попасть в выборку.
Цитата
Где критерий, что две цифры относятся к времени, а не к номеру дома?
Тут ничего не поделать, в табеле учета времени должно быть только время. все другое будет нищядно изменяться на времяя
Изменено: Mergens - 28.03.2021 14:47:56
Создание паттерна для извлечения времени ЧЧ:ММ через регулярные выражения RegExp
 
Прошу подсказать с паттерном, Часть 2 в теме.
Создание паттерна для извлечения времени ЧЧ:ММ через регулярные выражения RegExp
 
Kuzmich Спасибо, это самый короткий вариант!
Создание паттерна для извлечения времени ЧЧ:ММ через регулярные выражения RegExp
 
8-0  :(  точно
Многоуровневая структура и варианты ее создания
 
Вам поможет сводная таблица
https://www.planetaexcel.ru/techniques/8/132/index.php?page=user&id=28083
Создание паттерна для извлечения времени ЧЧ:ММ через регулярные выражения RegExp
 
А ну да точнО! чето я видимо совсем сегодня не соображаю.

в итоге пока получилось как то так
(с|от)\s?(([0-1]\d|2[0-3]):[0-5]\d)\s(по|до)\s?(([0-1]\d|2[0-3]):[0-5]\d)|(с|от|по|до)\s?(([0-1]\d|2[0-3]):[0-5]\d)|(([0-1]\d|2[0-3]):[0-5]\d)
Изменено: Mergens - 26.03.2021 16:57:27
Создание паттерна для извлечения времени ЧЧ:ММ через регулярные выражения RegExp
 
Спасибо, тоже работает, тестирую, мне еще втыкать ([0-1]\d|2[0-3]):[0-5]\d - т.к. надо брать точно, что это именно время, а не суммарное объем времени типа 156:44.
Создание паттерна для извлечения времени ЧЧ:ММ через регулярные выражения RegExp
 
RAN, спасибо, работает, тестирую.
Создание паттерна для извлечения времени ЧЧ:ММ через регулярные выражения RegExp
 
Цитата
msi2102 написал:
(с|от|по|до)\s(\d{2}:\d{2})|(\d{2}:\d{2})
почти, нужно чтобы понимало по отдельности интервалы (с|от чч:мм по|до чч:мм) или (чч:мм) или (с|от чч:мм ) или (по|до чч:мм)
Страницы: 1 2 След.
Наверх