- ベストアンサー
Excel VBAで2~4列目の3行目以下を選択
- Excel VBAを使って、2列~4列目の3行目以下すべてを選択する方法について教えてください。
- 現在はcells(2,1)からcells(4,5000)までを選択する方法を使っていますが、この方法だと不都合が多いです。
- それ以外に、3行目までを除外する方法があれば教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
いろいろな書き方があると思います。 3つほど例をあげました。 2003とそれ以降ではシートの行数が違うので数値で失敗されたのだと思いますが、以下はバージョンにかかわらず大丈夫です。 Sub test01() Worksheets("Sheet1").Activate Range("B3:D" & Rows.Count).Select End Sub Sub test02() Worksheets("Sheet1").Activate Range("B3", Cells(Rows.Count, "D")).Select End Sub Sub test03() Worksheets("Sheet1").Activate Columns("B:D").Resize(Rows.Count - 3).Offset(3).Select End Sub
その他の回答 (4)
- merlionXX
- ベストアンサー率48% (1930/4007)
ANo3 merlionXXです。 > Sub test03() > Worksheets(1).Activate > Range(Columns(55), Columns(60)).Resize(Rows.Count - 12).Offset(10).Select > End Sub > だとうまくいきました。 .Resize(Rows.Count - 10).Offset(10)でないと ワークシート一番下の2行は選択されてませんよ。
お礼
意味がわかりました。 要は、Rows.Count - 10以上にしないと、選択範囲がExcelの最大許容の行数をオーバーしちゃうということですね。ありがとうございました。
- keithin
- ベストアンサー率66% (5278/7941)
当初のご相談は >3行目以下すべてを選択する という事でしたのでシートの最下行まで選択する旨回答しましたが,現実には たとえば range("B3:D" & cells.specialcells(xlcelltypelastcell).row).select はたまた range(range("B3"), cells(cells.rows.count, "D").end(xlup)).select などのようなことではないのですか。
お礼
回答ありがとうございました。下記のうち Sub AA() Range("B3:D" & Cells.SpecialCells(xlCellTypeLastCell).Row).Select End Sub は、要求仕様に合致しているように見えますが、 Sub AB() Range(Range("B3"), Cells(Cells.Rows.Count, "D").End(xlUp)).Select End Sub は、B列のデータが入っている最終行の行数が、D列のそれより大きいときに、 B列の最終データが選択されていないので、要求仕様にあっていないようにみえます。 要は、。While文なんかで吐き出した、どこが終わりかわからないデータを 一斉にクリアしたいということです。 計算アルゴリズムによっては、どの行もデータ数が違う場合もある。 (例えば、乱数でA,B,C3グループにわけた人たちが、適当な時間に 待ち行列を作り、5分のアトラクションに入り、女性を優先して入場させた場合に、 アトラクションから出てきた人がいつ出てきたかの予想など。
- KURUMITO
- ベストアンサー率42% (1835/4283)
次のようにしてはどうでしょう。 Range("B3:D3").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlDown)).Select データの入力が一か所には無くばらばらの行にある場合にはRange(Selection, Selection.End(xlDown)).Selectを追加して記載すればよいでしょう。
お礼
(3)の方法でうまくいったので、未確認ですが、取り急ぎお礼まで。ありがとうございます 確認して、補足にてコメントさせていただきます。
- keithin
- ベストアンサー率66% (5278/7941)
range("B3:D" & cells.rows.count).select などで。 しかし >数字を大きくしすぎると 現実的に,一体全体どこまで大きくなる可能性があるのですか。 程度問題のお話のように思えますが。
お礼
回答ありがとうございました。 cells.rows.countを終点にするというのがポイントということですね。
お礼
丁寧なご回答ありがとうございました。いずれの方法でもうまくいきました。 取り急ぎお礼まで。ありがとうございます。詳細は、補足にて、追ってコメントさせていただきます。 急いでいただいたのに申し訳ありません。
補足
回答の趣旨は 要は、Rows.Countまで選択するということで、ある列のある行以降全ての行がExcelVBAで選択でき、 Columns.Countまで選択するということで、ある行のある行以降全ての列がExcelVBAで選択できるということですね。 ■以下、ご報告。 http://www.gizcollabo.jp/vbtomo/log/archive/choshoqa_27320_0.html のような、cellsメソッドの失敗が、まれに出る以外、特に問題なく駆動しています。 Excel VBAで2~4列目の3行目以下を選択 Sub test01() Worksheets("Sheet1").Activate Range("B3:D" & Rows.Count).Select End Sub でうまくいきました。 いただいたものもうまくいき、 Sub test02() Worksheets("Sheet1").Activate Range(Cells(3, 2), Cells(Rows.Count, 4)).Select End Sub でうまくいきました。 55列~60列目の11行目以降(11行を含む)とする場合、Resize()内の数字をある程度大きくしないとうまくいきませんでした。 Sub test03() Worksheets(1).Activate Range(Columns(55), Columns(60)).Resize(Rows.Count - 12).Offset(10).Select End Sub だとうまくいきました。 Excel2000で sub() Cells(1, 2) = Rows.Count end sub と入力すると、Excel2000で65536と出るので、恐らく、 当該バージョンのExcelの行数=Rows.Countなのだと理解いたしました。また、Rows.Countで調べると、以下のサイトがヒットしました。 http://www.konomiti.com/vba01_3-2.html この意味で、 Sub test02() Worksheets("Sheet1").Activate Range(Cells(3, 2), Cells(5, Columns.Count)).Select End Sub としてみると、特定の行の頭数個を飛ばして、選択するということも出来ました。