dポイントプレゼントキャンペーン実施中!

こんばんは。excel vba で教えてください。
(やりたいこと)
・指定範囲内の0を削除

下記のやり方で0を削除していますが、時間がかかります。高速処理をご教示ください。

dim r as range

do
set r=range("E4:Q8000").find(0)
if r is nothing then exit sub
r.clear
loop

A 回答 (8件)

こんにちは


VBA処理に組み込まれているのでしょうか、
処理スピード、デバッグは確認していませんけれど
 .clear と言う事で
As Stringで大丈夫と思いますが、、ダメなら見直してください。

Dim srchR As Range, rr As Range
Dim keyItem As String
Dim Ary As Variant
Dim i As Long, j As Long
  keyItem = 0
  Set srchR = Range("E4:Q8000")
  Ary = srchR
  For i = 1 To UBound(Ary)
   For j = 1 To UBound(Ary, 2)
    If Ary(i, j) = keyItem Then
      If rr Is Nothing Then
       Set rr = srchR(i, j)
      Else
       Set rr = Union(rr, srchR(i, j))
      End If
    End If
   Next j
  Next i

  If Not rr Is Nothing Then rr.Clear
    • good
    • 2

こんばんは。



検索したところ、一般機能でも、幾つかの操作でできる様です。
検索した記事を載せておきます。

https://did2memo.net/2013/09/03/excel-delete-zer …
    • good
    • 1
この回答へのお礼

mygoonicknmeさん、ありがとうございました。
参考にさせていただきます。

お礼日時:2022/02/08 19:49

こんなのでも良いかも?



Range("E4:Q8000").NumberFormatLocal = "G/標準;G/標準;;G/標準"
    • good
    • 0

値だけ消すのとセルの書式を含めて消すのに差異があるかな?



https://tonari-it.com/excel-vba-clearcontents-cl …
    • good
    • 0
この回答へのお礼

初心者ですが何かさん、ありがとうございました。
参考にさせていただきます。

お礼日時:2022/02/08 19:51

こんばんは


doステートメントの前に画面描画を停止する、以下の1行を入れたらどうでしょう

Application.ScreenUpdating = False

マクロをExitする前に
Application.ScreenUpdating = True
を入れても良いですが、入れなくても、自動的にTrueになるはずです。
    • good
    • 1
この回答へのお礼

zapさん、ありがとうございました。
記載していませんでしたが、使っていました。

お礼日時:2022/02/08 19:52

置換すれば良いと思う。



Replaceメソッドを使ってみてはいかがでしょう。
    • good
    • 0
この回答へのお礼

銀鱗さん、ありがとうございました。
参考にさせていただきます。

お礼日時:2022/02/08 19:52

0 → ”” の置換ではダメですかね?

    • good
    • 0

こんばんは。



配列内で処理して、それを戻すとかでしょうか?
0を、空の文字で良ければ、下記でどうでしょうか?

Sub TEST()
Dim myAllDat As Variant, I As Long, J As Long, myRng As Range
Set myRng = Range("E4:Q8000")
myAllDat = myRng.Value
For I = LBound(myAllDat) To UBound(myAllDat)
For J = LBound(myAllDat, 2) To UBound(myAllDat, 2)
If myAllDat(I, J) = 0 Then
myAllDat(I, J) = ""
End If
Next J
Next I
myRng.ClearContents
myRng.Value = myAllDat
End Sub
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!