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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 След.
Генератор линейных комбинаций
 
Огонь! Пожар я бы сказал. Дай бог тебе здоровья мил человек. Слааааавааааа МатросНаЗебре, слааааааваааааа МатросНаЗебре!
(Sanja - тебе поклон за неравнодушие).
Это самый лучший генератор линейных комбинаций за всю историю существования экселя! (Правда совершенству нет предела, и в данном случае, если комбинаций больше чем строк на листе экселя, приходится разбивать массив данных. Но, это совсем другая история).
Генератор линейных комбинаций
 
Запускаю эксель, заполняю несколько ячеек в двух столбцах, выделяю их и нажимаю макрос. Выскакивает ошибка
Run-time error 91. Object variable with block variable not set
Нажимаю Debag желтым цветом выделяется строчка Set rr = Intersect(rr, ActiveSheet.UsedRange) :(
Не может это быть связано с функцией CloseEmptyWb? Она ведь закрывает все книги и мои данные (пару столбцов с заполненными ячейками) пропадают. Таким образом макрос не видит ячейки из которых производятся линейные комбинации (мысли дилетанта в VBA). Я ХЗ, честно.
Изменено: dim284 - 19.06.2025 12:11:50
Генератор линейных комбинаций
 
Огонь! Всё работает. Причем можно разместить в любом месте листа и все также сгенерируется. При этом выделять нужно весь массив ячеек из которых нужно создать линейные комбинации (а можно только часть, что очень удобно).
Одно только не пойму, если вызывать из надстройки то ругается так
Can't execute code in break mode
и вот на эту строчку
Set rr = Intersect(rr, ActiveSheet.UsedRange)
Генератор линейных комбинаций
 
У меня эксель ругается на строчку
N = UBound(arr, 2)
В чем может быть дело?
Sanja числа в строке 1 показывают скольку ячеек заполненно ниже в этом же столбце. Это потом используется в макросе в Const m&
Если можно будет прописывать только эти числа и не лезть в код, то уже будет лучше.
Изменено: dim284 - 19.06.2025 11:30:46
Генератор линейных комбинаций
 
На просторах интернета давно нашел вот такой вот замечательный генератор линейных комбинаций (код в файле примере). Работает быстро, результат отличный и все вроде хорошо. Но каждый раз приходиться делать две вещи, во-первых, в первой строке указывать количесвто заполненных ячеек в этом столбце, а во-вторых, каждый раз приходиться открывать модуль с кодом и в коде указывать эти значени в константах m и n, что конечно надоедает изрядно, т.к. макросом пользуюсь часто. Можно ли поправить код и отвязать от этих значений, наверное чтобы эти числа сами высчитывались?
Функция поиска всех позиций вхождения подстроки в строку, с использованием регулярных выражений.
 
Я вам ещё и не ту функцию в пример скинул, ну я вообще молодец, с отрицательным знаком. Нужна была эта:
Код
    Function Ocurrence(v_Source As String, v_Pattern As String, OcurrenceNumber As Long) As Long
      Dim v_RegExp As Object
      Dim v_Matches As Object
      Set v_RegExp = CreateObject("vbscript.regexp")
      
      With v_RegExp
        .pattern = v_Pattern
        .Global = True
        Set v_Matches = .Execute(v_Source)
        If OcurrenceNumber > 0 And OcurrenceNumber <= v_Matches.Count Then
          Ocurrence = v_Matches(OcurrenceNumber - 1).FirstIndex + 1
        End If
      End With
    End Function
Всем спасибо! Sanja то что нужно, отдельный поклон!
Функция поиска всех позиций вхождения подстроки в строку, с использованием регулярных выражений.
 
Верно, пардон, из другого аналогичного примера взял. В общем ответ правильный в файле, на соответствующую строку задания, он такой:
10, 87, 141, 155, 162, 481, 540.
Функция поиска всех позиций вхождения подстроки в строку, с использованием регулярных выражений.
 
Вот, пожалуйста, ответ в самом файле-примере.
Функция поиска всех позиций вхождения подстроки в строку, с использованием регулярных выражений.
 
Немного не то.
Ответ получается такой: NNS, NVT, NGT, NKS, NTS, NGT, NGS
А нужен такой: 10, 23, 87, 162, 287, 481, 540
Функция поиска всех позиций вхождения подстроки в строку, с использованием регулярных выражений.
 
Всем добрый день! На просторах интернета нашел замечательную функцию Ocurrence (смотри прикрепленый файл). Она по регулярнолму выражению находит позицию вхождения подстроки в строку, причем третим аргументом можно задать порядковый номер вхождения. Вопрос: можно ли изменить эту функцию так, чтобы она возвращала все вхождения в одну ячейку, либо через  запятую + пробел, либо динамическим массивом? Может можно в третьем аргументе что-то поменять, либо четвертый аргумент добавить, в общем чтобы было удобно.
Изоэлектрическая точка
 
Спастбо БМВ! Да, действительно стало быстрее: при изненении 1700 на 1500 время расчетов сократилось, а также оно ещё уменьшилось с новыми формулами. Чуть-чуть правда время сократилось, но тем не менее. 1500 правда много, максимум pH=14, а поэтому можно оставить 1400, ни больше и не меньше. Правда формулы стали ещё более космическими.
Изоэлектрическая точка
 
Спасибо большое всем, а конкретно МатросНаЗебре и БМВ! Супер, доволен как слон, все работает как часы. Все функции мне хорошо знакомы, но это было не "вот так просто". Ухожу в закат наслаждаться результатом.
Код
=LET(z;"аминокислотная_последовательность";x;ДЛСТР(z);pH;ПОСЛЕД(1700)%;ПОИСКПОЗ(1=1;-1/(1+10^(3,65-pH))
+(ДЛСТР(ПОДСТАВИТЬ(z;"D";))-x)/(1+10^(3,9-pH))
+(ДЛСТР(ПОДСТАВИТЬ(z;"E";))-x)/(1+10^(4,07-pH))
+(ДЛСТР(ПОДСТАВИТЬ(z;"C";))-x)/(1+10^(8,18-pH))
+(ДЛСТР(ПОДСТАВИТЬ(z;"Y";))-x)/(1+10^(10,46-pH))
+(x-ДЛСТР(ПОДСТАВИТЬ(z;"H";)))/(1+10^(pH-6,04))
+1/(1+10^(pH-8,2))
+(x-ДЛСТР(ПОДСТАВИТЬ(z;"K";)))/(1+10^(pH-10,54))
+(x-ДЛСТР(ПОДСТАВИТЬ(z;"R";)))/(1+10^(pH-12,48))<=0;)%)
Изменено: dim284 - 20.02.2025 11:27:43
Изоэлектрическая точка
 
МатросНаЗебре, спасибо за помощь! А можно немного по другому: нужно чтобы функция брала на вход не pH, а значение NQ, а возвращала как раз pH (это и есть изоэлектрическая точка (pI). В итоге функция должна вернуть число 5,85.
Было бы хорошо если остался всего один аргумент, только последовательность, остальное лишнее.
Изменено: dim284 - 18.02.2025 17:10:02
Изоэлектрическая точка
 
Всем добрый день! Пытаюсь сделать пользовательскую функцию для расчета изоэлектрической точки. Еле как нашел правильный способ расчетов, он здесь:
http://isoelectric.org/www_old/files/practise-isoelectric-point.html
Проблема первая, основная, как вычислить последний шаг. Нужно увеличивать pH на значение 0.01, пока значение NQ не станет <= 0.
Проблема вторая, второстепенная, тут проще, закодировать в пользовательскую функцию.
Тут люди поумнее меня, может кто поможет.
Как упорядочить порядок групп в двух надстройках на одной вкладке
 
Цитата
написал:
Каков смысл?
Ну, во-первых, спортивный интерес, а во-вторых, у меня есть много числовых данных, которые разбиты на несколько модулей и не хочется "засорять" ими основную надстройку в которой храняться мои макросы с функциями. Можно конечно эти данные поместить в отдельную надстройку и не писать вообще никакого кода XML, все прекрасно работает, но хочется порядка какого-то.
Хорошо что название надстройки и название файла этой надстройки никак не связаны, поэтому название файла(ов) можно делать какие угодно и теперь в правильном порядке.
Как упорядочить порядок групп в двух надстройках на одной вкладке
 
Спасибо большое gling! Все получилось. Нужно было как раз из двух надстроек расположить в правильном порядке группы. Переименование по алфавиту самих файлов надстроек помогло. Чудеса конечно, я долго мучался с insertAfterQ в элементах tab и group, думал где-то тут должен быть правильный ответ, но ничего не получилось (может конечно что-то делал не правильно). Все равно вопросики остались: правильно ли я понимаю, что если в надстройке_1 имеются группы 1 и 4, а в надстройке_2 группы 2 и 3, то можно получить либо расположение групп на вкладке 1-4-2-3, либо 2-3-1-4? Принудительно расположить их в правильном порядке не получиться. Другими словами, как группы бы не назывались, и сколько бы их ни было, сначало будут идти все группы из одной надстройки, а потом из другой.
Как упорядочить порядок групп в двух надстройках на одной вкладке
 
Уважаемые форумчане, помогите пожалуйста. Сделал я значит две надстройки, пример прикладываю. Одна называется Надстройка_1, вторая - Надстройка_2. С горем пополам разобрался как поместить их на одну ленту. В первой XML-код такой:
Код
<?xml version="1.0" standalone="yes"?>
<customUI   xmlns="http://schemas.microsoft.com/office/2009/07/customui&quot;
            xmlns:z="Моё пространство имен">
    <ribbon startFromScratch="false">
        <tabs>
            <tab idQ="z:Пространство_имен"  label="Надстройка_1">
                <group idQ="z:Группа_3" label="Группа_3">
                    <button id="Кнопка_3" label="Открыть3" imageMso="AppointmentColor10" onAction="Button3_onAction"/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>
Во второй код следующий:
Код
<?xml version="1.0" standalone="yes"?>
<customUI   xmlns="http://schemas.microsoft.com/office/2009/07/customui&quot;
            xmlns:x="Моё пространство имен">
    <ribbon startFromScratch="false">
        <tabs>
            <tab idQ="x:Пространство_имен" label="Надстройка_2">
                <group idQ="x:Группа_1" label="Группа_1">
                    <button id="Кнопка_1" label="Открыть1" imageMso="AppointmentColor4" onAction="Button3_onAction"/>
                </group>
                <group idQ="x:Группа_2" label="Группа_2">
                    <button id="Кнопка_2" label="Открыть2" imageMso="AppointmentColor2" onAction="Button3_onAction"/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>
Основной вопрос следующий: как сделать так, чтобы на вкладке группы шли по парядку - группа_1, затем группа_2, за ней группа_3? Сейчас они идут в таком порядке:группа_3, группа_1, группа_2.
Второстепенный вопрос: как управляется название группы на ленте? Сейчас имя на ленте именно "Надстройка_2", почему не "Надстройка_1"? Как сделать так, чтобы было заведомо нужное имя?
Извлечь из исходной таблицы столбцы с заданными номерами
 
Огромнейшее спасибо МатросНаЗебре!
Извлечь из исходной таблицы столбцы с заданными номерами
 
Есть таблица, например 4*4, нужно извлечь из нее определенные столбцы, например 1 и 3. Есть функция SelectCols, которая прекрасно это делает, но делает это если ссылаться на ячейки, например так =SelectCols(A2:E6;1;3). Однако если записать таблицу в функцию двумерного массива =Пример_массива_значений() и использовать эту функцию в формуле =SelectCols(Пример_массива_значений();1;3) то ничего не получается. Если это возможно, не мог бы кто-нибудь поправить код функции SelectCols. Пример прилагаю.
Вернуть заданное число знаков из строки текста, начиная с нескольких заданных позиций, аналог встроенной функции ПСТР (мульти_ПСТР)
 
ZVI огромное спасибо! Суперудобно! И даже на ячейку с цифрами сослаться во втором аргументе можно.
На мотив песни "Это не девочка":
Это не функция — это мечта
Я с такой как она-навсегда, хоть куда
Очень удобная, и я ей горжусь
Я в другую уже никогда не влюблюсь :)
Изменено: dim284 - 26.11.2024 10:27:23
Вернуть заданное число знаков из строки текста, начиная с нескольких заданных позиций, аналог встроенной функции ПСТР (мульти_ПСТР)
 
Смотрю на формулу написанную Тимофеев и с каждым разом она все больше мне нравиться. Рад чисел 2,5,10,55,100,120-123 можно легко преобразовать в нужный для этого формат (2:5:10:55:100:120:121:122:123) с помощью вот такой функции (давно нашел где-то в интернете):
Код
Function Развертывание_чисел(Txt As String) As String
' функция разбивает два числа через дефис на последовательность чисел
Dim I As Long
Dim j
     For Each j In Split(Txt, ",")
          If j Like "*-*" Then
               For I = Split(j, "-")(0) To Split(j, "-")(1)
                    Развертывание_чисел = Развертывание_чисел & ":" & I ' знак разделитель
               Next I
            Else
            Развертывание_чисел = Развертывание_чисел & ":" & j ' знак разделитель
            End If
     Next j
Развертывание_чисел = Mid$(Развертывание_чисел, 2)
End Function
Единственное что сейчас не пойму как в эту формулу передать эти числа. Вот так не работает:
=ОБЪЕДИНИТЬ("";0;ИНДЕКС(ПСТР(A1;ПОСЛЕД(ДЛСТР(A1));1);"{"&Развертывание_чисел()&"}"))
ИНДЕКС в аргументе номер_строки не воспринимает пользовательскую функцию, как ни старайся. Может можно это как-то обойти?
Вернуть заданное число знаков из строки текста, начиная с нескольких заданных позиций, аналог встроенной функции ПСТР (мульти_ПСТР)
 
Цитата
Вариант - аналог ПСТР в VBA Excel.
Хорошая функция, но не универсальная. Так если меньше количества знаков нужно вытащить то будет ошибка и на ячейку с числами тоже сослаться нельзя.
Тимофеева функция более универсальна. За попытку спасибо!
Вернуть заданное число знаков из строки текста, начиная с нескольких заданных позиций, аналог встроенной функции ПСТР (мульти_ПСТР)
 
В целом неплохой вариант, спасибо! Но длинноват конечно, каждый раз формулу не вспомнишь, только есть вызывать из модуля. А пользуюсь я частенько.
Вернуть заданное число знаков из строки текста, начиная с нескольких заданных позиций, аналог встроенной функции ПСТР (мульти_ПСТР)
 
Добрый день, уважаемые форумчане!
Не могли бы Вы написать небольшую пользовательскую функцию, аналогичную ПСТР, которая смогла бы возвращать заданное число знаков из строки текста, начиная с нескольких заданных позиций. Грубо говоря, если нужно получить символы из позиций 2,5,10,55,100,120-123, сейчас приходиться применять вот такую громоздкую конструкцию:
=ПСТР(A2;2;1)&ПСТР(A2;5;1)&ПСТР(A2;10;1)&ПСТР(A2;55;1)&ПСТР(A2;100;1)&ПСТР(A2;120;3)
а хотелось бы:
=SelectPosition(A1;2,5,10,55,100,120-123)
Или может можно это сделать как-то более просто штатными средствами, может я чего не понимаю.
Перекрывающиеся паттерны в регулярных выражениях
 
Цитата
написал:
Регулярки здесь могут помочь, но каковы мотивы, зачем Вам регулярки, если давно было готовое решение?
Решение пришло из сообщения 11 только в процессе общения здесь, с умными людьми и оно не идеальное: каждый раз придется создавать матрицу или хранить её (их) где-то в модуле. Гараздо всеже лучше вариант придложенный Дмитрий(The_Prist) Щербаков в 14-ом сообщении, за что ему низкий поклон. Здесь не надо хранить или создавать весовые матрицы, а просто пишем паттерн на определенную длину пептида (подстроки) и любуемся правильным ответом. Одна из целей этого поста была понять можно ли регулярными выражениями найти перекрывающиеся паттерны или нет, узнал - нет.
ZVI в "Реальный пример.xlsx" не все ответы в виде подстрок даны, Вы правильно заметили, проблема была в том, что регулярные выражения не находили то что нужно, потому что нужные мне подстроки были не первыми извлеченными паттернами, т.е. они перекрывались с извлеченными подстроками.
Всем спасибо!
Перекрывающиеся паттерны в регулярных выражениях
 
Цитата
они так не умеют.
ну хоть кто-то со мной согласился. Нет-нет, я только за VBA. Если у кого-то получиться к коду что-то дописать, чтобы он все-таки все подстроки выводил, я буду только благодарен. Даешь вторую жизнь регулярным выражениям!
Перекрывающиеся паттерны в регулярных выражениях
 
Перепроверил. У меня находятся
FFSLL; FALV; FSLL
интересненько. Паттерн =TestPattern(I15;"F.{2,3}[VL]";1)
Перекрывающиеся паттерны в регулярных выражениях
 
Хорошая функция, жаль что в этом одном примере не сработала. Получается что в строке FFSLLFALV находиться FFSLL; FALV; FSLL, но не находиться первая FFSL, которая также соответствует шаблону. Эх, такая функция пропадает.
Дмитрий, пытаетесь спасти регулярки, запрещенные приемчики применяете, на VBA  :)  
Перекрывающиеся паттерны в регулярных выражениях
 
Дмитрий, Вы правильно все понимаете - L отдельно, V отдельно, [VL] значит на одной позиции может стоять либо V либо L. Суть в том чтобы найти и FSLL и FSVV в строке FFSLV, которые соответствуют паттерну F.{2}[VL] (F, две любых, V или L).
Для тех, кто ещё не успел как я расстроиться, прикрепляю файл с задачкой.
Перекрывающиеся паттерны в регулярных выражениях
 
Регулярные выражения конечно сдулись, но эксель то победил :)
Ключевое слово позиционно-специфические весовые матрицы, в них каждая позиция имеет свой вес. Если мы составим вот такую простую матрицу (прикрепил) и зададим минимальный Score 2 в третьем аргументе функции из сообщения 31
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=162811&...
то, функция вернет нам все требуемые подстроки. Так как она шагает по одной позиции слева на права, а регулярка видимо от конца найденного паттерна.
Страницы: 1 2 3 4 5 6 7 8 9 10 11 След.
Наверх