是否可以找到多个数据交叉点的列名。
例如:
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中设置此内容的帮助都将不胜感激。
感谢。
答案 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