MS Excel 简单公式查询

MS Excel 简单公式查询

我有一张 Excel 表,其中有近 100 列,列标题名称如下:

电子表格

在此图中,有 11 个列标题值/名称,从 A 到 L。(A 位于B2)。我想要一个公式放在“结果”列中X,该公式显示所有包含值“1”的列标题名称。您可以看到第一个“结果”单元格值包含 A、C、F、H、J,因为它们包含“1”。

我尝试通过IF公式来完成此操作,但是使用这种方式,我需要为IF每一列输入值,这将是一项艰巨的任务,因为我有超过 100 列,因此想要一种机制来简单地选择范围并应用它。

不是 VBA 专家,但如果那是解决方案,那么给出代码我可以复制粘贴。

如有任何问题请告知我。

答案1

我想这就足够了。

行“a1”的公式为:=CONCATENATE(O2,IF(B2=1,B$1,""))在本例中,它将粘贴到最后一列右侧的 2 列。复制此公式(及其正确的引用),然后在初始公式到位后将其粘贴到所有剩余的单元格中。请注意 $ 符号,这对于复制/粘贴很重要。

=CONCATENATE(O2,IF(B2=1,B$1,""))

    ——O2上面的参考,在您的情况下可能是FW,,FX...或者AAB当然取决于您有多少列。

然后只需引用最后一列作为结果;显示在图像的下半部分。在此示例中:=AA2

您必须跳过一列。以下是屏幕截图。

在此处输入图片描述

答案2

您需要在 VBA 中创建一个用户定义函数 UDF,并将其用作 X 列中的函数。代码如下,在您的工作簿中创建一个新模块

Public Function concatcell(Lookupvalue As String, LookupRange As Range, RowNumber As Integer)
Dim i As Long
Dim J As Long
Dim Result As String
Result = ""
J = LookupRange.Columns.Count
For i = 1 To J

If LookupRange.Cells(RowNumber, i) = Lookupvalue Then
Result = Result & LookupRange.Cells(1, i) & ";"
End If
Next i
concatcell = Result
End Function

在 X2 中写入:
=concatcell(1,$B$1:$L2,ROW())
将其向下拖动
$B$1:$L2 是前两行,将其更改为数据引用,但保持 $ 不变以使范围自动更改(行 B 包含要返回的标签)1 是您要查找的值
Row() 是向下拖动时要自动更改的行号
记得将工作簿保存为启用宏(以便下次打开时可以正常工作)

答案3

您需要使用的公式非常简单,尽管很长。以下是公式(应将其输入N2,然后向下拖动直到有数据的位置):

=IF(B2>0,$B$1&";","")&IF(C2>0,$C$1&";","")&IF(D2>0,$D$1&";","")&IF(E2>0,$E$1&";","")&IF(F2>0,$F$1&";","")&IF(G2>0,$G$1&";","")&IF(H2>0,$H$1&";","")&IF(I2>0,$I$1&";","")&IF(J2>0,$J$1&";","")&IF(K2>0,$K$1&";","")&IF(L2>0,$L$1&";","")&IF(M2>0,$M$1&";","")

(这与您的示例有点不同,因为我发现您错过了标题D。)

它的作用很简单,对于每一列,它检查此行中的单元格是否具有大于零的值,如果为真,则用分号括起来列名,如果不是,则留空。

如果你想看的话,我在这里上传了一个带有公式的示例文档https://1drv.ms/x/s!Ao8EzDmtlA0JhibEB9Wnq4GkXapp

相关内容