[英]Find/Replace cells in selected range having zero values (Formula cells) using 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 function 和查找,第 6 次查找另一張工作表中的表格。 它總是在 15 秒內完成查找替換。 我認為您在工作表中的公式與宏無關。 它只看價值觀,並改變價值觀。 范圍的深度和長度對它更重要。
我也注意到; 按照您之前的問題,您可以在其中建立您的條件:僅當/當范圍 A 中的值是“Def”而不是“abc”時,才能將 0 更改為 1,因此它全部從 vba 子運行(但除非你也建立那些公式,否則你會失去你的公式)。
第三個提議的替代解決方案:
按行為整個表分配唯一的序列號或 id,按 A 列過濾 DEF,將這些 Def 行復制/剝離到工作表 2,在那里查找-替換 0 到 1,剪切/刪除原始 Defs 行,將 sheet2 的 Defs 粘貼到工作表中1.按id排序。 任務完成。 1 分鍾。 好吧,也許是 2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.