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

Страницы: 1 2 След.
Мост для использования в Excel возможностей регулярных выражений .Net
 
Для этого проще формулу написать она, что на VBA что на .Net это очень простая задача. В Регулярных выражениях, если память не изменяет такой возможности нет.

Цитата
medvalex написал: Возвращает Истину для пустых строк, даже если они не удовлетворяют выражению
Возвращает Истину, когда найдено соответствие только части строки, а не всей строки, шаблону.
Я же писал, что библиотека не поддерживается, а значит предоставляется как есть, ну нет у меня пока желания ее развивать.
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Мост для использования в Excel возможностей регулярных выражений .Net
 
Цитата
medvalex написал:
Явно просится булева функция IsMatch
Она есть, собственно Содержит(A1;"[a-z]";1)
Для 64-битной версии тоже есть надстройка, это не проблема.
Развитие данной библиотеки пока не ведется ибо нет необходимости и мотивации - в принципе можно написать, что угодно и даже встроить полноценное приложение которое хоть по инету шарит хоть с удаленными сервисами работает.... в обшем ограничений почти нет - только апи экселя
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Мост для использования в Excel возможностей регулярных выражений .Net
 
Выложил версию 3 для работы с регулярными выражениями (C# Regex v3.xll), а также надстройку (XlsFunctionLibrary v1.xll) добавляющую некоторые очень полезные формулы, например получить часть строки из ячейкт соответствующую шаблону, посчитать кол-во символов в ячейке, найти файл в директории, узнать содержит ли ячейка шаблон текста, заполнить ячейку из текстового файла.
Все формулы можно посмотреть, вызвав диалог для вставки формулы и выбрав соответствующие разделы (А.M4rf C# Regex Functions и AMarf Xls FunctionLibrary) для всех формул включена документация, если кому то нудны будут более подробные разъяснения то пишите.

Ссылка на скачивание:  OneDrive
Распространение запрещено. Это означает, что скачивать и пользоваться можно, но размещать на других ресурсах для скачивания нельзя.
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Мост для использования в Excel возможностей регулярных выражений .Net
 
Оу ! не был тут столько времени, а тут оказывается оживили тему ! Чуть позже залью надстройку, как только откопаю ее у себя на компьютере
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Вычисления при циклических ссылках
 
"Ячейка спутник" означает что она будет хранить UDF котороя буде вычислять значения двух других ячеек по значению, короче пока она есть все считается, как только ее удалили все перестало расчитываться. Скиньте пример расчета, попробуем его реализовать на vba - для меня конечно проще сдедать xll надстройку и использлвать в ней Net, но ради 1 функции целые надстройки не делаются
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Вычисления при циклических ссылках
 
Ну в целом то можно нахимичить что бы в ячейках было 2 значения и они пересчитывались в зависимости от изменения значений друг друга - единственное что придеться делать ячейку спутник +) с функций внутри
Изменено: amarf - 22.02.2015 23:03:08
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Обьединение нескольких xml файлов
 
На .Net объеденить xml достаточно просто если конкретная логика для объединения элементов
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Совестная работа офисов 2003 и 2007
 
Правой кнопкой по файлу -> открыть с помощью -> выбрать программу -> установить галочку "использовать выбранную программу для всех файлов такого типа" -> выбрать программу и нажать ОК

или
1. Панель управления\Программы по умолчанию\сопоставление типов файлов или протоколов конкретных программ
2. Выбрать расширение документа и изменить программу которая его открывает
Изменено: amarf - 06.02.2015 12:16:40
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Визуализация отчета, Требуется визуализация ежемесячного отчета
 
Цитата
ikki пишет:
ту же мысль можно (а в этой ветке и нужно) формулировать иначе: "т.к. деньги меня не интересуют, буду безбожно демпинговать"
Я выше писал,что еслы Вы не справитесь с задачей (или откажетесь) до той поры я не собираюсь, что то демпить или уговаривать Заказчика взять меня для выполнения - все же задача не конкретная и немного творческая - а пока не увидешь файл с таблицей, все равно как кот в мешке, может будут идеи, а может и нет
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Визуализация отчета, Требуется визуализация ежемесячного отчета
 
Это не правило, а рекомендация. Я люблю работать с данными, по этому есть интерес не сколько в заработке сколько в самой задачи
И я не думаю, что количеством сообщей определяются способности
Изменено: amarf - 05.02.2015 22:22:08
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Визуализация отчета, Требуется визуализация ежемесячного отчета
 
Пришлите и мне тоже, посмотрю, если ikki не справится попробую предложить, что то свое
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Не работает пользовательская функция VBA с нейтральным кодом
 
У Вас в строчке с arr(0) = 2 происходит ошибка определения типа переменно - т.е. вы ее объявили но VBA не может так интерпретировать ее в массив тем более что его границы не заданы, надо бы написать что то типо того:
Код
       Dim arr(0 To 10) As Variant
          arr(0) = 2
       VD = 6
П.С. Банально компилятору в момент выполнения вы сообщаете что эта переменная будет массивом без ограничений по размеру и он естественно Вам выдает ошибку ибо в оперативной памяти все имеет размер +)
Изменено: amarf - 04.02.2015 21:16:58
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Проверка Cells на равенство
 
