【发布时间】:2020-07-14 15:47:53
【问题描述】:
如何在 VBA 中使用“查找/替换”(或除循环之外的任何其他替代方法)将选定范围内的单元格替换为“0”到“1”。
注意:所选范围内的所有单元格均基于公式,其结果值为“0”。
谢谢, Prasanna M
【问题讨论】:
如何在 VBA 中使用“查找/替换”(或除循环之外的任何其他替代方法)将选定范围内的单元格替换为“0”到“1”。
注意:所选范围内的所有单元格均基于公式,其结果值为“0”。
谢谢, Prasanna M
【问题讨论】:
发表您的评论:没有循环
使用 Evaluate over the Range。 根据 Here。
对于未包装的值:
Sub Test2()
Dim rngData As Range
Set rngData = ThisWorkbook.Worksheets("Sheet1").Range("B1:G650000")
rngData = Evaluate("Substitute(" & rngData.Address & "," & "0" & ", " & "1" & ")")
End Sub
对于包装的值:
Sub Test3()
Dim rngData As Range
Set rngData = ThisWorkbook.Worksheets("Sheet1").Range("B1:G650000")
rngData = Evaluate("Substitute(" & rngData.Address & "," & "Char(34)&" & "0" & "& Char(34)" & ", " & "Char(34) &" & "1" & "& Char(34)" & ")")
End Sub
我似乎工作得很好。我第一次在不到 3 秒的时间内运行了 650000 行,从 B 到 G,第二次在 10 秒内(我还有其他事情也在运行)。第 3 次、第 4 次和第 5 次整个范围是 =CHAR(34)&RANDBETWEEN(0,1)&CHAR(34),第 4 次和第 4 次使用公式在范围内生成随机 0,1,第 5 次是选择 randbetwen 函数和查找,第 6 次是针对另一张表中的表进行查找。它总是在 15 秒内完成查找替换。我认为您在工作表中的公式与宏无关。它只看价值观,并改变价值观。范围的深度和长度对它更重要。
我也注意到了;按照您之前的问题,您可以在其中建立您的条件:仅当/当范围 A 中的值是“Def”而不是“abc”时,才能将 0 更改为 1,因此它全部从 vba 子运行(但是你会丢失你的公式除非你也构建了那些)。
第三个提议的替代解决方案:
按行为整个表分配唯一的序列号或 id,按 A 列过滤 DEF,将这些 Def 行复制/剥离到 Sheet 2,在那里查找-替换 0 到 1,剪切/删除原始 Defs 行,粘贴 sheet2表 1 中的定义。按 id 排序。任务完成。 1 分钟。好的,也许是 2 个。
【讨论】: