
VBA初心者です。
エクセルの表で、エラーがある行を削除し
同じ処理をシートの最後まで続けたいと思い、下記のコードを書きました。
Dim ws As Worksheet
Dim Rng As Range
For Each ws In ThisWorkbook.Worksheets
Application.ScreenUpdating = False
With ActiveSheet.UsedRange
On Error Resume Next
Set Rng = .SpecialCells(xlCellTypeFormulas, xlErrors)
On Error GoTo 0
If Not Rng Is Nothing Then
Rng.EntireRow.Delete
Application.ScreenUpdating = True
End If
Next
End Sub
実行すると【コンパイルエラー Nextに対するForがありません】
のエラーが出てしまいます。
どこを修正すればよいか、お知恵を拝借できますと幸いです。
何卒よろしくお願い申し上げます。
No.3ベストアンサー
- 回答日時:
こんばんは
>コンパイルエラー Nextに対するForがありません
このエラーメッセージは まんま でない事があります
#1様が回答されているようなケース
(For~Next内で If With などに対して正しく閉じられていない場合)でも同じメッセージで表示されます
For If With FalseやTrueなど対応する関係を考えると多分すっきりすると思います
On Error Resume Next についてはエラーセルが無い場合の1004エラー対策ですね
ご質問とは関係ないかもですが
ActiveSheet.UsedRangeについては シートをループしているので
With ws.UsedRangeなどとする必要があります
又はws.Activate ・・この方法はお勧めしませんが
さらに
Withを使用するメリットは無いように思いますので Withを外して
Set Rng = ws.UsedRange.SpecialCells(xlCellTypeFormulas, xlErrors)
で良いのでは無いでしょうか・・
以上を踏まえると
Dim ws As Worksheet
Dim Rng As Range
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
On Error Resume Next
Set Rng = ws.UsedRange.SpecialCells(xlCellTypeFormulas, xlErrors)
On Error GoTo 0
If Not Rng Is Nothing Then
Rng.EntireRow.Delete
End If
Next
Application.ScreenUpdating = True
End Sub
のような処理になると思いますがデバッグして確認してみてください
ご丁寧にご教示頂き誠にありがとうございました。
まだ実現には至っていないのですが、初心者の自分にも
とても丁寧にご説明頂き、勉強になりました。
頂いた内容を踏まえて、またトライしております。
この度はありがとうございました。
No.5
- 回答日時:
インデントを付けると分かり易いです。
他のところも修正しました。
Dim ws As Worksheet
Dim Rng As Range
Application.ScreenUpdating = False ' 移動しました
For Each ws In ThisWorkbook.Worksheets
With ActiveSheet.UsedRange ' With ws.UsedRange では?
On Error Resume Next
Set Rng = .SpecialCells(xlCellTypeFormulas, xlErrors)
On Error GoTo 0
If Not Rng Is Nothing Then
Rng.EntireRow.Delete
End If
' ここに End With が必要
Next
Application.ScreenUpdating = True ' 移動しました
End Sub
Rng を 毎回初期化しなくて大丈夫かな?未確認。
ご丁寧に修正頂き誠にありがとうございました。
初心者にもわかりやすく修正内容を記載していただき、
またインデントもつけていただき、とても勉強になりました。
No.4
- 回答日時:
#3です
サンプル考察で見落としました・・
1シート目にエラーがあり2シート目にエラーが無い場合・・
上手くいかないですね多分・・
対策としては次のシートに移る前にRngを初期化
If Not Rng Is Nothing Then 内を下記の様にします
If Not Rng Is Nothing Then
Rng.EntireRow.Delete
Set Rng = Nothing
End If
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【初月無料キャンペーン実施中】オンライン健康相談gooドクター
24時間365日いつでも医師に健康相談できる!詳しくはコチラ>>
-
なぜこんな初歩的なVBAのIf文でエラーか発生して使えないのか、全く理解出来ません。誰か助けてくださ
Visual Basic(VBA)
-
初めてマクロを入力しますが、テキストとおりに入力したのに構文エラーです。修正を教えてください。
Visual Basic(VBA)
-
ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています
Visual Basic(VBA)
-
4
VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「"」付にならないよ
Visual Basic(VBA)
-
5
ExcelのVBAでシフト表を作っていますが、バグが出て困っています
Visual Basic(VBA)
-
6
VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます
Visual Basic(VBA)
-
7
VBAについて教えてください
Visual Basic(VBA)
-
8
VBAの計算について
Visual Basic(VBA)
-
9
vbaの計算 if elseと範囲について
Visual Basic(VBA)
-
10
VBA コードの意味を教えて下さい。
Visual Basic(VBA)
-
11
複数セルに〇印をつけるマクロ
Visual Basic(VBA)
-
12
vba メモリ節約
Visual Basic(VBA)
-
13
【至急】 当方初心者です。 マクロについて知恵をお貸しください。 ★したい動作 ①リストE列2行目か
Visual Basic(VBA)
-
14
VBAマクロでシートコピーした新シートにコピー元シートとの計算式の入れ方を教えて下さい。
Visual Basic(VBA)
-
15
Excel VBAでAA(BBB) → BBB.AA に置換したい
Visual Basic(VBA)
-
16
VBA言語プログラミング
Visual Basic(VBA)
-
17
VBAプログラミング
Visual Basic(VBA)
-
18
【マクロ】表への繰り返し転記について
Visual Basic(VBA)
-
19
ListBox1をClickしたときのイベント
Visual Basic(VBA)
-
20
Excel VBAのデバッグ
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
On ErrorでエラーNoが0
-
5
VBA データ(特定値)のある最...
-
6
【VBA】ワークブックを開く時に...
-
7
エクセル 足し算引き算で 空...
-
8
ExecuteNonQueryメソッドの戻り値
-
9
String""から型'Double'への変...
-
10
.VBSだとADODBのプロバイダが見...
-
11
pythonのopenpyxlについて
-
12
インポート時のエラー「データ...
-
13
文字列内で括弧を使うには
-
14
Filter関数を用いた結果、何も...
-
15
マクロの「SaveAs」でエラーが...
-
16
VBでSQL文のUPDATE構文を使った...
-
17
マクロで"#N/A"のエラー行を削...
-
18
実行時エラー 438 の解決策をお...
-
19
実行時エラー '8021'とはどんな...
-
20
「実行時エラー '3167' レコー...
おすすめ情報
公式facebook
公式twitter