본문 바로가기

vba

자주 쓰는 VBA 패턴 (5) : 해더에서 원하는 값 찾아 열 번호로 반환

해더에서 원하는 값을 찾아 특정 값이 있는 열을 문자가 아닌 숫자 열 번호로 반환하는 코드입니다.

Function MatchKeyValue(keyValue As Variant, headerRow As Range) As Long
Dim cell As Range
    Dim i As Long
    
    For Each cell In headerRow.Cells
        If IsNumeric(keyValue) And IsNumeric(cell.Value) Then
            If CDbl(keyValue) = CDbl(cell.Value) Then
                MatchKeyValue = cell.Column
                Exit Function
            End If
        Else
            If CStr(keyValue) = CStr(cell.Value) Then
                MatchKeyValue = cell.Column
                Exit Function
            End If
        End If
    Next cell

    MatchKeyValue = 0
End Function

if와 else로 복잡하게 나눈 이유는 application의 match함수를 사용할 경우 String type 숫자와 Int type 숫자를 서로 다른 것으로 파악하고 찾지 못하는 경우가 나타났기 때문입니다.