0

VBA初心者のため、無知で申し訳ありません。

結果を文字列ではなく行で返すには、以下のコードをどのように変更しますか?

前もって感謝します....

データ

Acct No   CropType
-------   ---------
0001      Grain
0001      OilSeed
0001      Hay
0002      Grain

関数

=vlookupall("0001", A:A, 1, " ")

コードは次のとおりです。

Function VLookupAll(ByVal lookup_value As String, _
                   ByVal lookup_column As range, _
                   ByVal return_value_column As Long, _
                   Optional seperator As String = ", ") As String

Application.ScreenUpdating = False
Dim i As Long
Dim result As String

For i = 1 To lookup_column.Rows.count
   If Len(lookup_column(i, 1).text) <> 0 Then
        If lookup_column(i, 1).text = lookup_value Then
            result = result & (lookup_column(i).offset(0, return_value_column).text &     seperator)
       End If
   End If
 Next

If Len(result) <> 0 Then
result = Left(result, Len(result) - Len(seperator))
End If

VLookupAll = result
Application.ScreenUpdating = True

 End FunctionNotes:
4

2 に答える 2

1

これを試して:

Option Explicit

Function VLookupAll(ByVal lookup_value As String, _
                    ByVal lookup_column As Range, _
                    ByVal return_value_column As Long) As Variant

    Application.ScreenUpdating = False
    Dim i As Long, _
        j As Long
    Dim result() As Variant

    ReDim result(1 To Application.Caller.Rows.Count, 1 To 1) As Variant
    j = LBound(result)

    For i = 1 To lookup_column.Rows.Count
        If Len(lookup_column(i, 1).Text) <> 0 Then
            If lookup_column(i, 1).Text = lookup_value Then
                If j > UBound(result, 1) Then
                    Debug.Print "More rows required for output!"
                    Exit For
                End If
                result(j, 1) = lookup_column(i).Offset(0, return_value_column).Text
                j = j + 1
            End If
         End If
    Next

    VLookupAll = result
    Application.ScreenUpdating = True

End Function

ここで、シートに数式を入力するときに、上下に 3 つのセルを選択し、次のように入力します。

=vlookupall("0001",$A:$A, 1, " ")

Ctrl+Shift+Enter を押して数式を入力します。

出力用に選択した行が少なすぎる場合、即時ウィンドウ (vb エディターで ctrl+g を押す) に「出力には行数がさらに必要です!」というメッセージが表示されることに注意してください。私はこれをメッセージボックスとして持っていましたが、自動計算をオンにすると少しおかしくなります..

于 2012-10-30T22:58:14.430 に答える