教えて! goo のコンテンツに対する取り組みについて

Excel VBAで2列~4目の3行目以下すべてを選択する方法は、ないでしょうか?


2列~4目すべてを選択というのは、比較的簡単で、たとえば

Sub 2to4 ()
  Worksheets("Sheet1").Activate
  Columns("B:D").Select
End Sub

とでも書けばよいのでしょうが。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …



要はこれから3行目までを除外する方法があればいいわけですが、
そういう方法があったら教えてください。


今は、cells(2,1)から、cells(4,5000)までを選択といったように
原始的な方法でやってますが、この方法だと数字を大きくしすぎると
2003以前のバージョンでトラブり、数字を小さくしすぎると、選択しきれなかったりと…。
いろいろ不都合が多いので…。

gooドクター

A 回答 (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

この回答への補足

回答の趣旨は
要は、Rows.Countまで選択するということで、ある列のある行以降全ての行がExcelVBAで選択でき、
Columns.Countまで選択するということで、ある行のある行以降全ての列がExcelVBAで選択できるということですね。

■以下、ご報告。
http://www.gizcollabo.jp/vbtomo/log/archive/chos …
のような、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

としてみると、特定の行の頭数個を飛ばして、選択するということも出来ました。

補足日時:2011/05/18 20:10
    • good
    • 0
この回答へのお礼

丁寧なご回答ありがとうございました。いずれの方法でもうまくいきました。
取り急ぎお礼まで。ありがとうございます。詳細は、補足にて、追ってコメントさせていただきます。
急いでいただいたのに申し訳ありません。

お礼日時:2011/05/17 02:15

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行は選択されてませんよ。
    • good
    • 0
この回答へのお礼

意味がわかりました。
要は、Rows.Count - 10以上にしないと、選択範囲がExcelの最大許容の行数をオーバーしちゃうということですね。ありがとうございました。

お礼日時:2011/05/19 23:15

当初のご相談は


>3行目以下すべてを選択する

という事でしたのでシートの最下行まで選択する旨回答しましたが,現実には
たとえば
range("B3:D" & cells.specialcells(xlcelltypelastcell).row).select
はたまた
range(range("B3"), cells(cells.rows.count, "D").end(xlup)).select
などのようなことではないのですか。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。下記のうち

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分のアトラクションに入り、女性を優先して入場させた場合に、
アトラクションから出てきた人がいつ出てきたかの予想など。

お礼日時:2011/05/18 22:23

次のようにしてはどうでしょう。



Range("B3:D3").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select

データの入力が一か所には無くばらばらの行にある場合にはRange(Selection, Selection.End(xlDown)).Selectを追加して記載すればよいでしょう。
    • good
    • 0
この回答へのお礼

(3)の方法でうまくいったので、未確認ですが、取り急ぎお礼まで。ありがとうございます
確認して、補足にてコメントさせていただきます。

お礼日時:2011/05/17 02:12

range("B3:D" & cells.rows.count).select


などで。



しかし
>数字を大きくしすぎると
現実的に,一体全体どこまで大きくなる可能性があるのですか。
程度問題のお話のように思えますが。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
cells.rows.countを終点にするというのがポイントということですね。

お礼日時:2011/05/17 02:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング