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