Как получить индекс столбца таблицы с помощью структурированной ссылки в Excel?

У меня есть таблица с 3 столбцами. Я хочу написать формулу, которая при наличии структурированной ссылки возвращает индекс столбца. Это поможет мне написать формулы VLookup, используя структурированную ссылку.

Так, например, для таблицы MyTableсо столбцами A, B, Cя хотел бы иметь возможность писать:

=GetIndex(MyTable[C])

и вернуть его 3.

Сейчас я просто проверяю, начинается ли диапазон таблицы с первого столбца листа, и пишу

=Column(MyTable[C])

но я хочу что-то более надежное.

12.12.2008 21:11:32
6 ОТВЕТОВ
РЕШЕНИЕ

Подходящая формула на основе вашего примера будет

=COLUMN(MyTable[C])-COLUMN(MyTable)+1

Первая часть forumla COLUMN(MyTable[C])вернет номер столбца, на который есть ссылка.

Вторая часть формулы COLUMN (MyTable) всегда будет возвращать номер столбца первого столбца таблицы.

7
22.09.2015 00:49:35
Мне пришлось удалить изображение из вашего поста, потому что ImageShack удалил его и заменил его рекламой. См. Meta.stackexchange.com/q/263771/215468 для получения дополнительной информации. Если возможно, было бы здорово, чтобы вы загрузили их заново. Спасибо!
Undo♦ 22.09.2015 00:49:41

Вы можете использовать:, где столбец, индекс которого вы хотите.=COLUMN(MyTable[*]) - COLUMN(MyTable[A]) + 1*

0
12.12.2008 21:54:32
Есть ли способ получить первый столбец в таблице? Я не хочу, чтобы «А» всегда был на первом указателе. Спасибо
Dane O'Connor 12.12.2008 22:35:27

Ты имеешь ввиду:

Dim r As Range
MyLetter ="AA"
Set r = Range(MyLetter & "1")
MyIndex= r.Column

Изменить комментарий

Function GetRelativeColumn(Letter, RangeName)
Dim r As Range
Dim ColStart, ColRequired, ColTemp
Set r = Range(RangeName)

ColStart = r.Column
ColRequired = Range(Letter & "1").Column
ColTemp = ColRequired - ColStart + 1
If ColTemp < 1 Or ColTemp > r.Columns.Count Then
    MsgBox "Ooutside range"
Else
    GetRelativeColumn = ColTemp
End If
End Function
1
13.12.2008 22:29:36
Я думаю, что это делает 2 много предположений. По сути, я хотел бы определить таблицу MyTable для любого диапазона. Затем я хочу иметь возможность получить индекс именованного столбца относительно первого столбца в «MyTable». Может ли эта функция сделать это? Помните, я использую структурированные ссылки. В любом случае ты
Dane O'Connor 12.12.2008 22:38:10

= небольшое изменение ответов eJames: = COLUMN (MyTable [*]) - MIN (COLUMN (MyTable)) + 1, где * - столбец, индекс которого вы хотите получить.

0
7.10.2009 18:17:17

Какова ваша конечная цель? Возможно, вам лучше использовать SUMIF (как я опишу здесь ) или INDEX (как я опишу здесь ) для доступа к вашим значениям, а не переходить обратно к строке / столбцу ...

0
23.05.2017 12:09:24

Другое решение вопроса, который вы задали (или что-то похожее на него), - это использовать что-то вроде этого =MATCH("C",MyTable[#Headers],0), которое вернет 3 в примере, который вы опубликовали.

Однако если вы используете INDEX вместо VLOOKUP, вам не нужно этого делать. Например, если вы хотите найти значение C в строке (предположительно, не более одного), где A равно 2, вы можете использовать формулу наподобие =INDEX(MyTable[C],MATCH(2,MyTable[A],0)), которая хорошо самодокументируется.

4
17.08.2011 19:44:03
Хотя я и не думаю, что ОП хотел именно это решение, это именно то, что я искал. Спасибо. У меня был момент удара по лбу, как только я увидел "= MATCH ("
Bobby 20.11.2014 22:00:42
Использование строкового литерала "C"в этой формуле означает, что если вы измените имя столбца C в вашей ссылочной таблице, эта формула нарушится. Ответ Роберта Мирнса можно использовать MyTable[C]в качестве ссылки, которая будет обновляться при переименовании столбца C в ссылочной таблице.
brittohalloran 6.09.2018 20:18:52