我想要一个函数来返回给定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)
问题是这不起作用 - 我确信我的功能不正确 - 任何人都知道我做错了什么?
答案 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&有限公司