
以下のようなFor文を使用して、F列が空白の場合、その行を削除するマクロを組んでいます。
しかし、他のシートなどデータが肥大になってきて、削除速度がかなり落ちました。
どうにか速度をあげる方法はないでしょうか?
ワークシートの7~300の行でF列が空白の行を削除できれば良いです。
F列にはVLOOKUP関数で、検索に引っかからなかった場合に空白になるようにしています。
詳しい方アドバイスよろしくお願いします。
For k = 300 To 7 Step -1
If Worksheets("一覧").Cells(k, "F") = "" Then
Worksheets("一覧").Rows(k).Delete
End If
Next k
No.6ベストアンサー
- 回答日時:
下記のような方法もあるようです。
空白のセルを調べ、一括で行を削除する方法です。
Sub test()
Dim m_Cell As Range
Dim m_Union As Range
For Each m_Cell In Range("F7:F300")
If m_Cell.Value = "" Then
If m_Union Is Nothing Then Set m_Union = m_Cell
Set m_Union = Union(m_Union, m_Cell)
End If
Next
If Not m_Union Is Nothing Then m_Union.EntireRow.Delete
End Sub
VBAはサンプルコードがネット上にいくらでもありますので、ネット検索した方が早く解決出来ますよ。
No.8
- 回答日時:
参照が複雑とかあるのかな。
作業中の再計算を止めると速くなる場合があるよ。Application.Calculation = xlCalculationManual ' 自動計算を止める
(ここに作業)
Application.Calculation = xlCalculationAutomatic ' 自動計算を再開する
No.7
- 回答日時:
こんばんは!
300行程度であればループさせてもさほど時間を要することはないと思いますが、
実際問題として、速度が落ちている!というコトですので・・・
すでに適切な回答は出ていますが、作業列を使って並び替えでの一例です。
Sub 行削除()
Dim c As Range, wS As Worksheet
Set wS = Worksheets("一覧")
Application.ScreenUpdating = False
wS.Range("A:A").Insert
With Range(wS.Cells(7, "A"), wS.Cells(300, "A"))
.Formula = "=IF(G7="""",2,1)"
.Value = .Value
End With
wS.Rows(7 & ":" & 300).Sort key1:=wS.Cells(7, "A"), order1:=xlAscending, Header:=xlNo
Set c = wS.Range("A:A").Find(what:=2, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
wS.Rows(c.Row & ":" & 300).Delete
End If
wS.Range("A:A").Delete
Application.ScreenUpdating = True
End Sub
こんな感じではどうでしょうか?m(_ _)m
No.4
- 回答日時:
では逆にScreenUpDatingを外して、実際にどこで動作が遅くなって
居るかをチェックしてみて下さい。
意外に、「ここじゃないか」と思った場所じゃないところで遅くなって
いることがあります。たとえば「セルにデータを書き込む」という処理
は、そのセルの参照関係次第では、メチャメチャ時間がかかることが
あったりしますので。
No.2
- 回答日時:
あまり詳しくないですが(実験していないので実際の効果はわかりませんが)
遅い原因が削除した後にその下のデータを動かす必要があるためと考えるなら、
・一旦配列に読み込んで、書き直すとか、
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
・削除すべき列を特定して、Rangeの文字列を生成して、複数行を選択して
いっぺんに削除するとか、
で、早くなるような気がしますが、、、
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBA 行削除した連番 4 2023/06/27 16:00
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで、現住所の空欄セル...
-
EXCELでの計算式を教えてください
-
データ抽出後の個数カウント。
-
Photoshop CS3 オリジナルフィ...
-
OpenOffice表計算ソフトにて質問
-
Excel関数、何がいけないのかわ...
-
コードへ追記したら、特定のシ...
-
エクセルでフィルターをかけて...
-
EXCELでデータをグループ化
-
Excelの特定のセル内で“X”文字...
-
Excel2003でオートフィルタを使...
-
Excelのオートフィルタについて
-
Excel2010 フィルタで抽出できない
-
Excel VBAに詳しい人に質問です。
-
エクセルで、このようなセル検...
-
Excel 対象行のみ別シートに表...
-
エクセルオートフィルタで余計...
-
教えて下さい!関数SUBTOTALとC...
-
多段のLCフィルタに関する質問
-
=SUBTOTAL に =COUNTIF の機能...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルオートフィルタで余計...
-
=SUBTOTAL に =COUNTIF の機能...
-
行番号の文字の色が青色の理由?
-
Excel関数、何がいけないのかわ...
-
教えて下さい!関数SUBTOTALとC...
-
色フィルターをかけた状態で、...
-
エクセルの計算表の下向き三角...
-
オートフィルタで抽出したデー...
-
エクセルで、桁数の異なるデー...
-
エクセルのフィルタをかけると...
-
オートフィルタをかけた表に一...
-
Excel2010 フィルタで抽出できない
-
エクセルのフィルタ リスト範...
-
エクセル:色の付いたデータを...
-
excelで奇数の行のみ削除したい
-
エクセルでのオートフィルタオ...
-
Excelのセルのデータ:年...
-
エクセルについて。 ソートで絞...
-
Excelでオートフィルタ時に交互...
-
5の倍数の日付だけを抽出したい
おすすめ情報