ray88’s diary

お仕事で困ったとき用の自分用の覚書

VBA 指定した値の入ったセルを検索してセルアドレスを返す

ExcelVBA 目次 - ray88’s diary
■Function

Function fncGetCellAddress(sheet As Worksheet, searchRangeRow As Variant, searchValue As String, matchType As String) As Variant
    '-------------------------------------------------------------
' 機能:指定した文字列でワークシートを検索し、合致した値の入っているセルアドレスを返す
'
' 引数1:検索対象のワークシートオブジェクト
' 引数2:検索対象行の行番号(全シートの場合は「全範囲」)と入れる
' 引数3:検索対象の文言'
' 引数4:完全一致か部分一致か指定する("完全一致" または "部分一致")
'
' 戻り値:検索結果のセルアドレスの行番号と列番号を配列で返す
'-------------------------------------------------------------
    
    Dim searchRange As Range
    If searchRangeRow = "全範囲" Then
        Set searchRange = sheet.Cells
    Else
        Set searchRange = sheet.Rows(searchRangeRow)
    End If
    
    Dim foundCell As Range
    Select Case matchType
        Case "完全一致"
            Set foundCell = searchRange.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole)
        Case "部分一致"
            Set foundCell = searchRange.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlPart)
    End Select
    
    If foundCell Is Nothing Then
        fncGetCellAddress = Null
    Else
       fncGetCellAddress = Array(foundCell.Row, foundCell.Column)
    End If
End Function

■Functionの呼び出し例

Sub test3()
    Dim Aファイル As String
    Dim wb_A As Workbook
    Dim masterSheet As Worksheet
    Dim searchResult() As Variant
    
    Aファイル = "C:\テスト\Aファイル.xlsx"
    
    Set wb_A = Workbooks.Open(Aファイル)
    Set masterSheet = wb_A.Sheets("マスタ")
    
    searchResult = fncGetCellAddress(masterSheet, "全範囲", "冷蔵庫TOSHIBA", "完全一致")
    
    MsgBox "検索結果: 行" & searchResult(0) & ", 列" & searchResult(1)
        
End Sub

■実行結果