search由VBA编号定义的列

基本上我有一个函数,search某个工作表的列的标题,然后返回列号。

我还需要另一个函数来search这个列中的一个指定的值。 对于我来说,把两者结合起来会很整洁,但是我不确定如何用列号来表示要search的范围。

我的代码概要如下。 没有什么可说的,我只是不知道要在Range中放什么东西

干杯!

Function getValue(...parameters...) As Double col = getColumnNumber(worksheetName, columnTitle) 'get column number With Worksheets(worksheetName).Range(****) ...conditions for which value End With End Function 

尝试With Worksheets(worksheetName).Columns(col) ,您可以使用.Cells访问单元.Cells ,就像其他任何范围一样。

您可以使用VBA中的监视/variables窗口或使用TypeName函数来查看各种expression式和variables的types,如下所示:

Debug.Print TypeName(Worksheets("Sheet1").Columns(1)) ,它返回Range

使用Worksheet(wsName).Columns(columnNumber)来引用您的目标列。

以下是如何解决问题的示例代码:

选项显式

 Function getColumnNumber(wsTarget As Worksheet, columnTitle As String) As Integer Dim rngHeader As Range Dim colNum As Integer Dim rngFind As Range Set rngHeader = wsTarget.Range("1:1") Set rngFind = rngHeader.Find(What:=columnTitle, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True) If Not rngFind Is Nothing Then getColumnNumber = rngFind.Column End If End Function Function valueExists(colName As String, findVal As String) As Boolean Dim colNum As Integer Dim wsTarget As Worksheet Dim rngFindVal As Range Set wsTarget = ThisWorkbook.Worksheets(1) colNum = getColumnNumber(wsTarget, colName) If colNum > 0 Then Set rngFindVal = wsTarget.Columns(colNum).Find(What:=findVal, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True) If Not rngFindVal Is Nothing Then valueExists = True Else valueExists = False End If Else MsgBox "Column header not found!", vbCritical valueExists = False End If End Function Sub test() MsgBox valueExists("myHeader", "myVal") End Sub