Excel 2016 Array формула - PullRequest
       3

Excel 2016 Array формула

0 голосов
/ 30 мая 2018

У меня есть следующая формула в Excel (созданная мной в прошлом),

=IFERROR(INDEX(Tasks!$H$2:$H$65536;SMALL(IF(A2=Tasks!$A$2:$A$65536;ROW(Tasks!$A$2:$A$65536)-ROW(Tasks!$A$2)+1);ROW($1:$1)));"")

Формула работает, как я хотел, но в каждом месяце столбцы меняются, поэтому дляНапример, столбец «A» здесь может быть столбцом «C» в следующем месяце, поэтому количество строк меняется.Я пытаюсь изменить формулу, которую мне не нужно корректировать месяц за месяцем.

Для этого сначала я нашел онлайн-скрипт VBA:

  Function Col_Letter(lngCol As Long) As String
        Dim vArr
        vArr = Split(Cells(1, lngCol).Address(True, False), "$")
        Col_Letter = vArr(0)
    End Function

Итак, если после вводанапример: =Col_Letter(COLUMN(Table8[[#Headers];[ID]])) это даст мне букву "B", так как этот заголовок можно найти в столбце "B".

Поэтому, используя преимущество этого сценария VBA, я пытался создать формулу, которая будет корректироватьсябуква столбца в исходной формуле каждый раз.

Итак, эта формула:

=("Tasks!" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[Owned By]])) & "$" & "2" & ":" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[Owned By]])) & "$" & ROW(INDEX(Table32;1;1))+ROWS(Table32)-1) is giving me this as the result Tasks!$H$2:$H$65536.

что является частью формулы, поэтому я думаю, что это хорошо.

Это вся формула, которую я пытался воссоздать следующим образом:

=Index((("Tasks!" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[Owned By]])) & "$" & ROW() & ":" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[Owned By]])) & "$" & ROW(INDEX(Table32;1;1))+ROWS(Table32)-1);SMALL(IF((((Col_Letter(COLUMN(Table8[[#Headers];[ID]])) & ROW()) & "=" & (("Tasks!" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[ID]])) & "$" & "2"& ":" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[ID]])) & "$" & ROW(INDEX(Table32;1;1))+ROWS(Table32)-1))));Row((("Tasks!" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[ID]])) & "$" & "2"& ":" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[ID]])) & "$" & ROW(INDEX(Table32;1;1))+ROWS(Table32)-1)))-ROW(("Tasks!" & "$" & Col_Letter(COLUMN(Table32[[#Headers];[ID]])) & "$" & "2"))+1);ROWS($1:$1))))

enter image description here

1 Ответ

0 голосов
/ 30 мая 2018

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

Итак, для начала,попробуйте преобразовать ваш диапазон в таблицу, выбрав его и используя Insert / Table .После этого вы должны преобразовать формулу, чтобы она содержала ссылки на таблицы, а не ссылки на ячейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...