Excel / VBA - 返回整数的函数

时间:2013-01-31 14:39:58

标签: excel vba

我想要一个函数来返回给定rowIndex和Cell Value的列的索引:

'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)

问题是这不起作用 - 我确信我的功能不正确 - 任何人都知道我做错了什么?

2 个答案:

答案 0 :(得分: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因此受到限制。我不知道新版本是否有更大的限制。]

答案 1 :(得分:0)

   If Cells(row, index).Value = name Then
你的意思是:

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

无论如何,有这样的功能,例如MATCH,INDEX&有限公司