2015-01-09 2 views
3

В принципе у меня есть функция, которая ищет определенный лист для заголовка столбца, а затем возвращает номер столбца.Поиск столбца, определенного номером VBA

Мне также нужна другая функция, которая ищет этот столбец для указанного значения. Было бы здорово комбинировать эти два, но я не уверен, как выразить диапазон поиска в использовании номера столбца.

Очерк моего кода ниже; мне нечего сказать, я просто не знаю, что положить в бит диапазона

Приветствия!

Function getValue(...parameters...) As Double 

col = getColumnNumber(worksheetName, columnTitle) 'get column number 

With Worksheets(worksheetName).Range(****) 

    ...conditions for which value 

End With 


End Function 

ответ

1

Попробуйте With Worksheets(worksheetName).Columns(col), и вы можете получить доступ к клеткам с помощью .Cells, как и любой другой диапазон.

Вы можете увидеть тип различных выражений и переменных с помощью/окно переменных часов в VBA, или с помощью TypeName функции следующим образом:

Debug.Print TypeName(Worksheets("Sheet1").Columns(1)), который возвращает Range.

+0

Brilliant, ура, я знал, что это будет что-то просто! – monarch

+0

@monarch Нет проблем. –

0

Используйте Worksheet(wsName).Columns(columnNumber) для ссылки на целевую колонку.

Вот пример кода, как эта проблема может быть решена:

Option Explicit

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 
Смежные вопросы