Excel VBAの使い方に疑問がある!一行選択と複数行・列選択の違いは?

このQ&Aのポイント
  • Excel VBAにおいて、一行選択する場合は引数を囲まずに指定しますが、複数行選択する場合は引数を引用符で囲む必要があります。なぜこのような違いがあるのか疑問です。
  • また、複数列を選択する場合、columns("2:5").selectでは実行時エラーとなります。なぜcolumns関数では複数列を選択できないのでしょうか?
  • Excel VBAの使い方について、一行選択と複数行・列選択の違いについて疑問があります。一行選択する場合は引数の囲み方が異なる点について、また複数列を選択する際にcolumns関数が使えない理由についてご教示ください。
回答を見る
  • ベストアンサー

エクセル vbaのなぜこうなるのか?

こんばんは。 単純な事かもしれませんが、ちょっと疑問に思ったので質問させていただきました(Excel2000使用)。 ・一つ目 2行目を選択する場合 ⇒ rows(2).select 2行目から5行目までを選択する場合 ⇒ rows("2:5").select ☆☆質問☆☆ 一つの行を選択する場合は引数を("")で囲わないのに、複数行では引数を""で囲わないといけないのか? ・2つ目 2行目から5行目までを選択する場合 ⇒ rows("2:5").select 2列目から5列目を選択する場合 ⇒ range(columns(2),columns(5)).select ☆☆質問☆☆ なぜ複数列を選択する場合、columns("2:5").selectでは実行時エラーとなるのか? 素人にも理解できるような回答をお願いいたします。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

