首页 > 解决方案 > 使用 VBA 查找/替换选定范围内具有零值的单元格(公式单元格)

问题描述

我如何在 VBA 中使用“查找/替换”(或任何其他替代方法,如果可用,循环除外)将选定范围内的单元格替换为“0”到“1”。

注意:所选范围内的所有单元格均基于公式,其结果值为“0”。

谢谢, Prasanna M

标签: excelvba

解决方案


发表您的评论:没有循环

使用范围内的评估。根据这里

对于未包装的值:

  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 的 Defs 粘贴到工作表中1.按id排序。任务完成。1 分钟。好吧,也许是 2。


推荐阅读