Так у Вас в 5-ом столбце одни пустые ячейки вот он и окрашивает только пустые, вот было
Код
If Cells(1, n).Value = Cells(n, m).Value Then
а надо


Код
Sub mmm()
For n = 5 To 25
    For m = 5 To 15
If Cells(n, 1).Value = Cells(n, m).Value Then
 Cells(n, m).Interior.Color = 4967
End If
Next m
Next n
End Sub
 
Изменено: amarf - 04.02.2015 17:49:57
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Проверка Cells на равенство
 
МОжет быть попробывать .Cells(1, n).Value - да и файл с макросом бы в студию
Изменено: amarf - 04.02.2015 17:35:09
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Мост для использования в Excel возможностей регулярных выражений .Net
 
Hugo Это как раз то что необходимо, т.к. в диапазонах (массивах) можно отслеживать с какой строки начинать вычисления и до какой выполнять итерации +)
Цитата
Doober пишет: А не проще написать для Excel надстройку ExcelAddIn и не мучиться с мостами и прочим.
ExcelAddIn средствами VBA писать не хочется (я слишком разбалован C# и .Net) а Com надстройки имеют ограничения по использованию в разных версиях + производительность ниже чем у XLL
Изменено: amarf - 04.02.2015 21:21:49
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Мост для использования в Excel возможностей регулярных выражений .Net
 
Работает с версии 2002 и выше (Но надо проверить), Net Framework по идее не ниже 4 версии т.к. при компиляции библиотеки не интегрируются.
Скорость работы выше чем у RegExp где то в 1,5-2 раза (это чисто субъективная оценка - проверял одну из моих работ с .Net и RegExp и большим количеством условий)  и плюс используются параллельные вычисления Excel.

По сравнению с RegExp в .Net есть очень удобные просмотры вперед и назад, именованные группы, больше привязок. При этом можно реализовать более сложные вычисления в других функциях - тут я представил стандартные с немножко расширенным функционалом под Excel.

Вот файл http://1drv.ms/1zJgCPu с примером работы - там выполнялся поиск адресов из одной таблицы с 6500 адресов в другой в которой >20000 адресов - проблема была в том, что синтаксис написания адресов был похож, но точно не соответствовал, что не давало использовать ПОИСПОЗ
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Мост для использования в Excel возможностей регулярных выражений .Net
 
Hugo При создании надстройки используется C# а также специальный мост который напичкан API функциями и COM объектом Excel, а они мало общего имеют с VBA и интерфейсами .Net, поскольку я только начал осваивать надстройки xll, я особо не волнуюсь за диапазоны.

Должен Вас поблагодарить, благодаря Вам я нашел направление движения по данному вопросу, выглядит это страшновато +)

Код
(ExcelDnaUtil.Application as dynamic).Intersect(FirstRange, AvailableRange).Rows.Count;
 
Изменено: amarf - 04.02.2015 16:56:44
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Мост для использования в Excel возможностей регулярных выражений .Net
 
Не получается загрузить файл в сообщения (454 КБ разделенных в архиве по 90 КБ)
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Мост для использования в Excel возможностей регулярных выражений .Net
 
