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

Страницы: 1 2 След.
Выравнивание аминокислотных последовательностей
 
Опишите, пожалуйста, подробнее - какая версия надстройки, что в ней требуется сделать, куда что вписать, что нажать, чтобы у всех был рабочий воспроизводимый пример её работы.

UPD. Судя по всему эта программа просто сохраняет ваши кислоты в FASTA-формате в файл "C:\ProgramData\SelectionAnalysis\protein" и затем вы можете воспроизвести всю операцию по сути с помощью
Код
LoadProteins "C:\ProgramData\SelectionAnalysis\protein"
. Наверное, самым простым способом для упрощения было бы не создавать функцию (тогда всю логику из ячеек нужно переписать в неё), а чтобы из выбранных вами ячеек данные сохранялись в файл, вызывался LoadProteins, а потом с листа Aligned последовательности бы копировались на место / рядом с изначальными последовательностями.
Изменено: Andrej730 - 13.10.2023 18:58:21
Быстрая смена границ массива, Fast change the Bounds of Array
 
Цитата
Jack Famous написал:
я имею ввиду, как  без пересбора в новый массив  (или быстрее, чем в обычном цикле) сделать из  arr( 5 ,3)  →  arr( 2 ,3)

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

Цитата
Preserve Optional. Keyword used to preserve the data in an existing array when you change the size of the last dimension.

Первое, что пришло на ум в таком случае, - это транспонировать, изменить второе измерение и транспонировать назад. Поискал в интернете - люди в принципе так и делают, ниже есть пример.
Ещё нашёл вариант, что можно определять двумерный массив не как двумерный массив R x C, а как массив массивов - то есть массив на R, содержащий в себе массивы на C элементов. Мне кажется, так даже удобнее и быстрее - в случае двойного транспонирования + Redim Preserve VBA где-то под капотом трижды перекопирует один и тот же массив, а в варианте массива массивов это произойдёт по идее только 1 раз при Redim Preserve. Но придётся обращаться к элементам массива немного по-другому - вместо (r, c) -> ®©.

Код
Sub tranpose_test()
    Dim arr As Variant
    r = 2
    c = 3
    ReDim arr(1 To r, 1 To c) ' 2 x 3
    arr = Application.Transpose(arr) ' 3 x 2
    ReDim Preserve arr(1 To c, 1 To r + 2) ' 3 x 5
    arr = Application.Transpose(arr) ' 5 x 3
End Sub

Sub array_of_arrays()
    Dim outer
    outer = Array(Array(1, 2), Array(3, 4)) ' 2 x 2
    ReDim Preserve outer(1 To 3) ' 2 x 2 + 1 x 1
    outer(3) = Array(5, 6) ' 3 x 2
    Debug.Print (outer(3)(1)) ' > 6
End Sub

PS Вот тут есть ещё примеры и больше информации.
Изменено: Andrej730 - 15.10.2022 19:26:53
Быстрая смена границ массива, Fast change the Bounds of Array
 
Цитата
Jack Famous написал:
А усекание "строк" (1ая размерность), определенных с запасом в двумерном массиве? Сейчас я просто считаю, сколько задействовано и выгружаю только эту часть массива, но всё же интересно...

Можете пример дать? 🤔🤔
При предпросмотре сообщения с цитированием пропадает ссылка на автора
 
Заметил, что при предпросмотре сообщения с цитированием пропадает ссылка на автора цитаты. Это баг?

До предпросмотра (до нажатия кнопки "Просмотр"):


После предпросмотра:
Изменено: Andrej730 - 15.10.2022 07:17:42
Поиск дубликатов
 
Цитата
написал:
Здравствуйте! Подскажите как найти дубликаты емайл в диапазоне дат. В PQ удалось только найти общее количество повторений по адресам, на большее ума не хватило. Хотелось бы в сводной, в фильтре дат указывать нужный диапазон и получать какие адреса в этом диапазоне повторяются.  

