- ベストアンサー
複数セル選択範囲を下の変動する最終行まで伸ばしたい
Win7とExcel2007でマクロ作成の初心者です。 Sub 選択範囲を広げる() Sheets("計算").Select Range("CU6").Select Selection.Resize(, Selection.Columns.Count + 27).Select ここで選んだセルの選択部分を、下の行に向かって選択範囲を広げたいです。 ただ、下方の行数は、常に変動するため、どうやって変動の選択範囲を広げたいか わかりません。よろしくお願いします。 表のCU6以下は、文字列と空白が交互にあります。 End Sub
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 >cu6 から dv83までが選択されてしまいます。 >CU49からDV49までの行およびCU50からDV50までは空白のセルになってますので 83行目まで選択されるというコトはCU83セルに何らかのデータが入っているというコトになります。 >End(xlUp).Row を使っていますので、下の行から上に向かって検索しデータがあった場合にその行が最終行として 変数 lastRow としていますので、その行まで選択されてしまいます。 49・50行目が空白で、51行目以降にデータがある場合48行目までを選択したい!というコトなのでしょうか? その場合は >lastRow = .Range("CU6").End(xlDown).Row に変更してみてください。 そうすればCU6~DV48行目までが選択されます。 ※ 余談ですが、Resize を使うと選択範囲が広い場合行合わせが大変だと思います。 最終列が判っている場合、個人的には Sub Sample1() Dim lastRow As Long With Worksheets("計算") .Activate lastRow = .Range("CU6").End(xlDown).Row Range(.Cells(6, "CU"), .Cells(lastRow, "DV")).Select End With End Sub のようなコードの方が簡単だと思います。 ※ さらに・・・ CU6~DV6セルに項目なり何らかのデータがすべて入っている場合は >Range(.Cells(6, "CU"), .Cells(lastRow, "DV")).Select の行を >.Range("CU6").CurrentRegion.Select にしても同様の結果が得られると思います。m(_ _)m
その他の回答 (2)
- High_Score
- ベストアンサー率25% (45/176)
他回答にあるLastrowは、エクセルで用意されてる最終行つまりセル「CU最終行」までジャンプし、上へ向かってデータのあるセルを見つけ、その行番号を示すものです。この方法の利点は、途中に空白セルがあっても影響を受けずデータのある最終行を取得できる事です。CU列限定ですが。 あなたの望みと合致しますか?質問文にある「文字列と空白が交互にある」のは分かりますが、文字列のある最終行が欲しいのか、あるいは空白行は選択せず飛ばしたいのかどちらですか?後者は少々面倒です。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! >表のCU6以下は、文字列と空白が交互にあります。 CU列の最終行までを選択したい!という解釈で・・・ CU6セルには何らかのデータが入っているとします。 Sub 選択範囲を広げる() Dim lastRow As Long With Worksheets("計算") .Activate lastRow = .Cells(Rows.Count, "CU").End(xlUp).Row .Range("CU6").Resize(lastRow - 5, 28).Select End With End Sub こんな感じではどうでしょうか?m(_ _)m
補足
素早いご回答ありがとうございます。今実行しました。するcu6 から dv83までが選択されてしまいます。CU49からDV49までの行およびCU50からDV50までは空白のセルになってますのでそれより下は、End(xlUp).Rowの対象にならないと認識しているのですが、どうしてでしょうか?
補足
lastRow = .Range("CU6").End(xlDown).RowやSub Sample1()を実行しましたが 正しく選択してくれません。前例だと、不思議なことに、CU6からDV7までしか選択しません。 セルが空白の行が交互に現れるので仕方ないかもしれません。 そこで変動する行数をBO2に表示し 以下のコードでやりたいことができました。あなた様のコードを参考にしました。 Private Sub CommandButton98_Click() Dim lastRow As Long Dim i As Integer With Worksheets("計算") .Activate i = Range("BO2").Value Range(.Cells(6, "CU"), .Cells(i + 5, "DV")).Select Selection.Copy Range("C6").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End With End Sub