Excel VBA:重新启动循环计数器
您好,我正在尝试重新启动循环计数器(iColumn)。我在各列之间循环,以替换模板(TemplateSheet)中的多个单词。是否可以在循环通过所有列(循环内部)后重新启动循环计数器。 我唯一的问题是在增加行值之后,它返回到循环(列),然后iColumn的值变为4,并终止内部循环Excel VBA:重新启动循环计数器,vba,excel,loops,Vba,Excel,Loops,您好,我正在尝试重新启动循环计数器(iColumn)。我在各列之间循环,以替换模板(TemplateSheet)中的多个单词。是否可以在循环通过所有列(循环内部)后重新启动循环计数器。 我唯一的问题是在增加行值之后,它返回到循环(列),然后iColumn的值变为4,并终止内部循环 While Sheets("DataSheet").Cells(iRow, 1).Value <> "" While Sheets("DataSheet").Cells(1, iColumn) &l
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
While工作表(“数据表”)。单元格(iRow,1)。值“”
而工作表(“数据表”)。单元格(1,iColumn)”
sFind=图纸(“数据表”)。单元格(1,iColumn)
sReplacement=图纸(“数据表”).单元格(iRow,iColumn)
sTemplate=Replace(sTemplate、sFind、sReplacement)
iColumn=iColumn+1
温德
表格(“输出表格”)。单元格(iRow,1)=模板
iRow=iRow+1
温德
重新启动循环计数器时,问题得到解决。但现在我必须覆盖替换函数,因为它不存储新替换的数据。只需将
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工作表(“数据表”)。单元格(iRow,1)。值“”
而工作表(“数据表”)。单元格(1,iColumn)”
sFind=图纸(“数据表”)。单元格(1,iColumn)
sReplacement=图纸(“数据表”).单元格(iRow,iColumn)
sTemplate=Replace(sTemplate、sFind、sReplacement)
iColumn=iColumn+1
温德
MsgBox模板
iRow=iRow+1
iColumn=1
温德
您可以将代码简化如下:
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
While工作表(“数据表”)。单元格(iRow,1)。值“”
而工作表(“数据表”)。单元格(1,iColumn)”
sTemplate=替换(sTemplate,表格(“数据表”)。单元格(1,iColumn),表格(“数据表”)。单元格(iRow,iColumn))
iColumn=iColumn+1
温德
MsgBox模板
iRow=iRow+1
iColumn=1
温德
最后,请注意,
MsgBox
调用的位置将只获得sTemplate
的最终值,而不是任何中间值。当然,这可能就是您所追求的。如果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
While工作表(“数据表”)。单元格(iRow,1)。值“”
而工作表(“数据表”)。单元格(1,iColumn)”
sFind=图纸(“数据表”)。单元格(1,iColumn)
sReplacement=图纸(“数据表”).单元格(iRow,iColumn)
sTemplate=表单(“模板表单”)。单元格(1,1)
表格(“输出表格”)。单元格(iRow,iColumn)=替换(sReplace,sTemplate,sFind)
iColumn=iColumn+1
温德
MsgBox模板
iRow=iRow+1
iColumn=1
温德
如果在iRow=iRow+1
之后添加iColumn=1
会怎么样?另外,在进入内部循环之前,sFind
的定义是否应该正确?非常感谢@loannis!但我还有一个问题。我必须覆盖替换功能。因为它不会存储下一个新替换的数据。除了为什么你的方法不起作用之外,你能补充一个问题吗?这样你可以得到更好的帮助。。我觉得你想做的事情可以用一种简单得多的方式来完成。看见如果弗里曼的回答解决了您最初的问题,那么您最好接受/投票。谢谢您的建议@loannis。您能举一个您试图查找/替换的示例吗?看起来您正在下面的行中查找第一列中的字符串。然后用第一行的文本替换整个单元格。对吗?@bigbryan看起来我前几天在循环中给了你类似的答案。这没有修复你的循环吗?是的,先生@TonyL。谢谢你,先生。但我还有一个问题。我有三张数据表:数据表、模板表、输出表。我试图循环遍历每一列(数据表),以找到要替换的代码名(模板表上的相同代码名)。我将从“数据表”中获取替换词。然后我将新模板存储在“OutputSheet”中。现在我的问题是,我不知道如何覆盖新模板的替换函数。输出存储了来自第一个循环的模板的相同数据,并且永远不会替换,谢谢!这可能是你首先要问的问题:我在试着做“X”。这是我到目前为止所做的。这就是我遇到的问题。@bigbryan sTemplate当前是否在输出表中获得了所需的正确值?@bigbryan,在做了一些假设之后,我还更改了替换函数中参数的顺序。