А что вы имеете ввиду под "найти дубликаты"? Чтобы в сводной таблице отображалось количество адресов, которые встречаются в текущем выбранном диапазоне более 1 раза?

Если нужно видеть не количество дубликатов, а видеть какие адреса повторяются, то достаточно просто вывести поле "email" в значения, чтобы считалось их количество и сортировать таблицу по убыванию этого количества. Все email с количеством больше 1 имеют дубликаты.

Быстрая смена границ массива, Fast change the Bounds of Array
 
Попробовал через redim preserve - значения сохраняются (в комментариях указал результат, который выводится). Это не оно?)
Код
Sub pprint(arr)
    pretty_string = ""
    For i = LBound(arr) To UBound(arr)
        pretty_string = pretty_string & i & ":" & arr(i) & ", "
    Next i
    Debug.Print (pretty_string)
End Sub

Sub Test()
    Dim arr As Variant
    
    ReDim arr(0 To 4) As Byte
    For i = 0 To 4
        arr(i) = i
    Next
    pprint (arr) ' 0:0, 1:1, 2:2, 3:3, 4:4,
    
    ReDim Preserve arr(1 To 5)
    pprint (arr) ' 1:0, 2:1, 3:2, 4:3, 5:4,
End Sub
VBA. Использование функции в качестве переменной, VBA. Use Function As Variable
 
Цитата
написал:
ну мне интересен этот момент, если честно)))Дайте несколько ссылок на VBA-реализацию, пожалуйста…Вспомнил пару вопросов про массивы - сейчас создам тему)
Видел что-то подобное здесь, здесь и здесь.

Пример какой-то такой (если система не 64х битная, то FillMemory объявляется по-другому - пример есть по первой ссылке выше).
Код
Private Declare PtrSafe Sub FillMemory Lib "kernel32" Alias "RtlFillMemory" (Destination As Any, ByVal Length As Long, ByVal Fill As Byte)

Sub StuffBArr()
    ' заполняем весь одномерный массив цифрой 13
    Dim i(0 To 39) As Byte
    FillMemory i(0), 40, 13
    
    ' заполняем 5-й элемент массива цифрой 13
    Dim k(0 To 39) As Byte
    FillMemory k(5), 1, 13
    
    ' заполняем весь трёхмерный массив цифрой 13
    Dim j(1 To 2, 5 To 29, 2 To 6) As Byte
    FillMemory j(1, 5, 2), 2 * 25 * 5, 13
End Sub


ВПР+ЛЕВСИМВ ошибка #Н/Д, в чём может быть причина??
 
Цитата
написал:
Спасибо вам большое! Теперь то, что нужно и коды определяет корректно! Единственно в пустых ячейках до вставки билета как доработать формулу, чтобы не было ошибки #ЗНАЧ!
Оберните всю конструкцию ещё раз в ЕСЛИОШИБКА - например, вот так.
Код
ЕСЛИОШИБКА(ЕСЛИОШИБКА(ВПР(ЛЕВСИМВ(A3;3);$G$2:$H$193;2;0);ВПР(ЗНАЧЕН(ЛЕВСИМВ(A3;3));$G$2:$H$193;2;0));"-")
VBA. Использование функции в качестве переменной, VBA. Use Function As Variable
 
Цитата
написал:
Andrej730, благодарю! Интересная цепочка, конечно))) непрактично, но в качестве исследования - отлично  
Join  привередливый к данным - потому так и не получается     Вот так можно

Я ещё в интернете видел вариант, в котором элементы массива заполняются через FillMemory, где идёт запись напрямую в память и нужно указывать размер записываемого значения в байтах, но это совсем не для слабонервных, такое лучше в приличном обществе не показывать )
Номер последнего столбца с положительным числом, Вернуть номер последнего столбца с положительным числом, в строке с ограниченным количеством столбцов
 
Цитата
написал:
А можно переделать эту формулу =ПРОСМОТР(;-1/E4:AI4;E$1:AI$1) чтобы она возвращала номер столбца с ПЕРВЫМ положительным числом?
Так формула ниже из вашего файла это же и делает.
Код
=ПОИСКПОЗ(;ИНДЕКС(-(E4:AI4<=0););)
VBA. Использование функции в качестве переменной, VBA. Use Function As Variable
 
Ещё сейчас возникла идея сделать это через дополнительную функцию, но что-то выдаёт ошибку "Invalid procedure call or argument (Error 5)".

Код:
Код
Sub assign_array_element(ByRef arr As Variant, value_index, value)
    arr(value_index) = value
End Sub

Sub ss()
    Debug.Print Join(ff, vbLf)
End Sub
 
Function ff() As Variant()
    ReDim ff(1 To 2)
    Call assign_array_element(ff, 1, 11)
    Call assign_array_element(ff, 2, 22)
End Function
ВПР+ЛЕВСИМВ ошибка #Н/Д, в чём может быть причина??
 
У вас ошибка связана с тем, что ЛЕВСИМВ(A3;3) возвращает код в текстовом формате (даже если он состоит полностью из цифр), а в таблице кодов справа подобные цифровые коды имеют числовой формат - из-за несоответствия форматов ВПР не находит совпадение и выдаёт ошибку.

Для решения нужно либо учесть перевод в числовой формат в формуле, как предложил Ігор Гончаренко, либо перевести все коды в текстовый формат (для этого можно сцепить коды с пустой строкой по типу =G2 & ""). Но вообще перевод в числовой формат в формуле звучит надёжнее.
Изменено: Andrej730 - 14.10.2022 05:24:55
Вывод числа из середины произвольного текста
 
Мгновенное заполнение
VBA. Использование функции в качестве переменной, VBA. Use Function As Variable
 
А в чём именно цель решения без дополнительных присвоений массивов?
Если не хочется один и тот же массив держать в памяти дважды, то можно создавать его перед вызовом процедуры и передавать в процедуру ссылку на него, а там уже его заполнять. Таким образом он будет фигурировать в памяти только единожды.
не удалось загрузить расписание на заданный диапазон дат excel
 
Чтобы разобраться в проблеме нужно погружаться в сам макрос - желательно пройтись по шагам и проверить, какой ответ даёт сайт в ответ на запрос из макроса. Просто так по общему описанию получить дельный ответ на ваш вопрос не получится.
Изменено: Andrej730 - 13.10.2022 09:53:33
VBA. Использование функции в качестве переменной, VBA. Use Function As Variable
 
Текст ошибки:
Код
---------------------------
Microsoft Visual Basic for Applications
---------------------------
Compile error:

Function call on left-hand side of assignment must return Variant or Object
---------------------------
ОК   Справка   
---------------------------

Судя по ошибке, которую выдаёт VBA, - язык считает ff(1) за рекурсивный вызов функции, а не вызов 1 элемента массива.
Значит, проблему можно решить используя какой-нибудь другой способ назначения элементов массива. Например, через
Код
ff = Array(11, 22)

Но в этом случае массив будет начинаться с 0 элемента, а не с 1, как у вас, если это имеет значение.
Возможно, есть какой-то способ сдвинуть массив для решения или какие-то другие способы назначения элементов.
VBA. Использование функции в качестве переменной, VBA. Use Function As Variable
 
Попробуйте вот так:
Код
' As Array
Sub ss()
    Debug.Print Join(ff, vbLf)
End Sub

Function ff() As Variant()
    Dim temp_arr As Variant
    ReDim temp_arr(1 To 2)
    temp_arr(1) = 11
    temp_arr(2) = 22
    
    ff = temp_arr
End Function
Изменено: Andrej730 - 13.10.2022 09:19:31
Переход из эксель на страницу пдф,номер станицы задан в ячейке эксель
 
