2

行インデックスとセル値が指定された列のインデックスを返す関数が必要です。

'Get index of column given a heading name
Function FindColumnIndex(name As String, rowNumber As Integer) As Integer
    Dim index As Integer
    index = 1
    Dim found As Boolean
    found = False

    Do While found = False
        If Cells(rowNumber, index).Value = name Then
            FindColumnIndex = index
            Exit Do
        End If

        index = index + 1
    Loop

    FindColumnIndex = index


End Function

次に、これを値に割り当てます。

Dim colIndex As Integer
colIndex = FindColumnIndex("Physical or Virtual", 2)

問題はこれが機能していないことです-そして、私の機能が間違っていると確信しています-誰かが私が間違っていることを知っていますか?

4

2 に答える 2

3

私がコウモリから見つけた1つのこと:

If Cells(row, index).Value = name Then

関数に渡される変数の名前はrowNumber、ではなく、rowです。その行を次のように変更します。

If Cells(rowNumber, index).Value = name Then

編集:

もう1つ注意すべき点は、関数が実際にそれ自体で停止することは決してないということです。これが終了する唯一の理由は、列16385を読み取ろうとしたときにアプリケーション定義のエラーが発生するためです(Excelは16384列*に制限されているため)。これにより、関数がすぐに強制終了され、#VALUEエラーが返されます。

次のリビジョンはそれを防ぎ、要求された列名が見つからない場合は-1を返します。

Option Explicit

Function FindColumnIndex(name As String, rowNumber As Integer) As Integer
    Dim index As Integer
    index = 1
    Dim found As Boolean
    found = False

    FindColumnIndex = -1

    Do While found = False
        If Cells(rowNumber, index).Value = name Then
            FindColumnIndex = index
            found = True
        End If

        index = index + 1
        If index > 16384 Then Exit Do
    Loop

End Function

[*とにかく、Excel2007は制限されています。新しいバージョンの制限が大きいかどうかはわかりません。]

于 2013-01-31T14:44:02.680 に答える
0
   If Cells(row, index).Value = name Then

もしかして:

If Cells(rowNumber , index).Value = name Then

とにかく、これを行うための関数があります。たとえば、 MATCH、 INDEX & Coなどです。

于 2013-01-31T14:50:00.883 に答える