
お世話になっております。
削除の速度について質問させてください。
シート1A列~F列にデータが入力されています。それをシート1M列~R列に転記しています。
A列~F列のデータはシート2の表から数式で転記しています。
M列~R列への転記はボタンクリックで値のみ転記するようにしています。
A列~F列のデータに空白行がある場合もあるのですが
空白行は無視し上に詰めてM列~R列へ転記しています。
シート2に変更があればA列~F列のデータも変更され、ボタンクリックでM列~R列に登録されているデータの上書きや、一致するデータがなければ最終行に新規追加されるようにしています。
そこで不要なデータ削除ボタンを作ったのですが、
D列を検索値にし、P列に一致するデータがあれば一致した行をM列からR列まで削除する。としているのですがとても時間がかかってしまいました。削除は一応できています。
下記コードで削除しているのですが、どこが遅くさせているのでしょうか。
何か解決方法があれば教えていただきたいです。
よろしくお願いします。
一応自分でも処理速度が速くなるものを調べてやってみましたが
速度は遅いままでした。
Private Sub CommandButton1_Click()
Dim Wb1 As Workbook
Set Wb1 = Workbooks("zs.xlsm")
Dim Sh1 As Worksheet
Set Sh1 = Wb1.Worksheets("Sheet1")
Label8.Caption = "削除完了"
'★処理速度-------------------------------
With Application
.Calculation = xlCalculationManual
.EnableEvents = False
.ScreenUpdating = False
End With
'★削除-------------------------------
Dim i, i2, DROWup, PROWup As Long
i = Sh1.Range("D" & Rows.Count).End(xlUp).Row
i2 = Sh1.Range("P" & Rows.Count).End(xlUp).Row
For DROWup = i To 2 Step -1
For PROWup = i2 To 2 Step -1
If Sh1.Range("D" & DROWup).Value = Sh1.Range("P" & PROWup).Value Then
Sh1.Range(Sh1.Cells(PROWup, 13), Sh1.Cells(PROWup, 18)).Delete Shift:=xlShiftUp
End If
Next
PROWup = PROWup + 1
Next
'★処理速度-------------------------------
With Application
.Calculation = xlCalculationAutomatic
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
No.1ベストアンサー
- 回答日時:
こんにちは
あまり考えず、処理に時間がかかりそうなコード
Sh1.Range(Sh1.Cells(PROWup, 13), Sh1.Cells(PROWup, 18)).Delete Shift:=xlShiftUp を変えてみました。
For DROWup = i To 2 Step -1
For PROWup = i2 To 2 Step -1
If Sh1.Range("D" & DROWup).Value = Sh1.Range("P" & PROWup).Value Then
If TrgRng Is Nothing Then
Set TrgRng = Sh1.Range(Sh1.Cells(PROWup, "M"), Sh1.Cells(PROWup, "R"))
Else
' Sh1.Range(Sh1.Cells(PROWup, 13), Sh1.Cells(PROWup, 18)).Delete Shift:=xlShiftUp
Set TrgRng = Union(TrgRng, Sh1.Range(Sh1.Cells(PROWup, "M"), Sh1.Cells(PROWup, "R")))
End If
End If
Next
PROWup = PROWup + 1
Next
If Not TrgRng Is Nothing Then TrgRng.Delete Shift:=xlShiftUp
速くなるかな?
回答ありがとうございます。
直していただいたコードで素早く削除されるようになりました。
もっとコードの書き方を勉強します。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VBA 指定した列にある日時デー...
-
VLOOKUPの列番号の最大は?
-
Excelの行数、列数を増やしたい...
-
複数EXCELのセルデータを違うセ...
-
データシートビューのタイトル...
-
顧客データをテーブルデータに...
-
Excel 区切り位置指定ウィザー...
-
【Excel VBA】条件を満たすデー...
-
エクセルのソートで、数字より...
-
マクロ 降順のソートをすると全...
-
列方向、行方向の定義
-
Excel文字列一括変換
-
「コピー → 行列を入れ替えて貼...
-
エクセル マクロ 範囲指定で...
-
Excel 2007で複合グラフ(折線...
-
エクセルでセル12個間隔で合...
-
複数行あるExcelのある列...
-
VBA 削除の速度について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
LEFT関数とIF関数の組み合わせ...
-
VLOOKUPの列番号の最大は?
-
VBA 指定した列にある日時デー...
-
Excelの行数、列数を増やしたい...
-
エクセルのソートで、数字より...
-
列方向、行方向の定義
-
VBAで別ブックの列を検索し、該...
-
エクセル マクロ 範囲指定で...
-
CSVファイルの「0落ち」にVBA
-
エクセルマクロPrivate Subを複...
-
エクセルで最初の行や列を開け...
-
最近急にVBAの処理速度が遅くな...
-
VBA
-
Excel文字列一括変換
-
エクセルで複数列の検索をマク...
-
エクセル マクロ 範囲の値を上...
-
横軸を日付・時間とするグラフ化
-
Alt+Shift+↑を一括で行うには、...
おすすめ情報