0

データの交点数の列名を見つけることは可能ですか。

例えば:

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

条件は、「Jon」と「A」の交点を見つけて、列名を返すことです。したがって、期待されるリターンは「1」と「3」になります。

これを数式で行うことはできますか、それとも 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

返される可能性のある列名と同じ数のセルに対して、配列関数として入力します。

EDIT : 行と列として返す配列を自動的に切り替え、列名間のギャップをなくすように更新されました。

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 に答える