MW211 EXIT

devlog
ExcelVBA/複合キーで取得
2017年09月25日
該当なしの場合は、Nullが返る。
┌──────────────────────────────────────┐
│'===============================================================================
│'  サブ関数:getBy複合キー
│'===============================================================================
│Private Function getBy複合キー(ByVal シート As Worksheet, _
│                               ByVal 第一キー As String, _
│                               ByVal 第二キー As String) As Variant
│    Const X第一キー As Long = 1
│    Const X第二キー As Long = 2
│    Const X取得値 As Long = 3
│    Const yMin As Long = 2
│    Dim yMax As Long
│    Dim obj検索 As Range, 検索範囲 As Range, 起点アドレス As String
│    Dim 検索キー As String
│    検索キー = 第一キー
│    検索キー = Replace(検索キー, "~", "~~")
│    検索キー = Replace(検索キー, "*", "~*")
│    検索キー = Replace(検索キー, "?", "~?")
│    With シート
│        yMax = .UsedRange.Rows(.UsedRange.Rows.Count).Row
│        Set 検索範囲 = .Range(.Cells(yMin, X第一キー), .Cells(yMax, X第一キー))
│        Set obj検索 = 検索範囲.Find( _
│            What:=検索キー, _
│            After:=.Cells(yMin, X第一キー), _
│            LookIn:=xlValues, _
│            LookAt:=xlWhole, _
│            SearchOrder:=xlByRows, _
│            SearchDirection:=xlNext, _
│            MatchCase:=True, _
│            MatchByte:=True _
│        )
│        If obj検索 Is Nothing Then
│            getBy複合キー = Null
│            Exit Function
│        End If
│        起点アドレス = obj検索.Address
│        Do
│            If .Cells(obj検索.Row, X第二キー).Value = 第二キー Then
│                getBy複合キー = .Cells(obj検索.Row, X取得値).Value
│                Exit Function
│            End If
│            Set obj検索 = 検索範囲.FindNext(obj検索)
│        Loop Until obj検索.Address = 起点アドレス
│    End With
│    getBy複合キー = Null
│End Function
│'===============================================================================
└──────────────────────────────────────┘
分類:ExcelVBA