- ベストアンサー
ExcelVBAで範囲指定
セル範囲、D3:E15とG3:G15とI3:I15をクリアする場合 Sub Macro2() Range("D3:E15,G3:G15,I3:I15").ClearContents End Sub と書くと思います。 この15行目を変数にする場合 Sub Macro3() Dim x As Long x = 15 Range("D3:E" & x & ",G3:G" & x & ",I3:I" & x).ClearContents End Sub と書く以外にもっと簡単な範囲指定の方法はないでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
X の指定を1回で済ませたいのであれば、 Option Explicit ' Sub Macro1() Dim X As Long Dim Address As String ' X = 15 Address = Replace("D3:E#,G3:G#,I3:I#", "#", X) Range(Address).ClearContents End Sub しかし、貴殿の上げた方法より簡単とは言えません。貴殿の上げた方法が1番簡単ではないでしょうか。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
Unionを使う方法をやってみました。 行は1-9行と固定で、 列に注目して、A列に加えて、第3, 6, 7, 13列を範囲指定追加する例です。 標準モジュールに Sub test01() Range("A1:A9").Select For Each c In Array(3, 6, 7, 13) Union(Selection, Range(Cells(1, c), Cells(9, c))).Select Next End Sub これで指定複数列が、併せて範囲指定できます。 小生の当初予想より簡単でした。
お礼
ありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
こういう方法もあるのでは、ということで書いてみますが、お勧めはしません。 標準モジュールに Sub test01() sr = 3: er = 14 ss = "" For Each C In Array("C", "E", "G") s = C & sr & ":" & C & er MsgBox s ss = ss & s & "," Next ss = Left(ss, Len(ss) - 1) MsgBox ss Range(ss).Select Selection.ClearContents End Sub 内容は、3行目から14行目(自由設定可)で、列はC,E,G列(事由設定可)のセルの値等をクリアします。 MsgBoxの2行は確認のためで、その後は、それらの行は、削除のこと。 Array("C", "E", "G") のところは自由に増減できる。ただし文字列の長さの制限はあります。 Range(ss).Select と Selection.ClearContents は1行で済ませられます。 ーー またUnionを使っても、出来そうに思いますが、やる気がしません。これに時間をかけるより Range("D3:E15,G3:G15,I3:I15")の括弧内の作成に時間をかけた方が、マシでしょう。
お礼
ありがとうございます。ずいぶんおおがかりになるのですね!勉強になりました。
お礼
ありがとうございます。これは面白いくわかりやすい方法です。これで書き間違いがなくなりそうです。