Цитата
написал:
Цитата
написал:
Какая программа должна открываться для просмотра pdf?
пока открываю хромом, какой бесплатный ридер порекомендуете? Работал на 3 мониках проблемы не было, сейчас с ноутом, все время нужно пдф скроллить, переключаться между доками,изматывает. Кое что из кода нагугил, попозже разберусь, от этого отталкиваться буду. Представление такое- есть папка на рабочем столе, содержащая пдф и эксель, оба файла открыты для работы, можно в коде прописать не конкретную папку ( название меняется) и не конкретный файл пдф (тоже меняется) а обратиться к активным в данный момент экселю и активному пдф, находящемуся в той же папке?
в эксель 3 столбца: текст,номер страницы,( который редачится с каждым новым файлом пдф ), ссылка на  пдф страницу под номером,взятым из предыдущего столбца.
Тогда вам нужен макрос, который выведет в excel пути до всех pdf-файлов в текущей папке, где находится excel-файл, а дальше сделать нужные вам ссылки по примеру выше.
Переход из эксель на страницу пдф,номер станицы задан в ячейке эксель
 
Цитата
написал:
Цитата
ПРОИЗВЕД написал:
Хотелось бы небольшой автоматизации.
действительно все зависит от того где файлы и чем просматриваются.
например есть  стандартный метод  но он требует размещения на WEB ресурсе.
Необязательно размещать на web-ресурсе, достаточно вывести макросом в excel пути до pdf-файлов и сгенерировать из них ссылки по типу "file:///C:/document.pdf#page=5", которые откроются в браузере на нужной странице.
Переход из эксель на страницу пдф,номер станицы задан в ячейке эксель
 
Какая программа должна открываться для просмотра pdf?
Динамическая смена ячекий при условном форматировании в гугл таблицах
 
Вы точно указали правильные диапазоны? Сейчас он применяется к ячейке H5, а не H3.
Если я правильно понял, то вы хотите протянуть его на диапазон H5:AJ5, но условное форматирование не срабатывает, так как формула УФ тоже смещается.
То есть для ячейки I5 формула из-за смещения уже будет считаться как
Код
IFS(I3>=E5; I3<=F5)
Для решения вам нужно корректно закрепить столбцы и желательно ещё и строки, так как в будущем таблица, скорее всего, у вас будет расти вниз тоже.
Как-то так:
Код
=ifs(H$3>=$D5;H$3<=$E5)
Расчет расстояния между населенными пунктами VBA, Есть макрос который рассчитывает расстояние между двумя населенными пунктами, как сделать чтобы он вычислил расстояние по всей БД
 
Цитата
написал:
У меня 11 ишак и все работает как надо
Видео с правкой кода  здесь .
Пробовал с аналогичными изменениями на IE11, но выдаёт ошибку, что скидывал выше, - может, от интернета ещё зависит.
Расчет расстояния между населенными пунктами VBA, Есть макрос который рассчитывает расстояние между двумя населенными пунктами, как сделать чтобы он вычислил расстояние по всей БД
 
Ушло какое-то время на дебаг, но я выявил проблему - судя по всему из-за древности Internet Explorer, который используется в качестве браузера, или в качестве защиты сайт иногда выдаёт ошибку с картинки ниже. Поэтому я добавил в макрос, чтобы он в случае ошибки пробовал выгрузить данные повторно, пока не получится.

Также добавил несколько принудительных ожиданий - при заходе на страницу, при клике на кнопку, при перезапуске, чтобы было надёжнее. В случае если нужно подгрузить очень много городов, то можно попробовать снизить время ожидания в коде (за это отвечают команды типа Sleep(5000) = ожидание на 5000 милисекунд).

Год недели, Как получить год в наименовании недели
 
Цитата
написал:
Я же написал, НОМНЕДЕЛИ.ISO устраивает.
=НОМНЕДЕЛИ.ISO(44562) = 52
Можно в таком случае найти начало недели (через вычитание дня недели) и взять год оттуда.
Код
= ГОД(A1-ДЕНЬНЕД(A1;3))&"W"&НОМНЕДЕЛИ.ISO(A1)

Результат для 01.01.2022: "2021W52"
Год недели, Как получить год в наименовании недели
 
А какой метод определения номера недели вы обычно используете?
Например, 01.01.2022 у вас считается 1 неделей или всё ещё 52?
Рассчитать формулы без знака "="
 
Тогда можно добавить в файл функцию вроде этой, у Evaluate в VBA больше возможностей.
Код
Function ev(r As Range) As Variant
    ev = Evaluate(r.Value)
End Function
Ещё есть вариант написать макрос, чтобы быстро вставлять рассчитанную формулу как значение и заменять в ней "=" на "=", в таком случае она сразу рассчитается.
Рассчитать формулы без знака "="
 
Кажется, понял, что вам нужно. То, что вы ищете - это функция вычислить, в неё вы можете передать вашу формулу без "равно" в начале, и она её вычислит. Но с ней есть особенность - её нельзя просто так использовать в обычных ячейках, для её использования нужно создать именованный диапазон (Формулы -> Диспетчер имён -> Создать) и в нём в графе "Диапазон" вписать вашу формулу. Во вложении есть пример. Важный момент - файл с такой функции обязательно должен поддерживать макросы.
Возвращать значение в столбец "Цена" в соответствии с "Кодом" и "Периодом"
 
Максим В., заметил ошибку - в начале "данные!H136" без абсолютной ссылки по строкам. При этом ещё этот вариант не сработает для последней строки в списке - будет выдавать ЗНАЧ, т.к. конструкция "МИН(ЕСЛИ...))" будет выдавать "-1". Попробовал заменить ИНДЕКС(данные!G$2:G$136;МИН(ЕСЛИ(...))) на ЕСЛИОШИБКА(ИНДЕКС(данные!G$2:G$136;МИН(ЕСЛИ()));данные!G$136), что должно было бы помочь, но судя по всему ЕСЛИОШИБКА не способна возвращать ссылку на ячейку, а только значение, поэтому формула тоже не работает.

В итоге немного доработал, чтобы формула работала для всех случаев (наверное, можно придумать какое-нибудь более элегантное решение):

Код
=ИНДЕКС(
    ИНДЕКС(данные!H$2:H$136;ПОИСКПОЗ(A3;данные!C$2:C$136;)):данные!H$136;
    ПОИСКПОЗ(I3;
        ИНДЕКС(данные!G$2:G$136;ПОИСКПОЗ(A3;данные!C$2:C$136;)):ИНДЕКС(
            данные!G$2:G$136;
            1/ЕСЛИОШИБКА(
                1/(1/МИН(ЕСЛИ(
                    ПОИСКПОЗ(A$3:A$8;данные!C$2:C$136;)>ПОИСКПОЗ(A3;данные!C$2:C$136;);
                    ПОИСКПОЗ(A$3:A$8;данные!C$2:C$136;))
                ));
                СТРОКА(данные!G$136) - СТРОКА(данные!G$2) + 1)
        );
    )
)

Изменено: Andrej730 - 29.06.2020 13:12:27
Возвращать значение в столбец "Цена" в соответствии с "Кодом" и "Периодом"
 
Другой вариант - также нужно, чтобы столбец с кодом был заполнен для всех строк (нужно вводить с ctrl+shift+enter):
Код
=ИНДЕКС(данные!$H$2:$H$136;
    ПОИСКПОЗ(A4&I4;данные!$C$2:$C$136&данные!$G$2:$G$136;0))
Функции БС и ПЛТ с разными периодами для начисления процентов и платежей
 
Михаил Л,да, конечно. Проценты после начисления попадают в основную сумму вклада, а затем по ним также должны начисляться проценты.
Страницы: 1 2 След.
Наверх