[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA簡潔にしたい』(がんばる事務員)
いつもお世話になっております。
複数表のデータ範囲を削除するマクロを作成しました。
まだ表がたくさん続いており、もっと簡潔にまとめたいのですが、
可能でしょうか。よろしくお願いします。
Sub 表のデータ削除()
Dim セル範囲1 As Range
Dim セル範囲2 As Range
Dim セル範囲3 As Range
Set セル範囲1 = Range("B4").CurrentRegion
Set セル範囲2 = Range("B14").CurrentRegion
Set セル範囲3 = Range("B24").CurrentRegion
セル範囲1.Offset(2, 1).Resize(セル範囲1.Rows.Count - 4, _
セル範囲1.Columns.Count - 1).ClearContents
セル範囲2.Offset(2, 1).Resize(セル範囲2.Rows.Count - 4, _
セル範囲2.Columns.Count - 1).ClearContents
セル範囲3.Offset(2, 1).Resize(セル範囲3.Rows.Count - 4, _
セル範囲3.Columns.Count - 1).ClearContents
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows8 >
どうでしょう?
Sub 表のデータ削除() Dim r As Range For Each r In Range("B4,B14,B24") Debug.Print r.CurrentRegion.Resize(-4, -1).Offset(2, 1).Address(0, 0) 'r.CurrentRegion.Resize(-4, -1).Offset(2, 1).ClearContents Next r End Sub
(稲葉) 2019/02/08(金) 14:31
Sub 表のデータ削除() Dim i As Long, セル範囲 As Range
For i = 4 To 24 Step 10 Set セル範囲 = Cells(i, "B").CurrentRegion セル範囲 .Offset(2, 1).Resize(セル範囲.Rows.Count - 4, _ セル範囲.Columns.Count - 1).ClearContents Next i End Sub
とかですかね、、(未テスト)
(TAKA) 2019/02/08(金) 14:34
間違ってた! >.Resize(-4, -1) .Resize(r.Rows.Count -4, r.Columns.Count-1) (稲葉) 2019/02/08(金) 14:52
お二人の2通り試しましたが、エラーが出ております。
でもこのエラーが解決できればかなりスッキリです!!
自分でもエラー原因を探しておりますが、何か心当たりがあれば教えていただけると助かります。
稲葉様
リサイズ部分の訂正後を当てはめて実行しましたが、
アプリケーション定義またはオブジェクトの定義エラーとでて、下記が黄色になっております。
Debug.Print r.CurrentRegion.Resize(r.Rows.Count - 4, r.Columns.Count - 1). _ Offset(2, 1).Address(0, 0)
TAKA様
参照が不正または不完全ですとでて、
.Offset の所が青色になりました。
(がんばる事務員) 2019/02/08(金) 15:13
Sub 表のデータ削除() Dim i As Long, セル範囲 As Range
For i = 4 To 24 Step 10 Set セル範囲 = Cells(i, "B").CurrentRegion セル範囲.Offset(2, 1).Resize(セル範囲.Rows.Count - 4, _ セル範囲.Columns.Count - 1).ClearContents Next i End Sub
これでokだと思います。
セル範囲と .Offset の間に空欄があったのが原因ですね。 (TAKA) 2019/02/08(金) 15:20
空白に全く気づきませんでした;;
思い通りに動きました!
とても参考になります、ありがとうございました!!
(がんばる事務員) 2019/02/08(金) 15:26
ごめんなさいね。 こうですね
Sub 表のデータ削除() Dim r As Range For Each r In Range("B4,B14,B24") With r.CurrentRegion Debug.Print .Resize(.Rows.Count - 4, .Columns.Count - 1).Offset(2, 1).Address(0, 0) '.Resize(.Rows.Count - 4, .Columns.Count - 1).Offset(2, 1).Address(0, 0).ClearContents End With Next r End Sub (稲葉) 2019/02/08(金) 15:34
今度は、実行しても何もおきませんでした;;
6行目の先頭に「’」がついており、この行は緑色になっています。
これを消すと、この行は黒色になるのですが、
その後実行すると、.Addressが青色になり、修飾子が不正です。とエラーがでます。
こちらも参考にさせて頂きたいのでエラーを直して使えるようにしたいです。
何か心当たりがあれば教えてください。よろしくお願いいたします。
(がんばる事務員) 2019/02/08(金) 16:16
ごめんなさい。 Addressは誤りです。 3回目ですね、ホントにごめんなさい・・・ .Resize(.Rows.Count - 4, .Columns.Count - 1).Offset(2, 1).Address(0, 0).ClearContents →.Resize(.Rows.Count - 4, .Columns.Count - 1).Offset(2, 1).ClearContents こうしてください。
緑色のところはコメントです。 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_040_06.html
基本なので覚えておいてください。
その前の行のDebug.Print はイミディエイトウィンドウに結果を出力しています。 https://tonari-it.com/excel-vba-debug-print/
こっちも大切なのでぜひ覚えておいてください。
他に気になるところは Withステートメント https://www.sejuku.net/blog/33153
For Eachステートメント https://www.relief.jp/docs/excel-vba-range-for-next-loop.html
Rangeオブジェクト(リンク先の「複数の独立したセルを指定する方法」参照) https://www.sejuku.net/blog/28094
覚えてもらえたらうれしいです。 (稲葉) 2019/02/08(金) 16:48
回答遅くなりました;;
ご指摘の通り直したらできました!!!
またご丁寧に解説までありがとうございます!
こちらを参考にしながら勉強がんばります^^
(がんばる事務員) 2019/02/12(火) 10:23
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.