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

Страницы: 1
[ Закрыто] Пользовательская формула не выдает значение.
 
Здравствуйте! Подскажите, пожалуйста, а то я никак не могу понять:
Есть две таблицы Эксель (приложу их) и пользовательская формула, которую составил в VBA:+
Код
Function Переворачиватель_9000(массив_исх, последняя, текущая)
Dim индекс
Dim массив
Dim С
Dim СВ
Dim В
Dim ЮВ
Dim Ю
Dim ЮЗ
Dim З
Dim СЗ
Dim ПО
Dim ПР
Dim О
Dim Д
    Select Case TypeName(массив_исх)
    Case "Range"
        массив = массив_исх.Value
    Case "Variant()"
        массив = массив_исх
    End Select
индекс = WorksheetFunction.Index(массив, последняя.Row - текущая.Row + 1, 1)
С = " северном "
СВ = " северо-восточном "
В = " восточном "
ЮВ = " юго-восточном "
Ю = " южном "
ЮЗ = " юго-западном "
З = " западном "
СЗ = " северо-западном "
ПО = " по течению."
ПР = " против течения."
О = " от "
Д = " до "
    Переворачиватель_9000 = IIf(Replace(Replace(Replace(Replace(Replace(Replace(индекс, С, Ю), СВ, ЮЗ), В, З), ЮВ, СЗ), ПО, ПР), Д, О) = индекс, Replace(Replace(Replace(Replace(Replace(Replace(индекс, Ю, С), ЮЗ, СВ), З, В), СЗ, ЮВ), ПР, ПО), О, Д), Replace(Replace(Replace(Replace(Replace(Replace(индекс, С, Ю), СВ, ЮЗ), В, З), ЮВ, СЗ), ПО, ПР), Д, О))
    End Function
Нужно с этой формулой вставить значения в ячейки C18 и ниже в Аларь из Ныгда, массива C3-C21. Но при вводе аргументов мне выдает ошибку #ЗНАЧ. В общем, в строке ввода получается следующее:
=Переворачиватель_9000('[для ведомости Ныгда.xlsx]Лист1'!C$3:C$21;C$21;C3)
Причем делает он так вплоть до массива C6-C21.
Я уже с пол часа искренне не могу понять: что не так? В формулах есть еще одна - "Переворачиватель" - она попроще, но с ней та же самая проблема.

Буду признателен, если объясните: что тут не так?
Angels show up in the Strangest of places
Пропадают значения в пользовательской формуле, использующей данные другого файла.
 
Здравствуйте!
Данная проблема вытекает из прошлой моей темы: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=133191&...=
Однако суть другая.
Сегодня использовал написанную (не без Вашей помощи, за что еще раз спасибо) формулу для сортировки текстовых данных "снизу-вверх" и замене в них направлений сторон света на противоположные. Думаю, стоит еще раз ее воспроизвести:
Код
Function Переворачиватель_для_описания(массив, последняя, текущая)
     
Переворачиватель_для_описания = IIf(Replace(Replace(Replace(Replace(Replace(WorksheetFunction.Index(массив, последняя.Row - текущая.Row + 1), " северном ", " южном "), " северо-восточном ", " юго-западном "), " восточном ", " западном "), " юго-восточном ", " северо-западном "), " по течению.", " против течения.") = WorksheetFunction.Index(массив, последняя.Row - текущая.Row + 1), Replace(Replace(Replace(Replace(Replace(WorksheetFunction.Index(массив, последняя.Row - текущая.Row + 1), " южном ", " северном "), " юго-западном ", " северо-восточном "), " западном ", " восточном "), " северо-западном ", " юго-восточном "), " против течения.", " по течению."), Replace(Replace(Replace(Replace(Replace(WorksheetFunction.Index(массив, последняя.Row - текущая.Row + 1), " северном ", " южном "), " северо-восточном ", " юго-западном "), " восточном ", " западном "), " юго-восточном ", " северо-западном "), " по течению.", " против течения."))
 
