Excel VBA:重新启动循环计数器

时间:2015-06-12 14:28:39

标签: excel vba excel-vba loops

嗨,我正在尝试重新启动循环计数器(iColumn)。我循环遍历列以替换模板中的多个单词(TemplateSheet)。循环遍历所有列(内部循环)后是否可以重新启动循环计数器。

我唯一的问题是在递增行值后,它会返回到循环(列),然后iColumn的值变为4 并终止内部循环。

While Sheets("DataSheet").Cells(iRow, 1).Value <> ""

   While Sheets("DataSheet").Cells(1, iColumn) <> ""

      sFind = Sheets("DataSheet").Cells(1, iColumn)

      sReplacement = Sheets("DataSheet").Cells(iRow, iColumn)

      sTemplate = Replace(sTemplate, sFind, sReplacement)

      iColumn = iColumn + 1

Wend
      Sheets("OutputSheet").Cells(iRow, 1) = sTemplate
      iRow = iRow + 1
   Wend

重启循环计数器时问题解决了。但现在我必须覆盖替换功能,因为它不会存储新替换的数据。

2 个答案:

答案 0 :(得分:2)

只需将iColumn的值重置为您需要的初始值即可。我假设1

While Sheets("DataSheet").Cells(iRow, 1).Value <> ""
   While Sheets("DataSheet").Cells(1, iColumn) <> ""
      sFind = Sheets("DataSheet").Cells(1, iColumn)
      sReplacement = Sheets("DataSheet").Cells(iRow, iColumn)
      sTemplate = Replace(sTemplate, sFind, sReplacement)
      iColumn = iColumn + 1
   Wend
   MsgBox sTemplate
   iRow = iRow + 1
   iColumn = 1
Wend

您可以像这样简化代码:

While Sheets("DataSheet").Cells(iRow, 1).Value <> ""
   While Sheets("DataSheet").Cells(1, iColumn) <> ""
      sTemplate = Replace(sTemplate, Sheets("DataSheet").Cells(1, iColumn), Sheets("DataSheet").Cells(iRow, iColumn))
      iColumn = iColumn + 1
   Wend
   MsgBox sTemplate
   iRow = iRow + 1
   iColumn = 1
Wend

最后请注意,MsgBox来电的位置只会获得sTemplate的最终值,而不是任何中间值。当然,这可能就是你所追求的目标。

答案 1 :(得分:1)

如果sTemplate在单元格中具有您想要的值,那么您需要将单元格设置为该数据,如下所示:

Sheets("DataSheet").Cells(iRow, iColumn) = sTemplate

这是整个循环:

While Sheets("DataSheet").Cells(iRow, 1).Value <> ""
    While Sheets("DataSheet").Cells(1, iColumn) <> ""
        sFind = Sheets("DataSheet").Cells(1, iColumn)
        sReplacement = Sheets("DataSheet").Cells(iRow, iColumn)
        sTemplate = Sheets("TemplateSheet").Cells(1, 1)
        Sheets("OutputSheet").Cells(iRow, iColumn) = Replace(sReplacement, sTemplate, sFind)
        iColumn = iColumn + 1
    Wend
    MsgBox sTemplate
    iRow = iRow + 1
    iColumn = 1
Wend