Excelから(セル内で)関数を呼び出すと:
=allVlookup(O24,A:D,3,"")
対vba経由
MsgBox allVlookup(Range("O24"), Range("A:D"), 3, "")
異なる結果が得られます。Excel から呼び出された場合、最初の一致のみが取得されますが、同じパラメーター (Range
サブを実行できるように引数に追加することを除く) を使用して vba テスト サブから呼び出すと、完全な結果 (複数) が取得されます。
私が使用している機能は次のとおりです。
Public Function allVlookup(lookupRange As Range, tableRange As Range, colIndex As Integer, Optional delimiter As String = "") As String
Dim c As Range
Dim firstAddress As String
'MsgBox tableRange.Address ' this is correct
'With Sheets(4).Range("A1:C12").Columns(1)
'With Range("A1:C12").Columns(1)
'this doesn't allow things to work right either (???)
'Set tableRange = Range("A:D")
'Set lookupRange = Range("O24")
'search only the first column for matches
With tableRange.Columns(1)
Set c = .Find(what:=lookupRange.Value, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
'add the delimiter
If (allVlookup <> "") Then
allVlookup = allVlookup + delimiter
End If
'append value to previous value
allVlookup = allVlookup + c.Offset(0, colIndex).Value
Set c = .FindNext(c)
'exit conditions
'no match found
If (c Is Nothing) Then
Exit Do
'we're back to start
ElseIf (c.Address = firstAddress) Then
Exit Do
End If
Loop
End If
End With
End Function
なぜこれが起こっているのかを説明するのに途方に暮れています。
出力を同一にするにはどうすればよいですか?