• ベストアンサー

エクセルマクロの行選択

複数行選択するマクロで Rows("1:10").Select の括弧の中に変数を入れたいのですがうまくいきません。"や&を使ってみたのですがいまいちわかりません。 よろしくお願いします。

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

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

こんばんは。 回答は、すでに出ていますが、当分は、Rows(i &":" & j).Select のような書き方でよいと思います。(VB系以外の人からみると、かなり乱暴な書き方に見えるようですが、これが、VB系の利点でもあります。自動キャスティングで、i も j も、& ":" &で、文字になってしまうのですから。) 他の書き方で、Rangeオブジェクトを使う方法は、その上位オブジェクトが見えていないと、実行時エラーを起こします。Rangeオブジェクトのプロパティは、その中に、Rangeオブジェクトを入れられますが、外と中のオブジェクトとは、一切のつながりがありませんから、ミスをしやくすなります。だから、私は、With ステートメントを使います。 With ActiveSheet  .Range(.Cells(i, 1), .Cells(j, 1)).EntireRow.Select End With また、今回のような場合は、 Rows(i).Resize(k).Select i で行を決めたら、k は、それから何行という書き方で、Resize プロパティを使うことが多いです。

tanaka2030
質問者

お礼

ありがとうございます。 &”の使い方がいまいちよくわかりません。 >自動キャスティングで、i も j も、& ":" &で、文字になってしまうのですから。 とは?簡単に教えてください。 今回とは違う使い方もあるようで?です。→" & 変数 & "

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

一旦文字列にセットしてみると、VBAのありがたさがわかる Sub test01() Dim s As String i = 5 j = 10 s = i & ":" & j Rows(s).Select Selection.Delete End Sub ーー Sub test02() i = 10 Range("A" & i).Select End Sub が可能なのと一緒。 しかしどっこい Sub test03() Dim s As String i = "A" J = 10 s = i & J Worksheets("Sheet1").Range(s).Select End Sub ーーー Sub test04() Dim i As String i = "A10" Worksheets("Sheet1").Range(i).Select End Sub はエラーになる。

tanaka2030
質問者

お礼

ありがとうございます。 test04は間違えてやってしまいそうです。 大変参考になりました。 また機会がありましたらよろしくお願いします。

  • Yosha
  • ベストアンサー率59% (172/287)
回答No.5

>自動キャスティングで、i も j も、& ":" &で、文字になってしまうのですから。とは?簡単に教えてください。 Rows()は、数値(変数を含む)で使用するときは、対象は1行です。範囲を対象とするときは、括弧の中は文字列で表現しなければなりません。例えば「Rows("1:10")」のようにです。 このなかの数字を変数で扱いたいときに、Rows("i:j")や、Rows("i" & ":" & "j")としてもi、jが変数として機能しなくてうまくいきません。しかし、本来の使い方とは違うけれども、もしRows(数値変数1 & ":" & 数値変数2)という形で使えるならば便利ではないかと考えるようになります。 これを実現させたのが、EXCELの自動キャスティングです。 EXCELは、事前に変数を定義していても、状況によって、数値として取り扱うのか、文字として取り扱うのかを判断し、そのときだけ一時的に内部で変数の「値」を文字列とか、数値とかに変換処理して実行しています。 ちなみに、 Dim a As Integer, b As Integer a = 1: b = 2 Cells(1, 1).Value = a + b Cells(2, 1).Value = a & b または Range("A1") = a + b Range("A2") = a & b を実行してみてください。セル"A1"に"3"、セル"A2"に"12"が入りました。 即ち、数値として定義した変数[a][b]を、セル"A1"では数値として、セル"A2"では文字列としてEXCELが自動的に変換して処理したわけです。 この機能は、便利な面と、定義通りに動いてくれないためにエラーを誘う可能性があるという迷惑な面とがあります。 このあたりのことを、Wendy02さんがANo.2でおっしゃっています。

tanaka2030
質問者

お礼

ありがとうございます。 =が【等しい】と【代入】を自動で区別している見たいなものなんですね。 大変参考になりました。

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

こんにちは #3の回答者です。 >今回とは違う使い方もあるようで?です。→" & 変数 & " と考えるとややこしくなります。 「" & 変数 & "」 は、「"文字列" & 変数 & "文字列"」 という組み合わせです。 「&」は、文字列と文字列をつなぐ演算子。「"文字"」は、「""」のセットで、本当の文字扱いになるわけです。 そうはいっても、複雑なものに対して、誰もが、それを一回で書けるとは思えません。 たとえば、 ret = WorksheetFunction.Substitute(TextLine, """", "") こんなスタイルがあります。---「""」を取り除け --- という意味です。つまり、「""」を『""』で囲んでいます。 これ以上複雑な内容などは、イミディエイト・ウインドウ(Debug.Pring)の使い方を覚えたりして、チェックしていくしかないと思います。 (註:余計な突っ込みされると嫌なので、それは、あくまでも、基本の規則だけの話です。他の言語を応用した場合などは、除きます。)

tanaka2030
質問者

お礼

ありがとうございます。 「"文字列" & 変数 & "文字列"」と書かれればなるほどそうかとわかりましたが、""の中に(が入っていたせいでわかりづらく、変な使い方があると勘違いしてしまいました。大変参考になりました。ありがとうございました。

  • Yosha
  • ベストアンサー率59% (172/287)
回答No.2

Range(Rows(変数a), Rows(変数b)).Select Rows(変数a & ":" & 変数b).Select 上の式のほうが、使い易いようです。 Rangeオブジェクトの括弧内を、Rowsプロパティ、Columnsプロパティ、Cellsプロパティに変えるだけで、同じフォーマットで使えるので覚え易く、利用範囲も広がります。

tanaka2030
質問者

お礼

ありがとうございます。 Range(Rows(変数a), Rows(変数b)).Select 確かに使いやすいです。 &”の使い方がいまいちよくわかっていないのでこっちのほうがいいです。 また機会がありましたらよろしくお願いします。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Dim i As Long Dim j As Long i = 4 j = 12 Rows(i & ":" & j).Select MsgBox "とか" i = 16 j = 22 Range(Cells(i, 1), Cells(j, 1)).EntireRow.Select こうゆう感じの事でしょうか?

tanaka2030
質問者

お礼

ありがとうございます。 Rows(i & ":" & j).Select これです。 また機会がありましたらお願いします。

関連するQ&A

  • エクセルマクロで行の選択のしかた

    教えてください。エクセルマクロで… 変数iを使って、たとえばi行目からi+2行目を選択したい場合、  rows( ) の括弧の中はどういう風に記述すれば良いのでしょうか。 お願いします。

  • エクセルの行選択マクロ

    エクセル2010にて。 行を選択した状態から、1行目から現在行の1つ上までを選択し、それを非表示とするマクロを組みたいのです。 VBAは全く分からず・・・ 変数を宣言し、その変数を代入すれば良いかと試行錯誤しましたが判らず。 Sub 3行目から現在行より上を選択して非表示() '  Dim x As Integer  x = ActiveCell.Row Rows("3:x-1").Select Selection.EntireRow.Hidden = True End Sub では、全く動作せず。。 例えば20行目を選択した状態で、マクロを実行すると3~19行目までが非表示になるようにしたいのです。御教示下さいませ。

  • エクセルのマクロで行選択の選択範囲を変数指定する方法

    あるファイルのデータを別のファイルに行挿入でコピーするマクロを作ろうとしています。 コピー元の選択について、行範囲が固定であれば例えば   Rows("10:20").Select でよいのですが、コピー元行範囲がファイルにより異なるので変数化する必要があります。 単純には、 Sub Row_Copy() Dim AA, BB As Integer AA = 10 BB = 20 ' 10行目から20行目を行選択しコピーする Rows("AA:BB").Select '##ここが問題## Selection.Copy ' ' (簡単のため)同じシートに行挿入する例 Rows("30:30").Select Selection.Insert Shift:=xlDown End Sub ですが、これだと Rows("AA:BB").Select の部分でエラーになります。 いろいろとやってみましたが、どうしても何らかのエラーになってしまいます。Rowsは変数では使用できないのでしょうか? ちなみに、行範囲の選択ではなくRangeでセル範囲の選択をするという方法もありますが、複数ファイルのデータをコピー先の一つのファイルにマージするために行挿入でコピーしたいことと、列方向の柔軟性を持たせたいため、コピー元選択方法として行範囲の指定をしたいという趣旨があります。 また、1行毎のコピー・行挿入をデータの行数だけ繰り返すという手もありますが、データ量が多いとかなり処理時間がかかるためこれも避けたいと思っています。 マクロ初心者で知識不十分ですが、よろしくお願いします。

  • エクセル マクロ記述(変数を使用した行選択)

    はじめまして。現在マクロで仕事に必要な操作を組んでいます。まだ勉強を始めたばかりで分からないところがあります。以下の操作をしたい場合、記述はどのようにすればよろしいでしょうか? 複数行の選択方法 ○5行目から27行を選択したい場合、以下の記述で  操作確認済みです。  Rows("5:27").Select ○しかし、実際は最後の行が決まっていないため、  最終行の数字を変数として扱いたいのです。  その最終行の数字をF1のセルに記載するようしています。  記述を以下のようにしましたがエラー表示になります。  変数名をintlineとした場合  dim intline as integer  intline=range("f1")  rows("5":intline).select 初歩的な質問かもしれませんが、ご存知の方は教えていただけますか? 宜しくお願いいたします。

  • エクセル VBAで複数行の選択

    エクセル2002使用です。 VBAで変数を使って複数行の選択で、6行目から9行目までを選択したいのです。 sub macro2() Dim rw As Integer rw=8 Rows("rw - 2:rw + 1").Select end sub だとエラーになります。 Rows("6:9").Select のようにしたいのですがどこが悪いのでしょうか? よろしくお願いします。

  • マクロでの行選択

    Excelのマクロについて質問です。 例えば、A1~A5セルをセル結合したときに、3行目~5行目を行選択 しようとしたときに手動で行なうとうまく選択できるのですが、マクロ で実行するとなぜか結合されている1行目から5行目が選択されて しまいます。 具体的に以下のようなマクロを書きました。 Rows.("3:5").select 手動のみでマクロ化は無理なのでしょうか? 今のままですと、一回連結をといてセルを選択して処理を実行、その のちにセルを再び連結させるということをやらなければいけなくなって しまいます。

  • エクセル VBA の行選択

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

  • 変数を使って行選択

    おそらく他愛のない質問だとは思うのですが教えてください。 Rows(3:3)select とやると、アクティブなシートの3行目が選択されると思います。 3のところを両方とも変数にするとか、 たとえばforを使ってカウントアップさせている変数の値と同じ行を 選択させるにはどのように入力すれば良いものでしょうか? ご教授願います。

  • EXCELマクロデータのある行より下の行削除の構文

    EXCELマクロ構文について教えてください。 データのある行のひとつ下の行全体選択し、 Ctrl+Shift+↓で下部行全て選択し、右クリックで削除する 操作をマクロにしたいのでですが、 マクロ記録では上の操作は Rows("189:189").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlU  になります。 この 189 という数字は 下記の変数定義で「lastRow」として取得できるのですが Dim lastRow As Long lastRow = Sheets("2CVS関西").Cells(Rows.Count, 2).End(xlUp).Row + 1 189にlastRow に置き換える方法お教えください。

  • ”アクティブセル行」の一行下を選択”するマクロ

    ■ ”アクティブセルの、1個下の行を選択し、新しい空白行を一行挿入” ■次にその”アクティブセルのA列とB列の値を、  新しく作った空白行に、コピー  ・・・といったマクロを組もうとしております。 たとえば 12行目を選択するプログラム(コマンド?マクロ?)は、  Rows(12:12) となっていたので、それにならって Rows(activecell:B) などとやってみたのですが、うまくいきませんでした。 このような場合、どうしたらよいのかアドバイスをいただけると助かります。 どうぞ、よろしくお願いいたします。  

専門家に質問してみよう