Наверно не все, но некоторые знают, что в VBA регулярные выражения поддерживаются за счет библиотеки Microsoft VBScript Regular Expressions 5.5 коротая, в свою очередь по сравнению с регулярными выражениями .Net (System.Text.RegularExpressions) имеет не такой большой набор возможностей.
Учитывая что по Microsoft VBScript Regular Expressions 5.5 сложно найти пособия и информацию Я решил разнообразить Excel новыми функциями работающими с регулярными выражениями .Net.

Функции включены в надстройку C# Regex.xll (загружается как обычная надстройка xls)
Всю информацию по написанию шаблонов (патернов) поиска можно найти в  библиотеке msdn
Надстройка содержит следующие UDF:
RegexMatch(Текст, Шаблон поиска) - выполняет поиск в тексте и возвращает первое найденное соответствие шаблону поиска
RegexMatches(Текст, Шаблон поиска, Разделитель) - выполняет поиск в тексте и возвращает все найденные соответствия шаблону поиска, разделенные Разделителем
RegexReplace(Текст, Шаблон поиска, Шаблон замены) - выполняет поиск и замену частей текста соответствующих шаблону поиска на шаблон замены (или просто на текст)
RegexReplacePlus(Текст, Шаблон поиска, Шаблон замены) - аналогичен RegexReplace, но в качестве Шаблонов Поиска и Замены выступают диапазоны ячеек, имеющих одинаковую размерность, при этом функция выполняет последовательную обработку текста по принципу: из диапазонов читаются (парно) ячейки с шаблонами Поиска и Замены соответствующие друг другу по позиции в массиве, выполняется обработка по типу RegexReplace полученное значение переходит к следующей итерации и все повторяется пока не закончатся значения из диапазонов.

Если кому интересно могу выложить более подробную информацию и примеры.

П.С.
1. в функциях не ограничены диапазоны по-этому вписывать в значения функций диапазоны D  :D  , E:E  и т.п. не стоит т.к. функция все равно пройдет все ячейки, а их свыше 1 млн. для одной итерации.
2. В шаблонах для замены на пустоту необходимо использовать знак апострофа '

Ссылка на надстройку http://1drv.ms/1zJgCPu
Изменено: amarf - 02.11.2016 16:01:16
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Замена фрагментов текста по регулярным выражениям
 
Давайте поступим, так - если у Вас есть разные формулировки со словом "blue" будем использовать регулярные выражения +) для этого необходимо описать синтаксис формулировок, а конкретнее пример: backpack-theone-blue имеет следующее описание - непрерывный текст (без пробелов) на латинице содержащий разделитель(и) в виде "-", слово "blue" может (или нет) содержаться в любой части этого текста, тогда вы можете использовать функцию типа:


Код
Function SimpleRegex(value As String) As String     
          
   SimpleRegex = rgxr(value, "([A-Za-z-]*blue[A-Za-z-]*)", "заменить на что то")  

End Function
П.С.  
Код
SimpleRegex = rgxr(value, "([A-Za-z-]*)(blue)([A-Za-z-]*)", "Bags|Цвет|$2" )
 - такая формулировка избавит Вас от написания цвета дважды, а если постараться можно сделать словарь и цикл перебора значений из словаря, заменим слово "blue" в функции на значение из словаря - это сократит Ваш код и сделает его более понятным
Изменено: amarf - 30.01.2015 16:19:05
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Пересчет книги и буфер обмена
 
Я не знаю, как работать с буфером обмена в VBA, если бы это был .Net я бы Вам рассказал - да и VBA это еще тот язык, гибкости очень мало, но зато во многих задачах это наиболее быстрый способ решения
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Замена фрагментов текста по регулярным выражениям
 
Наверно, так. Вы скажите Вы в том коде что привели выше разбираетесь, что к чему или знаний не хватает? Может лучше один раз подробно его описать?
Код
sss = Replace(sss, "backpack-theone-blue", "Bags|Цвет|blue" & Chr(10))

Так, то Вам Ёк-Мок дал хорошее решение, почему вы решили использовать другое?
Изменено: amarf - 30.01.2015 09:19:18
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Пересчет книги и буфер обмена
 