Rows、Columnsは複数形なのでコレクションと言う 集合です。特定の範囲を示すにはインデックスか 名前で一意にしなければいけません。 つまり、数値でも文字列でも指定可能です。 要するにExcelが解釈できるものなら何でもよい ということです。 A1型では3行目のB列はRange("B3")と表わす ように行は数字、列は英字であることが必要です。 よって、Rows(2)はRows("2")と書くことが可能だし、 Columns(2)はColumns("B")とも書けます。よって、 Columns("2:5")はColumn("B:E")が正しいのです。 整数(インデックス="なし)はいずれも使用可能です。 コレクション名が違うので、Columns("2:5")でもよいと 私個人は思うのですが、MSの設計技術者が決めた ルールですので、「こういうものか」と納得するしか ありませんね。

sukeroku111
質問者

お礼

おはようございます。早速のご回答ありがとうございます。 非常に興味がある回答で勉強になりました。 またColumns("2:5")についても、設計上に理由という事でスッキリしました。 ありがとうございました。

関連するQ&A

  • エクセルVBAで複数列データを1列に配列替えしたい

    先日この欄で教えていただいたのですが、 確認を忘れてしまい、うまくゆかないので再質問させていただきます。 複数列の複数行(例A列3行~F列20行)に関数式によるデータが入っています。 これを縦1列に配置替えしてテキストにoutputするということで次のVBAを教えてもらったのですが 途中で止まってしまいました。お知恵を貸してください。 Sub closs() Dim myRng As Range Dim i As Long Sheets("データシート").Select Set myRng = Range(ActiveCell, ActiveCell.End(xlDown).End(xlToRight)) Sheets("貼り付け").Select For i = 1 To myRng.Columns.Count  Range("A1").Offset((myRng.Rows.Count) * (i - 1)).Resize(myRng.Rows.Count) _   = myRng.Columns(i).Value Next End Sub ※例としてA列3行~F列20行を1グループとして縦1列に配列替えをしてテキストに出力する。 ※マウスによるカーソル位置をデータトップのA3またはそれより上の空欄において実行する。 ※グループの途中(例A21~F24)を空欄(関数式なし)として次のグループが存在し、グループか存在する場合同じ作業を繰り返し 別のテキストにoutputする。 ※列を増やしたい場合の対応もできるようにしておく。 よろしくお願いします。

  • エクセルVBA Columnプロパティで・・・

    エクセル2002使用です。 FindメソッドでRangeオブジェクトを取得し、Columnプロパティでそのオブジェクトの列番号をを取得し、Columnsプロパティーでその列番号が最後になる複数行を取得して、その取得した範囲の空白セルを削除しようとしています。 Dim findcell as Range Dim cl as String Set findcell = Rows(1).Find(What:="賞") cl = findcell.Column Columns(3:cl).SpecialCell(xlCellTypeBlanks).Delete Columns(3:cl)でエラーとなってしまいます。 Columnsプロパティーで複数行を取得するときは、アルファベットの列番号を指定しなければならないと思うのですが、Columnプロパティーでは、数字で列番号を取得してしまうため困っています。 Columnプロパティーでアルファベットを取得する方法 または Columnsプロパティーで複数行を数字の列番号で取得する方法で何か良い方法はありますでしょうか? よろしくお願いします。

  • エクセル VBA の行選択

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

  • vba 離れた列を選択するには?

    Range(Columns(5), Columns(10)).Select これだと5列目から10列目の全てが選択されてしまいます。 荘ではなく、5列目と10列目のみ選択状態にするにはどうすればいいでしょうか? 列はアルファベッドではなく数値で指定したいです。

  • EXCEL VBA で,プログラムが動かない.

    EXCEL2000のVBAでプログラムを組みました.(下に記す) 数千行に及ぶ数字のデータがあるのですが,20行に1回だけ,いらないデータが3行出てきます.その3行を削除していくプログラムです.Rangeのところで行を選んで欲しいのに,p列とq列を選んでしまうようです.RangeをRowsに変えたらエラーが出ました.こういう場合はどのように書けばいいのでしょうか.誰か教えてください.お願いします. Sub 削除() '20行ごとに入っている3行を削除していく. Dim i As Integer Dim p As Integer Dim q As Integer p = 21           'pの初期値は21 For i = 1 To 500 q = p + 2 r = "p:q" Range(r).Select Selection.Delete shift:=xlUp p = p + 20 Next i End Sub

  • ExcelのマクロでColumnsに変数を使いたい

    久しぶりにExcelのマクロについて質問させてください。 Rows(ActiveCell.Row & ":10").RowHeight = 0 これで、例えばセルB3を選んだ状態で このマクロを実行すれば 行3~10の行幅が0になりますよね。 しかし 同じようにセルB3を選んだ状態で 列B~Jの列幅を0にしようとして Columns(ActiveCell.Row & ":10").ColumnWidth = 0 を実行しても 実行時エラー'1004'というエラーが表示されます。 もちろん Range(ActiveCell, Cells(1, 10)).ColumnWidth = 0 とすれば、目的そのものは達成できるのですが Rowsがすっきりしているのに比べて どうも分かりやすいとは言えない気がします。 特に、実際には単純に「10」ではなく 変数を使って列の終点を指定したいだけに Columnsを使えるならそれに越したことはないと思うのです… 以上、マクロに詳しいかたには どうでもいいことなのかもしれませんが もしColumnsを使うことができるのでしたら その方法をお教えいただければ幸いです。 以上、よろしくお願いいたします。

  • エクセルVBAでセル範囲選択→並べ替え

    大きなデータを選択する場合でA列には空白がない場合、 Range("A1").CurrentRegion.Select でいいと思うのですが、このデータを並べ替えようとするとき、1行から4行めには別の文字列がはいっており、5行目以下がデータであるとき、 Range("A1").CurrentRegion.Offset(4).Selectで下にさげると、最終選択範囲も下がってしまいます。 最終の範囲を変えず、開始位置を5行目にかえるにはどうすればよいのでしょうか?

  • エクセルVBAで

    いつもお世話になります。 Range("a1:C5,E5:H10").Select Selection.ClearContents この選択範囲をそれぞれ5列ずつづらしていきたいのですがfor文を使って出来るでしょうか? セルが1つならcells(1,5n)とすればいいのですが,範囲が連続で複数の場合(rangeを使った場合)はどうすればいいのでしょうか。

  • Excel VBA セルの選択方法

    こんばんは。 セルの選択方法をお聞きしたいのですが、 SheetAのB2のセルの値を SheetBのリストの最下行(例えば12)からn行目(例えばn=3だったら12行目から15行目)を選択し、SheetAのB2のセルの値を貼り付ける方法を教えてください。 方法は複数あると思うのですが、考えにいきずまってしまいました。 Range("B2").Copy For i = 1 To n Worksheets("Sheet2").Range("b65536").End(xlUp).Offset(1).Select ActiveCell.Parse Selection..Resize(.Rows.Count + [n]).Select それと   Dim cntRow As Integer Dim cntCol As Integer cntRow = Selection.Rows.Count + 1 cntCol = Selection.Columns.Count + 1 Selection.Resize(cntRow, cntCol).Select 上のようなResizeを使って、表(例えばC3~E10)を貼り付けた隣のセル、(例えばB3~B10)のセル番地を取得して、 SheetAのB2のセルの値を貼り付ける方法も教えていただけないでしょうか。 基本的なことをお聞きするようですが、宜しくお願い致します。

  • エクセル 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 のようにしたいのですがどこが悪いのでしょうか? よろしくお願いします。

専門家に質問してみよう