[[20151021102015]] 『処理速度を早くしたい』(屯田兵) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『処理速度を早くしたい』(屯田兵)

 いつも勉強させてもらっています。

 範囲内の0を削除したく下記コードをしているのですが
 ものすごく時間がかかります。
 早くなる方法を教えてください。

 Sub 数字0クリア()

  Dim i
  Dim v
      Application.ScreenUpdating = False
        For v = 72 To Range("D" & Rows.Count).End(xlUp)
        For i = 4 To 78
      If Cells(v, i).Value = 0 Then
         Cells(v, i).ClearContents
        End If
     Next
   Next
 End Sub
 
 最終行は2300ありますが、100行ほど入力された状態で試しても時間かかります。
 よろしくお願いします。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


計算式を多用しているならば、処理前に以下を加えるとどうなりますか?
    Application.Calculation = xlCalculationManual

終了時に自動計算に戻すのは以下。

    Application.Calculation = xlCalculationAutomatic
(???) 2015/10/21(水) 10:44

 数式で入力されていなければ

 Sub test()
    With Range("d4", Range("d" & Rows.Count).End(xlUp)).Resize(, 74)
        .Value = Evaluate("if(" & .Address & "=0,"""",if(" & .Address & "<>""""," & .Address & ",""""))")
    End With
 End Sub
(seiya) 2015/10/21(水) 10:53

こんにちは

同じく、数式で入力されていなければ

Sub test()

    Range("D72:BZ" & Range("D" & Rows.Count).End(xlUp).Row).Replace _
        What:="0", Replacement:="", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub

とかも。

(ウッシ) 2015/10/21(水) 11:11


(???)さん
 ありがとうございます。
 計算式は入っていなく、データー貼り付けです。

 試してみましたが、かわらないみたいでした。

 (seiya)さん
 ありがとうございます。
 計算式は入っていません。

 早速試してみました。20秒ほどかかっていたのが
 あっという間に処理できました。

 >.Value = Evaluate("if(" & .Address & "=0,"""",if(" & .Address & "<>""""," & .Address & ",""""))")

 まだ理解できませんが、勉強します。
 ありがとうございました。

 (ウッシ)さん
 ありがとうございます。
 ご提示のコード早速試してみました。
 早く処理できました。
 ありがとうございました。

 いろんな方法をご教授いただきありがとうございました。

(屯田兵) 2015/10/21(水) 11:23


 >まだ理解できませんが、勉強します。

 理解しずらいかもしれませんが、参考まで

[[20070212134849]] 『Evaluate Method の研究』(seiya)
(seiya) 2015/10/21(水) 11:46


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.