Excel公式或VBA代码search列的项目列表,并消除重复计数

我是VBA的新手,我无法在Excel中find内置公式来返回我正在寻找的内容。 我正在search栏AN(AN1:AN80627)这是一个项目描述,所以这是一个转折。 我在BD(BD1:BD34)列中列出了如果在项目描述中find任何项目,我想查看的项目。

一些示例项目是:HDG46a,HDG46,HDG46b

目前我的VBA代码在C列返回:

HDG46aHDG46

如何获得C列只返回最长的项目,例如:

HDG46a

这是find所有匹配,但我希望它find最长的字符匹配。 我目前的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代码(这将是伟大的!)?

谢谢,让我知道如果我需要更好地解释这个问题。

我修改了你的代码,得到了这个..它似乎工作

 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)用法=getlongestvalue(BD2,$AN$1:$AN$80627)

如果你把它放在第2行的单元格中,并向下拖动它应该给你的值…