VBA宏将相同的数据复制到每个单元格

时间:2011-07-20 20:52:55

标签: string excel vba loops

我有这个宏:

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之前有另一个包含内容的单元格,所以我不希望迭代只是因为一个单元格为空而停止。

感谢您的回复

1 个答案:

答案 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

将单元格设置为上次清理后的文本。