- ベストアンサー
エクセル VBA 選択範囲書込?
エクセルのVBAで Activesheet Range("A1:B2").Selectは Activesheet Cells(???????).Selectでは どのように書き込めば宜しいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 書くのは一度ですから、こんな風にしてもよいです。 私の書いたような、#2 のスタイルにこだわらなくてよいと思います。 こんな罫線の引き方も、自分ではなかなか思いつかないです。 Sub Test1() Dim i As Long Dim j As Long Dim n As Variant i = 3 j = 5 With ActiveSheet For Each n In Array(4, 6) '.Cells(1, 1)を基点とした場合 With .Range(.Cells(1, 1), .Cells(i, j)).Borders(n) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With Next n End With End Sub 'おまけ-罫線削除プログラム Sub Test2() Dim n As Variant With ActiveSheet.UsedRange .Borders.LineStyle = xlNone For Each n In Array(5, 6) .Borders(n).LineStyle = xlNone Next n End With End Sub
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 解答そのものは、#1さんのでよいとして、薀蓄話をひとつ書いておきます。 Range オブジェクトの Cells プロパティと親子のようで、親子ではないので、扱いがややこしいです。簡単なようでいて、こういうところが、Excelの中のVBAの難しいところです。私は、これが分かるようになるまで、何年も掛かってしまいました。 開発当初は、Range は、もともとは、Cells という実を包む皮だったようですが、やがて、Range 側が独立してしまったようです。(もしかしたら、設計の失敗だったのかもしれません。また、VB6 や他のWordやAccess,Outlook と違い、Excelは、標準モジュールをマクロの置き場所の標準としています。) >Activesheet Cells(???????).Selectでは [コンマが入っていません。] ○ Activesheet.Cells(1,1).Select このような場合は、Cellsは、Activesheet が親です。 何もつけないで、 Cells(1,1).Select としても、標準モジュールなら、同じ ActiveSheet が親になります。 しかし、シートモジュールのときには、親は、そのシートモジュールが親になりますから、ActiveSheet と必ずしも同じではないので、不整合になってエラーが発生することがあります。 エラー [実行時エラー '1004': アプリケーション定義またはオブジェクト定義エラーです。] だから、本来、以下のように、[Range, Cells の前にコンマをつけて、それぞれに対して]親と結んであげないと、いけません。 With ActiveSheet .Range(.Cells(1,1),.Cells(2,2)).Select 'Range も Cells も、ActiveSheet を親にするという意味です。 End With これが、標準モジュールなら、親は、Application になるので、Application の下にActivesheet があるので、コンマをつけなくて良いわけです。 例: Range(Cells(1, 1), Cells(2, 2)).Select そこで、最初のご質問に戻って、便利な書き方としては、 Activesheet.Cells(1,1).Resize(2,2).Select '下と横に2セルずつ広げる A1:A10 の場合は、 Activesheet.Cells(1,1).Resize(10,1).Select '下に10セル広げる というようにしてあげると、親子関係としてひとつに結んで(=コンテナで)書くことで、それぞれの関係を一本にして書くことが可能になります。 こんなややこしいことは、すぐには分からなくてもよいけれど、VBAをやっていると、いずれ、こんな話を思い出すときが来るかもしれません。 なお、今回の .Select というメソッドを使う場は、そんなに多くないはずです。
お礼
実はループ処理でもし、○○なら△△の範囲に ××形式の罫線を引くとゆうようなことがしたかったのですが 自分なりに質問内容を簡単にしてみたのですが Activesheet.Cells(1,1).Resize(2,2).Select 以上を使用すれば書込も簡単で見やすくなります。 ありがとうございます。
- hana-hana3
- ベストアンサー率31% (4940/15541)
Cells で指定出来るセルは1個なので、複数セルを指定する事はできません。 Range(Cells(1,1),Cells(2,2)).Select
お礼
そうですか、複数のセルを指定することは 出来ないのですか・・・ 簡潔に説明していただき ありがとうございます。
お礼
ありがとうございます。 罫線の引き方ひとつでも色々ありますね。 上記方法、見やすくわかりやすいです。 おまけ 長々と書き込んでいましたが 簡潔明瞭に書き込めます。 重ね重ねありがとうございます。