标签:VBA,自定义函数
如下图1所示,在单元格A1中包含多行文本,现在要求删除这些文本中开头单词相同的行,仅保留第1行,结果如图1单元格B1中所示。
图1
可以使用VBA编写一个自定义函数来实现。
打开VBE,插入一个标准模块,输入代码:
Public Function fnUnique(rng As Range)
Dim dict As Object
Dim dOut As Object
Dim val As Variant
Dim var As Variant
Dim i As Integer
Dim sKey As String
Set dict = CreateObject("scripting.dictionary")
Set dOut = CreateObject("scripting.dictionary")
dict.CompareMode = vbTextCompare
dOut.CompareMode = vbTextCompare
val = rng.Value & ""
var = Split(val, Chr(10))
On Error Resume Next
For i = 0 To UBound(var)
sKey = Split(var(i))(0)
If dict.exists(sKey) = False Then
dict.Add Key:=sKey, Item:=var(i)
Else
dOut.Add Key:=var(i), Item:=var(i)
End If
Next
For i = 1 To dOut.Count
val = Replace$(val, dOut.items()(i - 1), "")
Next
If Right$(val, 1) = Chr(10) Then
val = Left$(val, Len(val) - 1)
End If
fnUnique = val
Set dict = Nothing
Set dOut = Nothing
End Function
在单元格B1中输入公式:
=fnUnique(A1)
然后,选取单元格B1,单击功能区“开始”选项卡中的“自动换行”按钮,即可获得结果。
注:本文示例收集自vbaexpress.com,供有兴趣的朋友研究。
欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。