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

(代码结束)

我还需要在代码中添加什么?或者有没有办法使用 excel 公式而不是 VBA 代码(那太好了!)?

谢谢,如果我需要更好地解释这个问题,请告诉我。

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 回答