在excel 2007中使用交集查找列标题?

时间:2012-08-06 20:18:47

标签: excel-vba excel-2007 vba excel

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

例如:

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)),"")

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

任何有关如何在vba中设置此内容的帮助都将不胜感激。

感谢。

1 个答案:

答案 0 :(得分: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