2

私が VBA/Excel を使用するのは 10 年間で 2 回目ですが、楽しく戻ってきたわけではありません。私は非常に単純なことをしようとしていますが、データ型が間違っているのかどうかはわかりません. #VALUE! でカスタム関数を使用するセルで実行が失敗します。エラー。これにより、データ型が無効であると思われますが、いくつかの異なるソースを参照しましたが、問題が何であるかを見つけることができません.

この関数は、Lookup1 範囲に格納されている部分文字列と一致するものがないか説明セル テキストを検索し、見つかった場合は lookup2 範囲を使用してハッシュ テーブル スタイルの変換を行う必要があります。

Function ExtractCategory(Description As String, Lookup1 As Range, _
Lookup2 As Range) As String

    Dim txt As String
    Dim SubjCell As Range

    For Each rRange In Lookup1
        SubjCell = rRange
        txt = SubjCell.Value

        If InStr(txt, Description) <> 0 Then
            ExtractCategory = Application.WorksheetFunction.Lookup(txt, _
            Lookup1, Lookup2)
            Exit For
        Else
            ExtractCategory = "Not Found"
        End If
    Next rRange
End Function

私がまだ確信が持てない唯一のタイプの問題はtxt = SubjCell.Value. を使用しようとするSubjCell.Textと、IDE によって大文字が削除されtextます ... 理由がわかりません。

4

1 に答える 1

2

これを試してください(両方とも機能します-試行済みおよびテスト済み

Function ExtractCategory(Description As String, Lookup1 As Range, _
Lookup2 As Range) As String
    Dim rRange As Range

    For Each rRange In Lookup1
        If InStr(1, rRange.Value, Description) Then
            ExtractCategory = Evaluate("=lookup(" & rRange.Value & "," & _
            Lookup1.Address & "," & Lookup2.Address & ")")
            Exit For
        Else
            ExtractCategory = "Not Found"
        End If
    Next rRange
End Function

と同じです

Function ExtractCategory(Description As String, Lookup1 As Range, _
Lookup2 As Range) As String
    Dim rRange As Range

    For Each rRange In Lookup1
        If InStr(1, rRange.Value, Description) Then
            ExtractCategory = Application.WorksheetFunction.Lookup(rRange.Value, _
            Lookup1, Lookup2)
            Exit For
        Else
            ExtractCategory = "Not Found"
        End If
    Next rRange
End Function

編集

スナップショット

ここに画像の説明を入力

于 2012-06-01T21:50:50.837 に答える