• ベストアンサー

エクセル VBA 選択範囲書込?

エクセルのVBAで Activesheet Range("A1:B2").Selectは Activesheet Cells(???????).Selectでは どのように書き込めば宜しいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

77TAKETAKA
質問者

お礼

ありがとうございます。 罫線の引き方ひとつでも色々ありますね。 上記方法、見やすくわかりやすいです。 おまけ  長々と書き込んでいましたが 簡潔明瞭に書き込めます。 重ね重ねありがとうございます。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 解答そのものは、#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 というメソッドを使う場は、そんなに多くないはずです。

77TAKETAKA
質問者

お礼

実はループ処理でもし、○○なら△△の範囲に ××形式の罫線を引くとゆうようなことがしたかったのですが 自分なりに質問内容を簡単にしてみたのですが Activesheet.Cells(1,1).Resize(2,2).Select 以上を使用すれば書込も簡単で見やすくなります。 ありがとうございます。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

Cells で指定出来るセルは1個なので、複数セルを指定する事はできません。 Range(Cells(1,1),Cells(2,2)).Select

77TAKETAKA
質問者

お礼

そうですか、複数のセルを指定することは 出来ないのですか・・・ 簡潔に説明していただき ありがとうございます。

関連するQ&A

専門家に質問してみよう