我有这个宏:
Sub StringChecker()
Dim string_arr() As Variant
Dim k As Integer
Dim c As Range
Set c = ActiveSheet.[A1]
end_string = Array(" &", _
" TR", _
" SR", _
" DEFEN")
substring = Array(" SR ", _
" JR ")
Do While c <> "End Loop"
c.Offset(0, 1) = c
For k = 0 To UBound(end_string)
If Right(c, Len(end_string(k))) = end_string(k) Then
cleaner_string = Mid(c, 1, Len(c) - Len(end_string(k)))
End If
Next k
clean_string = cleaner_string
For l = 0 To UBound(substring)
clean_string = Replace(clean_string, substring(l), " ")
Next l
If clean_string = "" Then
clean_string = c
End If
c.Offset(0, 1) = clean_string
Set c = c.Offset(1, 0)
Loop
End Sub
问题是,当它在数组中找到与当前字符串迭代匹配的字符时,它最终将该字符串复制到此后的每个单元迭代。
以下是输出示例:
Owner1 Owner1
BURDINES 1225 LLC BURDINES 1225 LLC
MIAMI-DADE COUNTY MIAMI-DADE COUNTY
RELATED GROUP OF FLORIDA & RELATED GROUP OF FLORIDA
BURDINES 1225 LLC RELATED GROUP OF FLORIDA
CITY OF MIAMI DEPT OF P & D RELATED GROUP OF FLORIDA
MIAMI-DADE COUNTY RELATED GROUP OF FLORIDA
FEC R R CO RELATED GROUP OF FLORIDA
BDG 200 SOUTH MIAMI AVE LLC RELATED GROUP OF FLORIDA
STATE OF FLORIDA DOT RELATED GROUP OF FLORIDA
它在每次迭代过程中复制RELATED GROUP OF FLORIDA,因为它发现该单元以&amp;这是我们的end_string数组的一部分。子串数组可能会发生同样的事情。我仔细研究了这个,我不确定为什么会出现这种情况。它应该删除在end_string和substring数组中找到的单元格中的所有字符,并将它们复制到新单元格。如果在字符串中找不到数组中的索引,那么它只是将原始字符串复制到B列。另外我使用字符串“End Loop”,因为我无法检查空字符串,因为可能有4或5个空单元格在列a之前有另一个包含内容的单元格,所以我不希望迭代只是因为一个单元格为空而停止。
感谢您的回复
答案 0 :(得分:1)
你需要在每次循环开始时擦除cleanerstring。否则,它会保留上一次的值,如果单元格不符合要编辑的cleanerstring的条件,则cleanstring变为cleanerstring(这是最后一次迭代的clearnerstring),因此cleanstring永远不会是“”。这有意义吗?
修改强>
为了更清楚:
如果您正在查看的单元格不符合编辑条件,则cleanerstring永远不会设置为任何新内容。因此,如果最后一次给出一个值,它仍然具有该值。因此,当你说
时cleanstring = cleanerstring
如果cleanerstring从未设置为任何新的,则cleanstring现在具有上次通过的cleanerstring值。 Cleanstring现在会在您的格式代码中被清除,然后当您检查是否
时cleanstring = ""
你评价为假,因为cleanstring是上一次的清洁工字符串,再次清理。因此,cleanstring不会重置为c,所以
c.Offset(0, 1) = clean_string
将单元格设置为上次清理后的文本。