End Function
Аргументы "массив", "последняя" и "текущая" я беру из другого файла exel (поскольку Exel позволяет это делать, ну и чтобы оба файла обновлялись сразу). Но есть... Не то, чтобы проблема... Скорее неприятный баг:
Для условности назову файл-источник, из которого беру значения аргументов для формулы - "X", а файл, в который вбиваю формулу - "У".
Короче: выбирать значения аргументов в формулу для файла "У" из файла "Х" я могу, только когда файл "Х" непосредственно открыт. После ввода аргументов я получаю ожидаемый результат в виде замененного текста файла "Х".
Если я потом закрываю файл "Х", а файл "У" оставляю открытым - содержимое ячеек с формулой в файле "У" не меняется.
Если же я закрою файл "У", а потом снова открою его - в ячейках с формулой вместо значений выдается ошибка #ЗНАЧ. Проверяю аргументы - все в них правильно, даже путь указан к файлу.
Если же я открываю дальше файл "Х" - в файл "У" возвращаются значения!
То есть: для комфортной работы и вывода результатов расчета формулы, мне ВСЕГДА необходимо держать открытыми ОБА файла?
Просто при использований "внутриэкселевских" функций (тот же ИНДЕКС, который я использую и в своей формуле) при тех же условиях данная ошибка не возникает вовсе.

С чем эта ошибка связана? Можно-ли это как-то исправить?

Использую Exel 2016.

Заранее благодарю!
Angels show up in the Strangest of places
Как создать в VBA формулу с функциями Exel
 
Здравствуйте! Помогите, пожалуйста:
Сделал для работы формулу, которая будет выводить "снизу-вверх" выделенные строки и заменять в них определенные слова (направления света), записал ее себе в текстовом виде, чтобы не забыть и вставлять в файлы, если пригодится:
=ЕСЛИ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ИНДЕКС(Область которую надо копировать и переворачивать;СТРОКА(последняя строка в области ФИКСИРОВАННАЯ ПО СТРОКЕ)-СТРОКА(строка в очереди «сверху-вниз» НЕФИКСИРОВАННАЯ)+1);" северном ";" южном ");" северо-восточном ";" юго-западном ");" восточном ";" западном ");" юго-восточном ";" северо-западном ");" по течению.";" против течения.")= ИНДЕКС(Область, которую надо копировать и переворачивать;СТРОКА(последняя строка в области ФИКСИРОВАННАЯ ПО СТРОКЕ)-СТРОКА(строка в очереди «сверху-вниз» НЕФИКСИРОВАННАЯ)+1);ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ИНДЕКС(Область в другом файле, которую надо копировать и переворачивать;СТРОКА(последняя строка в области ФИКСИРОВАННАЯ ПО СТРОКЕ)-СТРОКА(строка в очереди «сверху-вниз» НЕФИКСИРОВАННАЯ)+1);" южном ";" северном ");" юго-западном ";" северо-восточном ");" западном ";" восточном ");" северо-западном ";" юго-восточном ");" против течения.";" по течению.");ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ИНДЕКС(Область, которую надо копировать и переворачивать;СТРОКА(последняя строка в области ФИКСИРОВАННАЯ ПО СТРОКЕ)-СТРОКА(строка в очереди «сверху-вниз» НЕФИКСИРОВАННАЯ)+1);" северном ";" южном ");" северо-восточном ";" юго-западном ");" восточном ";" западном ");" юго-восточном ";" северо-западном "))

Но, как можно заметить, удобства в использовании в ней не предусмотрено =) Несколько раз приходится вставлять одни и те же области в места, которые выделил голубым цветом.
Решил, что наверное в exel есть возможность записать эту формулу как "шаблон", а после просто указать необходимые области для вывода результата, как это работает с обычными стоковыми формулами.
Хотел для этого использовать VBA, прочитал инструкцию по созданию пользовательских формул. Однако там в качестве примеров используются обычные рассчеты, типа сложить/вычесть/разделить и т.д. А у меня же используются именно Екселевские команды.

Собственно, вопрос таков: как в VBA вводить формулы, которые уже есть в exel? Или же есть какие-то более простые способы сохранить данную формулу в программе для дальнейшего использования в других файлах?

Заранее благодарю за советы! =)
Изменено: Дмитрий Величко - 30.09.2020 13:58:35
Angels show up in the Strangest of places
Страницы: 1
Наверх