ここから本文です

Excelのマクロの高速化について質問です。 以下のコードはネットで調べたものを変...

nan********さん

2019/12/1301:15:51

Excelのマクロの高速化について質問です。
以下のコードはネットで調べたものを変更して作ったものになりますが、動作完了までに時間がかかります。

これを高速化するためにはどこをどう変更すればよろしいでしょうか?
何卒、ご教示お願い致します。

Sub test()

Dim r As Integer
Dim i As Integer

For r = 5 To 184 Step 3
Range(Cells(r, 11), Cells(r, 44)).ClearContents


Next r

For i = 7 To 184 Step 3
Range(Cells(i, 11), Cells(i, 44)).ClearContents


Next i


End Sub

閲覧数:
167
回答数:
5
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tra********さん

2019/12/1302:07:06

Sub test()
Dim i As Integer, rng As Range
Set rng = Range(Cells(5, 11), Cells(5, 44))
For i = 7 To 184 Step 3
If i < 184 Then
Set rng = Union(rng, Range(Cells(i, 11), Cells(i + 1, 44)))
Else
Set rng = Union(rng, Range(Cells(i, 11), Cells(i, 44)))
End If
Next i
rng.ClearContents
End Sub

  • tra********さん

    2019/12/1302:14:20

    ↓のように書いたほうが解りやすいですか?

    Sub test()
    Dim i As Integer, rng As Range
    Set rng = Union(Range(Cells(5, 11), Cells(5, 44)), Range(Cells(184, 11), Cells(184, 44)))
    For i = 7 To 181 Step 3
    Set rng = Union(rng, Range(Cells(i, 11), Cells(i + 1, 44)))
    Next i
    rng.ClearContents
    End Sub

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/12/13 21:57:13

ありがとうございます!
非常に助かりました。
今後も何かありましたら宜しくお願い致します。

ベストアンサー以外の回答

1〜4件/4件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

taihenda****さん

2019/12/1316:47:56

計算を手動、がどのくらい効果があるかは表の数式の状況が分からないと確信できませんが、一応無駄でも入れておきます。

ただ、行単位で処理できるものを一つ一つのセルに処理するのはいかがなものか?
という感じです。


Sub test()
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
Dim r As Integer, rng As Range
Set rng = Range("K:AR")

For r = 5 To 184
If r Mod 3 Then rng.Rows(r).ClearContents
Next r

.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub

だるまさん

2019/12/1314:06:40

コードを見る限りではほぼ一瞬で終わりそうなコードです。
試しに実際にデータを配置して試してみましたが、0.1秒も掛かりませんでした。

多分、シート上に数式が多数あり、「自動再計算」が行われている
ために遅くなっていると想像されます。

再計算の設定を、コード実行前に「手動」にして、終わったら「自動」
に戻すように、下記のようにすれば良さそうです。


Application.Calculation=xlCalculationManual

現コード

Application.Calculation=xlCalculationAutomatic

kak********さん

2019/12/1312:43:45

'コード例
Option Explicit

Public Sub Sample()
Dim calc As XlCalculation
calc = Application.Calculation
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Dim r As Integer
Dim i As Integer

For r = 5 To 184 Step 3
If (r Mod 3) <> 0 Then
Range(Cells(r, 11), Cells(r, 44)).ClearContents
End If

Next r

Application.Calculation = calc
Application.ScreenUpdating = True

End Sub

30246kikuさん

2019/12/1308:11:34

以下でどうなりますか


Option Explicit

Public Sub Samp1()
   Dim rng As Range
   Dim i As Long

   Set rng = Cells(5, "K")
   For i = 7 To 184
      If ((i Mod 3) <> 0) Then
         Set rng = Union(rng, Cells(i, "K"))
      End If
   Next

   Intersect(rng.EntireRow, Columns("K:AR")).ClearContents
End Sub

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる