Как написать функцию один раз и обновить ее во многих ячейках?

часто бывает так, что я пишу функцию в одну ячейку, а затем копирую ее во многие ячейки. Затем копии ссылаются на собственные правильные строки. Но если я изменю функцию в первой ячейке, копии останутся без изменений. Я должен заменить все экземпляры новые. Это copy-paste Программирование, когда то, что я действительно хочу, чтобы написать функцию в одном месте и вызов функции как если бы это была копия из множества подчиненных ячеек.

Есть техника для достижения этого, или я надеюсь на слишком много из модели программирования электронных таблиц?

11
задан polymath69
01.01.2023 8:03 Количество просмотров материала 2760
Распечатать страницу

3 ответа

вы можете написать свою собственную функцию, используя StarBasic/LibreOffice Basic или Python. Это очень просто и позволяет обновлять функцию, которая влияет на все ячейки, где используется формула.

как рассказали здесь (вежливость Louic в блоге), просто сделайте следующее:

  1. перейдите в меню Сервис - > макросы - > упорядочить макросы - > Libreoffice Basic;
  2. Выберите Module1;
  3. Нажмите кнопку Редактировать;
  4. введите код функции, для пример:
Function Area(width, height)
    Area = width * height
End Function

Теперь вы можете использовать =AREA(arg; arg2) в таблице. Если изменить способ вычисления результата, это повлияет на все вхождения =AREA().

EDIT

Если вы не хотите помещать макрос в центральное хранилище макросов вашей установки LO, вы можете сохранить его в файле ods. Таким образом, он доступен на другом компьютере. Для этого просто выберите текущий файл в качестве места для сохранения макроса при создание (Шаг 1 выше):

enter image description here

3
отвечен tohuwawohu 2023-01-02 15:51

простое решение без макросов: просто поместите аргументы переменных в отдельные ячейки. Поэтому вместо

=IF(MOD(A2,30)=19,Strings.$A,"")

(со значениями 30 и 19 исправлено), просто заменить на

=IF(MOD(A2,$E)=$E,Strings.$A,"")

и ставим значения 30 и 19 в ячейки E1 и E2 соответственно. Теперь, если вы измените E1 и / или E2, каждая формула будет использовать эти значения.

если есть определенные комбинации этих двух значений, которые вы должны применять часто, вы можете определить сценарии соответственно

1
отвечен tohuwawohu 2023-01-02 18:08

вы можете создать ячейку функции сравнения и ссылаться на нее из других функций.

Допустим, вы создаете эту функцию в A10, тогда A10 будет выглядеть так:

=if (MOD (A2, 30)=19,1,0)

теперь, если вы выполняете другую функцию в A11, обычно ваша функция выглядит так: =IF(MOD (A2,30)=19,Strings.$A$1,"")

теперь это будет выглядеть так: = if (A10=1,Strings.$A$1,"")

Если вам нужно изменить часть сравнения, вы изменяете A10, и он обновляется для всех ячеек, которые ссылаются на него.

0
отвечен LPChip 2023-01-02 20:25

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх