Формула Excel, чтобы найти самый правый столбец, содержащий значение в таблице - PullRequest
3 голосов
/ 24 января 2011

У меня есть некоторые данные, структурированные таким образом в электронной таблице Excel:

    A B C D E F

1   1 1 2 x 2 3
2   1 1 1 2 2 3
3   3 3 3 3 4 4

Я пытаюсь сформулировать формулу Excel, которая даст мне индекс самого правого столбца в этой таблице, в котором есть совпадение ячеекконкретное значение.

В этом примере самый правый столбец, содержащий значение «1», находится в столбце C. Для «2» это будет E. Этот индекс столбца соответствует тому, что я ищу.

Iдля совместимости с Excel используйте буквы столбцов, но предпочтительнее числовой индекс столбцов.

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

Ответы [ 3 ]

3 голосов
/ 25 января 2011

Если вы хотите использовать вспомогательные столбцы, вы можете поместить эту формулу в G1

{=MAX((COLUMN(A1:F1)*(A1:F1=2)))}

Это введенный массив.Заполните до G3.В G4 введите

=MAX(G1:G3)

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

Public Function MaxColumn(rInput As Range, vValue As Variant) As Long

    Dim rFound As Range

    Set rFound = rInput.Find(vValue, rInput.Cells(1), xlValues, xlWhole, xlByColumns, xlPrevious)

    If Not rFound Is Nothing Then MaxColumn = rFound.Column

End Function

, который вы называете как

=maxcolumn(A1:F3,2)
2 голосов
/ 25 января 2011

Вот способ сделать это с помощью формул.Я покажу, как сделать это с помощью нескольких различных формул, чтобы показать шаги логики, а затем объединю их в одну большую формулу.

Сначала используйте одну формулу на столбец, чтобы увидеть, является ли целевое значениенаходится в столбце.Например, в столбце A:

=COUNTIF(A1:A100,Goal)
=COUNTIF(B1:B100,Goal)
...
(where Goal can be a hardcoded search value,
 or a named range where you type your query)

Затем добавьте операторы IF в эти формулы, чтобы перевести это в номера столбцов.Если запрос присутствует в столбце, укажите номер столбца, в противном случае укажите ноль.

=IF(COUNTIF(A1:A100,Goal)>0, 1, 0)
=IF(COUNTIF(B1:B100,Goal)>0, 2, 0)
...

Наконец, добавьте формулу, чтобы получить максимальное число столбцов из предыдущих формул.Это будет соответствовать правому столбцу с вашим значением запроса.

=MAX( IF(COUNTIF(A1:A100,Goal)>0, 1, 0), IF(COUNTIF(B1:B100,Goal)>0, 2, 0), ...)
2 голосов
/ 25 января 2011

Как насчет:

Function FindCol(ToFind)
Dim r As Range
Dim rfind As Range
Dim rfound As Range
Set r = ActiveSheet.UsedRange

For i = r.Columns.Count To 1 Step -1
    Set rfind = r.Columns(i)
    Set rfound = rfind.Find(ToFind)
    If Not rfound Is Nothing Then
        Result = rfound.Column
        Exit For
    End If
Next

FindCol = Result

End Function
...