簡體   English   中英

使用 VBA 查找/替換具有零值的選定范圍內的單元格(公式單元格)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM