谁能解释为什么D2
中的字符串在第一个循环中是无序构建的?
这仅在第一个搜索值Dom
中发生。其余字符串将按照它们出现的顺序进行构建(请参见Column B
)。我添加了SearchDirection:= xlNext
,但在 with 或 without 的代码中,输出保持不变。
在照片中,Column A:B
是原始数据,Column C:D
是宏的输出。
所讨论的单元格为D2
。它应该显示USD/EUR/GBP
而不是EUR/GBP/USD
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim FoundName As Range, SearchRange As Range, Names As Range, Name As Range
Dim MyString As String, i As Long
ws.Range("A1:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=ws.Range("C1"), Unique:=True
Set SearchRange = ws.Range("A2:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)
Set Names = ws.Range("C2:C" & ws.Range("C" & ws.Rows.Count).End(xlUp).Row)
For Each Name In Names
Set FoundName = SearchRange.Find(Name, SearchDirection:=xlNext)
For i = 1 To Application.WorksheetFunction.CountIf(SearchRange, Name)
MyString = MyString & FoundName.Offset(, 1) & "/"
Set FoundName = SearchRange.FindNext(FoundName)
Next i
Name.Offset(, 1) = Left(MyString, Len(MyString) - 1)
MyString = ""
Next Name
答案 0 :(得分:3)
根据Microsoft documentation关于Range.Find
方法的说法, After 参数为:
要开始搜索的单元格。这对应于从用户界面进行搜索时活动单元格的位置。请注意,之后必须是该范围内的单个单元格。请记住,搜索是在此单元格之后开始的;直到方法回绕到该单元格之前,不搜索指定的单元格。 如果未指定此参数,则搜索将在范围左上角的单元格之后开始。
(强调我的)
在代码中,您可以按照以下方式设置要搜索的范围:
Set SearchRange = ws.Range("A2:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)
,这意味着实际上 搜索到的第一个单元格为Range("A3")
。有两种解决方法:
在您的情况下,我认为最简单的解决方案是(1)。只需将代码行调整为以下内容即可完成此操作:
Set SearchRange = ws.Range("A1:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)