1

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

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

3 ответа3

3

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

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

  1. Перейдите в Инструменты -> Макросы -> Организовать макросы -> Libreoffice Basic;
  2. Выберите Module1;
  3. Нажмите изменить;
  4. Введите код функции, например:
Function Area(width, height)
    Area = width * height
End Function

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

РЕДАКТИРОВАТЬ

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

1

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

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

(с фиксированными значениями 30 и 19 ), просто замените это на

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

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

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

0

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

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

= Если (MOD (A2,30)= 19,1,0)

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .