excel - 使用 VBA 查找/替换选定范围内具有零值的单元格(公式单元格)
问题描述
我如何在 VBA 中使用“查找/替换”(或任何其他替代方法,如果可用,循环除外)将选定范围内的单元格替换为“0”到“1”。
注意:所选范围内的所有单元格均基于公式,其结果值为“0”。
谢谢, Prasanna M
解决方案
发表您的评论:没有循环
使用范围内的评估。根据这里。
对于未包装的值:
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。
推荐阅读
- javascript - jQuery 执行 PHP 文件并添加/删除类
- c++ - 为什么静态变量没有设置为 1000
- c# - 如何检查 IQueryable 元素/项目是否包含 C# 中的属性?
- javascript - Javascript:理解如何根据时间显示图像的问题(new Date()、getHours()、getMinutes())
- automation - 如何访问太鼓自动化中的下载文件夹
- reactjs - 未处理的拒绝(MissingRequiredParameter):参数中缺少必需的密钥“userId”
- amazon-web-services - 如何获取使用云形成创建的 SNS 主题的 ARN?
- reactjs - 无法从 React Native 上的 Tensorflow.js Tensorcamera 读取图像
- sql-server - 如何在两次行中找到时差
- java - 使用 ByteBuddy 创建注释接口