0

是否可以找到多个数据交集的列名。

例如:

name one two three four
Jon   A   B    A     C
Don   B   A    C     B
Ron   C   B    A     C

条件是找到“Jon”和“A”的交集并返回列名。所以我的预期回报是“一”和“三”。

可以在公式中执行此操作,还是使用 vba 会更好。

在任何一种情况下,你能给我一个如何设置的例子吗?

谢谢。

更新:

我找到了一个公式来返回列名,(ExcelForum):

=IF(SUMPRODUCT(((Data!$A$3:$A$54=$A$28)*(Data!$B$3:$AC$54=$G$25)))>0,INDEX(Data!$B$2:$AC$2,MATCH
($G$25,INDEX(Data!$B$3:$AC$54,MATCH($A$28,Data!$A$3:$A$54,0),0),0)),"")

现在我意识到,如果我有多个其他列名与条件匹配的实例,我将不得不遍历列名,检查每个列名的相同条件,从而捕获所有符合条件的名称。

任何有关如何在 vba 中进行设置的帮助将不胜感激。

谢谢。

4

1 回答 1

0

在尽可能多的单元格上输入数组函数,因为有可能要返回的列名。

编辑:更新为在返回数组作为行与列之间自动切换,并消除列名之间的间隙。

Function GetColumns(tbl As Range, rowName As String, val As String)

    Dim arr()
    Dim f As Range, x As Integer, numCols As Integer
    Dim i As Integer

    numCols = tbl.Columns.Count
    ReDim arr(1 To numCols - 1)
    i = 1

    Set f = tbl.Columns(1).Find(rowName, , xlValues, xlWhole)
    If Not f Is Nothing Then
        For x = 1 To numCols - 1
            If f.Offset(0, x).Value = val Then
                arr(i) = tbl.Cells(1, x + 1)
                i = i + 1
            End If
        Next x
    End If

    'fill the rest of the array
    For x = i To UBound(arr)
        arr(x) = ""
    Next x

    If Application.Caller.Rows.Count = 1 Then
        GetColumns = arr 'array formula in a row
    Else
        GetColumns = Application.Transpose(arr) 'in a column
    End If
End Function
于 2012-08-07T16:39:16.093 回答