[[20190208141612]] 『VBA簡潔にしたい』(がんばる事務員) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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

TAKA様

空白に全く気づきませんでした;;

思い通りに動きました!
とても参考になります、ありがとうございました!!

(がんばる事務員) 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.