Excel:跨多列查找值并返回标题列

Posted

技术标签:

【中文标题】Excel:跨多列查找值并返回标题列【英文标题】:Excel: Find value across multiple columns and return header column 【发布时间】:2016-07-21 20:26:29 【问题描述】:

我正在尝试寻找一种方法来跨多个列查找“未知”值。当它存在时,我想将值出现的所有标题列返回到 B 列中每一行的一个单元格中。

例如对于第 2 行(我的标题行下方的第一行),我希望它仅将第 2 行的 F 列中出现“未知”的每个列名返回到 Y 列,并将列名放在 B2 中。我想对所有 9064 行重复该过程。

我正在使用 Excel 2010。我查找了匹配索引,但无法找到一种方法来做我想做的事。有没有办法在多个列中查找一个值并返回该行中出现值的每个列标题并将所有列标题放入一个单元格中?

Data View

【问题讨论】:

" 我想要 "Unknown" 出现的次数"" 返回值出现在该行中的每个列标题并放置所有列标题到一个单元格中” 似乎矛盾...你能给出一个明确的结果示例吗? 我做了一个更正,那是措辞不佳。我想返回每行存在的每个列名 Unknown 。因此,例如,在我的图像“数据视图”中,我希望 B2 说 Install_Method_CD Manuf_Cd Coating_Cd Wall_Thickness Join_Method_Cd 等,因为这些列中存在未知。 【参考方案1】:

这是一个自定义函数。首先将以下代码放入常规模块中(Alt+F11 >> 插入 >> 模块 >> 复制/粘贴 >> Alt+Q)...

Function AConcat(a As Variant, Optional Sep As String = "") As String
' Harlan Grove, Mar 2002

    Dim Y As Variant

    If TypeOf a Is Range Then
        For Each Y In a.Cells
            AConcat = AConcat & Y.Value & Sep
        Next Y
    ElseIf IsArray(a) Then
        For Each Y In a
            AConcat = AConcat & Y & Sep
        Next Y
    Else
        AConcat = AConcat & a & Sep
    End If

    AConcat = Left(AConcat, Len(AConcat) - Len(Sep))

End Function

然后在AA2中输入以下公式,用CONTROL+SHIFT+ENTER确认,向下复制:

=SUBSTITUTE(AConcat(IF(LEFT(F2:Y2,3)="Unk",", "&$F$1:$Y$1,"")),", ","",1)

【讨论】:

效果很好。我只是注意到有些值只是“Unk”,我很抱歉没有早点看到。是否有一个简单的更正方法,所以它会用“Unk”拾取任何东西。有几个字段是由用户填写的,因此可能存在拼写错误,而不会只是“Unk”或“Unknown”。我尝试在数组中添加通配符,但没有奏效。有什么建议吗? 好的,我已经编辑了公式,现在它会搜索以“Unk”开头的单元格。 完美!非常感谢!

以上是关于Excel:跨多列查找值并返回标题列的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL VLOOKUP函数怎么返回多列结果

EXCEL VLOOKUP函数怎么返回多列结果

EXCEL VLOOKUP函数怎么返回多列结果

在EXCEL如何在同一表格多列名称中查找数据相对应的名称

EXCEL VLOOKUP函数怎么返回多列结果

如何从一列中查找每个值并使用“;”返回电子邮件地址分隔器