用于查找表中包含值的最右侧列的Excel公式

ghg1uchk  于 2022-12-20  发布在  其他
关注(0)|答案(4)|浏览(462)

我在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。该列索引就是我所要查找的。
我使用列字母是为了与Excel保持一致,但数字列索引更可取。
我已经尝试了一些其他的解决方案,类似的Excel问题发现在线,但他们不太有正确的行为。

67up9zun

67up9zun1#

如果要使用帮助列,可以将此公式放在G1中

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

这是输入的数组。向下填充到G3。在G4中,输入

=MAX(G1:G3)

然后对每个数字重复。如果你不需要helper列,你可以这样写一个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)
vlju58qv

vlju58qv2#

这里有一个用公式来做的方法,我将用几个不同的公式来展示逻辑的步骤,然后把它们放在一个大的公式里。
首先,对每列使用一个公式,以查看目标值是否在列中。例如,在列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), ...)
2admgd59

2admgd593#

不如这样:

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
7fhtutme

7fhtutme4#

下面是使用新的LAMBDABYROW函数的解决方案。
BYROW查看设置范围内的每一行,并返回目标编号所在的最右侧列索引号; IFERROR用于捕获目标编号不存在的任何错误; MAX用于返回最大编号/最右侧索引列。

=LET(
goal, $H$1,
range, A1:F3,
MAX(IFERROR(BYROW(range,LAMBDA(x,XMATCH(TRUE,INDEX(x=goal,),0,-1))),0)))

Full Tutorial Here

相关问题