【发布时间】:2018-07-20 20:16:44
【问题描述】:
谁能解释为什么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
【问题讨论】:
-
您是否尝试将搜索范围更改为
Set SearchRange = ws.Range("A1:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)。我想我记得在某处读过Find在范围内的第一个单元格之后 开始,所以从技术上讲,它开始在in second 单元格中搜索。 -
@Mistella 我没试过。完全有道理。可以在一小时左右测试 -
-
非常好的米斯特拉和 urdearboy。我通常使用类似以下的东西,它一直有效:
Set SearchRange = ws.Cells.Find(What:="whatever you want", After:=ws.Cells(Rows.Count, Columns.Count), SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=True)和Set SearchRange = ws.Cells.FindNext(After:=SearchRange) -
@Guest 这是我正在为其他人开发的解决方案,它最终成为一个很好的实践解决方案,因为我意识到这段代码系统地消除了 find 方法什么都不是的可能性(我是为什么没有通常与 .Find 关联的检查)
-
@pnuts 我没有感谢分享!将在以后的帖子中进行调整