2

我想要一个函数来返回给定 rowIndex 和单元格值的列的索引:

'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

我立即发现的一件事:

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

传递给函数的变量名为rowNumber,而不是row。将该行更改为:

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

编辑:

要注意的另一件事是,您的函数实际上永远不会自行停止。它结束的唯一原因是因为它在尝试读取第 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

[ * 无论如何,Excel 2007 是有限的。我不知道新版本是否有更大的限制。]

于 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 回答