Я бы рекомендовал сделать Вашу функцию не через название листа, а с помощью диапазонов, тогда и не надо будет отслеживать изменения и делать пересчет, попробуйте может Вам подойдет такой вариант (это не промвариант, но при нужной доработке будет хорошая функция)

Код
Function wyYY(n As Double, List_name As Range) As Double

    
    Dim count(2, 80) As Double
    
    Dim i As Integer
    i = 2
    Do While List_name.Cells(i, 1) <> ""
        count(1, i - 1) = List_name.Cells(i, 1)
        count(2, i - 1) = List_name.Cells(i, 2)
        i = i + 1
    Loop
    i = 1
    Do While count(1, i) <> 0
        If n < count(1, i) Then
            GoTo qqqq
        End If
        i = i + 1
    Loop
qqqq:
    wyYY = count(2, i - 1)
End Function
 
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Макрос. Текст по столбцам при условии.
 
Цитата
Spaunrus пишет: пожалуйста, как последнему идиоту распишете, что значит каждая строчка
Вы знаете, там ни чего сильно сложного, но вот регулярные выражения это целый макроязык который вот так в двух словах не опишеш. Например у Вас в макросе следующий патерн [-A-Z\d]{2,} он означает, что надо найти любой фрагмент текста содержащий (в любом порядке) от 2 и более символов (оператор {2,}) бозначенных в [] скобках (A-Z обозначает весь латинский алфавит), но у Вас там что то корявое написано \d (любая цифра от 0 до 9) не пишется в скобках.


Alexander88 дал достаточно удачное решение и главное простое
Изменено: amarf - 29.01.2015 17:35:53
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Пересчет книги и буфер обмена
 
А файл вы можете скинуть для опытов +) ?
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Удаление части текста в ячейках всего столбца
 
Цитата
Сергей пишет: r.Pattern = "[а-я]{2,3}\.+ "
Вы таким образом можете чего лишнего удалить - сам работаю с адресами и таким вот образом не стал бы делать (есть опыт), при этом регулярки намного медленнее чем простые замены.
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Создание архива в Excel
 
Цитата
Игорь пишет: как в одной строке таблицы АРХИВ хранить несколько значений поля «программы подготовки»
это можно реализовать с помощью простого макроса, изменения принципов разметки документа в Ворде и дополнительной таблицы с видами программам подготовки
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Цикл для колонки с выражением RegExp и разбивка строки
 
Я там чуток накосячил замените функцию GGG вот на эту иначе ячейки в которых с начало идет текст а потом даты не будут правильно высчитываться

Код
Function GGG(value As String) As String
        Dim sss As String
         sss = Replace(value, Chr(10), " ")
         sss = rgxr(sss, "(\d+\.\d+\.)\W(\d+\.\d+\.)", "")
         sss = rgxr(sss, "\s+", " ")
         sss = rgxr(sss, "(^\s+)|(\s+$)", "")
        GGG = sss
End Function
 
Удачи Вам в ваших начинаниях.
Изменено: amarf - 29.01.2015 14:56:30
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Цикл для колонки с выражением RegExp и разбивка строки
 
Вот файл - поменял патерны поиска и переименовал функцию - в желтых ячейках втавил для проверки результата, используйте аналогично
В следующий раз описывайте условия задачи более точно !!!
Изменено: amarf - 29.01.2015 14:46:06
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Цикл для колонки с выражением RegExp и разбивка строки
 
Просто вставте весь код из моего сообщения в модуль, потом можете использовать формулу или сами создать цикл перебора ячеек в теле которого выполнять соответствующую функцию

Код
Cells(i,3) = DDDD(Cells(i,1))  
Cells(i,4) = DDDD1(Cells(i,1))
Код
  
П.С. К сожалению у Вас не для всех значений будет работать патерн реджекса т.к. судя по данным (ячейкам с данными в файле) Вы не уточнили полные условия задачи
Изменено: amarf - 29.01.2015 14:16:01
Необходимо не только знать, но и уметь использовать это знание, ведь самые гениальные решения наиболее просты
Страницы: 1 2 След.
Loading...