• ベストアンサー

エクセル 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

  • エクセルVBA:範囲選択について

    初歩的な質問ですが、よろしくお願いします。 Excel2000です。 グラフを描くための範囲選択をしたいのですが、うまくいきません。 状況は、 ・列A、列Bにデータが入っている。(データの数はAB同じで2行以上) ・開始点は一定。(ここでは、行10と仮定します) ・終了点が変化する。(但し、終了点は常に一番下のデータ) これだけです。 一番下のデータを参照するので、 Range("A10 : Range("B10").End(xlDown)").Select Range("A10 : Range("B65536").End(xlUp)").Select Range("A10 : Cells(ActiveSheet.Rows.Count, 2).End(xlUp)").Select と書きましたが、全てダメでした。 直接書くのがダメなら変数を使おうと思い、 Dim StopCell as Range Set StopCell = Range("B65536").End(xlUp) Range("A10 : StopCell").Select と書きましたが、ダメでした。 このとき、変数StopCellには「セル」ではなく、「セルの値」が代入されているようです。 Valueと書いていないのに値が代入されていること、オブジェクト変数なのに数値が代入されていることが納得できません。 どこをどのように間違えているのでしょうか。 また、目的のマクロはどのようになるのでしょうか。 大村あつし著「かんたんプログラミングExcel2000VBA基礎編」および「同 コントロール・関数編」で勉強していますが解決しません。 ご教授ください。

  • エクセルVBAでセル選択するコードが変

    エクセルのワークシートでVBAでセル選択するコードで理解に苦しむことがあります。 通常、Cells(2, 1)はセル番地で言えばA2セル Cells(4, 1)はセル番地で言えばA4セルです。 しかし、 With .Range("B5:B15")でくくれば  .Cells(2, 1)はセル番地で言えばB6セルだと思います。 .Cells(4, 1) はセル番地で言えばB8セルだと思います。 ところが下記のコードを動かすと、なぜかC10:C12が選択されてしまいます。 この理屈がわかりません。 Sub test02()   With Sheets("Sheet1")     With .Range("B5:B15")       .Range(.Cells(2, 1), .Cells(4, 1)).Select     End With   End With End Sub なお、 .Range(.Cells(2, 1), .Cells(4, 1)).Selectを .Range(“A2:A4”).Selectに書きかえると、希望のB6:B8が選択されます。

  • VBAの記述の仕方で

    エクセルのVBAで、A1に Range("B1").Select という文字列を入力させたいのですが、以下の記述だといずれもエラーになってしまいます。 Cells(1, 1).Value = Range("B1").Select   Cells(1, 1).Value = "Range("B1").Select"   どこをどう直せばいいのでしょう?

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

  • エクセルのVBAで悩んでいます。

    いつもありがとうございます。 エクセルのVBAで悩んでいます。 セルの範囲指定をVBAで行いたいのです。 ただし、引数に数値変数を使用する為、Cellsプロパティを使います。 すると、離れている範囲の範囲指定が出来ないのです。 例えば、Rangeプロパティだと、 Range("A5:E5,A9:E32").Select こうなるところを、 A9:E32 を変数に置き換えたくて、 Range("A5:E5", Cells(g, 1), Cells(h, 5)).Select と、するとエラーが出ます。 VBAの前文は次の通りです。 Private Sub CommandButton1_Click() a = Me.TextBox1.Value b = Me.TextBox2.Value Set c = Range("a:a").Find(what:=a, LookIn:=xlValues, lookat:=xlWhole) Set d = Range("a:a").Find(what:=b, LookIn:=xlValues, lookat:=xlWhole) 'MsgBox c + d e = c.Address 'MsgBox e f = d.Address 'MsgBox f g = Range(e).Row MsgBox g h = Range(f).Row MsgBox h Range(Cells(g, 1), Cells(h, 5)).Select End sub よろしくお願い致します。

  • エクセル VBA の行選択

    エクセルVBAで行を選択する場合 Rows(1,1).select Range(Cells(2,2),Cells(5, 5)).EntireRow.Select の方法があると知りました。 この数値の部分に変数を入れるとエラーがでてしまいました。 どうすれば変数で行を選択することができるのか教えてください。 2003を使用しております。

  • EXCEL VBAのRangeプロパティについて

    EXCEL VBAのRangeプロパティについて 下の2つのプログラムで表示されるメッセージは、 プロシージャAは"$B$1" プロシージャBは"$A$1" なのですが、Rangeプロパティはどういう使われ方をしているのでしょうか? お教えくださいませ。 ・プロシージャA Sub test1() Cells(1, 2).Activate MsgBox ActiveCell.Range("A1").Address End Sub ・プロシージャB Sub test2() Cells(1, 2).Activate MsgBox ActiveSheet.Range("A1").Address End Sub

  • エクセルVBAで指定範囲内のオートシェープを選択

    エクセル2000です。 仮にワークシートのRange("A1:B5")の範囲の中に貼り付けられたオートシェープの直線をまとめて選択する場合にはどのように書けばいいのでしょうか? Sub TEST() Application.Intersect(Range("A1:B5"), ActiveSheet.Lines).Select End Sub とやってみましたが、エラーでした。 どうぞよろしくお願いします。

  • エクセル2000のVBAのcutメゾット

    エクセル2000でセルを他のセルの文字から検索し検索されたセルを特定の場所にコピーし貼り付けるのを空欄になるまで繰り返すVBAを作りました。 Dim a As Range Dim b As Long b = 1 Do Until Cells(2 + b, 5).Value = "" Cells(2 + b, 5).Select Set a = Range("B:B").Find(what:=Cells(2 + b, 5).Value) a.Select Selection.Copy Cells(2 + b, 8).PasteSpecial xlAll Cells(2 + b, 5).Select b = b + 1 Loop なんですが、これだとちゃんと起動するのに「copy」を「cut」に変更したら、「pastespecial」でデバックが発生し止まってしまいます。 どちらかというと、コピーより切り取りして貼り付けたい(んで、残ったセルを検索しメッセージボックスで表示出せたい)のですが、このVBAだとcutメゾットは使えないのでしょうか? また使えるのならば「pastespecial」でなければ、何を使って貼り付ければよいのでしょうか?

  • エクセルVBAの保存

    毎月異なった新しいエクセルファイルに同じような加工を施すため、VBAを書きました。対象はActivesheetとしています。 で、質問は、この新しいエクセルファイルの標準モジュールにいちいちこのVBAをコピーペーストせずに実行する方法です。 きっと何かあるとは思うのですが・・・・。 VBAは次のような簡単なものです。 Sub 加工1() Dim e As Integer, s As String, n As String e = Range("A4").End(xlDown).Row s = Replace(Mid(Range("A2"), 8, 5), "年", "") & "-" n = Replace(Mid(Range("A2"), 19, 5), "年", "") & "-" Range("A1:C2").MergeCells = False Columns("B:B").Select Selection.Insert Shift:=xlToRight Columns("A:A").Select Selection.Insert Shift:=xlToRight Columns("C:C").Select Selection.NumberFormatLocal = "G/標準" Range("B3").Select Selection.AutoFill Destination:=Range("B3:C3"), Type:=xlFillDefault Range("B3").Select ActiveCell.FormulaR1C1 = "商品番号1" Range("C4").Select ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],10)" Range("C4").Select Selection.AutoFill Destination:=Range("C4:C" & e), Type:=xlFillDefault Range("A3").Select ActiveCell.FormulaR1C1 = "抽出年月日" Range("A4").Select ActiveCell.FormulaR1C1 = s & n & 1 Range("A4").Select Selection.AutoFill Destination:=Range("A4:A" & e), Type:=xlFillDefault Rows("3:3").Select Selection.Insert Shift:=xlDown Range("B1:E1").MergeCells = True Range("B2:E2").MergeCells = True ActiveSheet.Name = "提出用" End Sub

このQ&Aのポイント
  • ts8330をWi-Fiルーターを通してパソコンと繋いでいますが、印刷ができなくなったり、時間がかかるようになりました。無線強度の影響や接続方法の選択肢などが原因と考えられます。
  • 印刷問題を解決するためには、まず無線強度を確認し、Wi-Fiルーターとの接続を改善することが重要です。また、別の接続方法としてダイレクト接続も選択肢の一つです。
  • ダイレクト接続は、パソコンとプリンターを直接接続する方法で、環境によっては安定した印刷ができる場合があります。お電話での説明も可能ですので、詳細についてはキヤノン製品のサポートセンターにお問い合わせください。
回答を見る

専門家に質問してみよう