2

私は VBA を初めて使用し、探しているものを正確に返す組み込みの数式を Excel で見つけることができませんでした。商品説明欄AN(AN1:AN80627)を検索しているので文章です。列 BD (BD1:BD34) に、商品説明に記載されている商品があるかどうかを確認したい商品のリストがあります。

アイテムの例: HDG46a、HDG46、HDG46b

現在、私のVBAコードは列Cに返されています:

HDG46aHDG46

列 C を取得して、最長の項目のみを返すようにするにはどうすればよいですか。例:

HDG46a

すべての一致を見つけていますが、最長の文字一致を見つけたいです。私の現在のVBAコードは次のとおりです。

Sub FindItems()

    Dim i As Long, j As Long
    Dim ItemName As String
    Dim FirstColumn As Integer

    Range("Bd2:Bd100000").ClearContents

    For i = 1 To 34

        ItemName = Sheets("ItemList").Cells(i + 1, 2).Value

        For j = 1 To 80627

            If InStr(1, Range("AN1").Offset(j, 0).Value, ItemName, vbTextCompare) > 0 Then

                Range("Bd1").Offset(j, 0).Value = Range("Bd1").Offset(j, 0).Value & ItemName

            End If

        Next j

    Next

End Sub

(コードの終わり)

コードに他に何を追加する必要がありますか? または、VBA コードの代わりに Excel 数式を使用する方法はありますか (それは素晴らしいことです!)。

ありがとうございます。問題について詳しく説明する必要がある場合はお知らせください。

4

1 に答える 1

1

私はあなたのコードを少し修正してこれを手に入れました..うまくいくようです

Function GetLongestValue(ItemName As String, rng As Range)

Dim maxLength As Integer
Dim length As Integer

Dim returnStr As String

maxLength = 0



For Each cell In rng.Value2

    str = Trim(cell)

            If InStr(1, str, ItemName) > 0 Then

            length = Len(str)

                If length > maxLength Then

                maxLength = length
                returnStr = str

                End If

            End If

    Next cell


GetLongestValue = returnStr

End Function

使用法は=getlongestvalue(BD2,$AN$1:$AN$80627)ワークシートのセルにあります...

行2のセルに入れて下にドラッグすると、値が得られます...

于 2013-11-08T19:59:55.033 に答える