• ベストアンサー

複数セル選択範囲を下の変動する最終行まで伸ばしたい

Win7とExcel2007でマクロ作成の初心者です。 Sub 選択範囲を広げる() Sheets("計算").Select Range("CU6").Select Selection.Resize(, Selection.Columns.Count + 27).Select ここで選んだセルの選択部分を、下の行に向かって選択範囲を広げたいです。 ただ、下方の行数は、常に変動するため、どうやって変動の選択範囲を広げたいか わかりません。よろしくお願いします。 表のCU6以下は、文字列と空白が交互にあります。 End Sub

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

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

aitaine
質問者

補足

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

その他の回答 (2)

回答No.3

他回答にあるLastrowは、エクセルで用意されてる最終行つまりセル「CU最終行」までジャンプし、上へ向かってデータのあるセルを見つけ、その行番号を示すものです。この方法の利点は、途中に空白セルがあっても影響を受けずデータのある最終行を取得できる事です。CU列限定ですが。 あなたの望みと合致しますか?質問文にある「文字列と空白が交互にある」のは分かりますが、文字列のある最終行が欲しいのか、あるいは空白行は選択せず飛ばしたいのかどちらですか?後者は少々面倒です。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! >表の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

aitaine
質問者

補足

素早いご回答ありがとうございます。今実行しました。するcu6 から dv83までが選択されてしまいます。CU49からDV49までの行およびCU50からDV50までは空白のセルになってますのでそれより下は、End(xlUp).Rowの対象にならないと認識しているのですが、どうしてでしょうか?

関連するQ&A

  • Selectした範囲の最終セルの1つ下を選択

    よろしくお願いします。 Dim R As Range Dim rr As Range Set R = Columns("H").Find("○", After:=Range("H" & Rows.Count)) Set rr = Columns("H").Find("○", After:=R, SearchDirection:=2) Range(R, rr).Select で、Selectした範囲内の最終セルの1つ下を選択したいのですが ご存知の方、ご教示をお願いします。

  • 最期の行まで範囲指定ができません

    Excel365solo,Win10使用の超初心者です。 セルB26~BE26まで項目名が入り、不規則にセル結合してます。 B27~B57まで月日と曜日を表示するVLOOKUP関数が入っています。 そしてB27~B57まで5月21日~6月20日までが表示されています。 そして、次のコードでB27~BE57の範囲指定しても、B27~BE56しか 選択してくれません。仕方なく Selection.Resize(Selection.Rows.Count + 1).Select を追加して 使っています。原因がわかりません。ご教示お願いします。 Sub test() Range("B27").Resize(Day(DateSerial(Year(Date), Month(Date), 0)), 58).Select ’Selection.Resize(Selection.Rows.Count + 1).Select End Sub

  • 日付の入ったセル範囲から、ある日付を選択したい(再

    今日、表題のとおりの質問に次のとおり教えていただきました。 自分としては、8月の21でなく、9月の21を選びたいです。 Sub 日付選択() Range("AL4:CU4").Select Selection.Name = "日付範囲" Range("日付範囲").Find(What:=Day(Range("AJ2")), LookIn:=xlValues).Select End Sub セルAJ2には、2015/9/21が入っています。 AL4からCU4には 8月18日から10月17日の間の、日にちだけが、はいっています。 上のコードを実行すると、8月21日を選択します。 これを9月21日のところを選択するようにしたいです。よろしくご教示お願いします。

  • 選択したセルの、画面最上行から1つ下のセルを選択

    EXEL 2002 です。 任意に選択したセルの、画面最上行から1つ下(Rows.Count = 2)のセルを選択する場合のコードですが、 どうも解りません。 何卒、よろしくお願い致します。 ----------------------- Cells(2, Selection.Columns.Count).Select

  • 色々なものを見ながら作っている初心者です。

    色々なものを見ながら作っている初心者です。 よろしくお願いします。 VBAでのエラー対処について 下記のマクロを実行すると、実行時 「Selection.Resize(, Selection.Columns.Count - 2).Select」のところで セルがブランクだった時にエラーが出てします。 対処の方法を教えていただけませんでしょうか? よろしくお願いします。 Sheets("sheetB1").Select Range("A7:C161").Select Application.CutCopyMode = False Selection.ClearContents Sheets("sheetA").Select Range("D12").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToLeft)).Select Selection.Resize(, Selection.Columns.Count - 2).Select Selection.Offset(0, 1).Select Selection.Copy Sheets("sheetB1").Select Range("A7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("sheetA").Select Range("E12").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("B1").Select Range("C7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("sheetB2").Select Range("A7:C161").Select Application.CutCopyMode = False Selection.ClearContents Sheets("sheetA").Select Range("J12").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToLeft)).Select Selection.Resize(, Selection.Columns.Count - 2).Select Selection.Offset(0, 1).Select Selection.Copy Sheets("sheetB2").Select Range("A7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("sheetA").Select Range("K12").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("steetB2").Select Range("C7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=Fals

  • ExcelVBAで相対参照をしたい

    ExcelVBAで、任意の範囲を選択して各行ごとにある処理を行いたいと考えています。 Sheet_Name = ActiveSheet.Name range_address = Selection.Address range_address = Replace(range_address, "$", "") range_address = Left(range_address, InStr(range_address, ":") - 1) work_columns = Selection.Columns.Count '列数 Work_Rows = Selection.Rows.Count '行数 Range(range_address).Select Range(activecell_address, ActiveCell.Offset(0, work_columns)).Select 行の選択が出来れば、あとは、ソートするだけです。 と、選択範囲の左上のアドレスと、選択範囲の行数、列数の取得は出来たのですが、1行ごとの選択がうまく出来ません。(相対参照の仕方がわかっていないだけだと思いますが) やりたいことは、選択範囲を上から順に行ごとにソートしたいのですが、どなたか?詳しい方がいらっしゃいましたら教えて頂けないでしょうか?

  • 日付が表示されているセルのみ範囲指定したい

    Excel2007でマクロ作成中の初心者です。 範囲指定がうまくいかない。 1)セルB30  =IF(A30="","",VLOOKUP(A30,表データ,2,FALSE))   セルB31  =IF(A30="","",VLOOKUP(A31,表データ,2,FALSE))    以下略  というように、セルB30~B60まで関数が入っており、  以下のように表示されています。  1   9月21日 2   9月22日    以下略    〃 29  10月19日 30  10月20日 31       ←(ここのセルは日付表示されず空欄。 関数 =IF(A60="","",VLOOKUP(A60,表データ,2,FALSE))が入っている) 2)以下のコードを実行すると Sub 範囲を選択() Range("B30").CurrentRegion.Select Selection.Resize(Selection.Rows.Count - 1).Select Selection.Offset(1, 0).Select Selection.Resize(Selection.Rows.Count - 1).Select End sub 1から31行まで選択されてしまします。これを30行目まで、日付の表示あるセルのみ 選択したいのですが、どうすればよろしいでしょうか

  • 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 最終行を選んだシートにコピーする。

    VBAど初心者です。どうしても最終行のデータを選んだシートにコピーできません。 LastRow.Selectのところで、止まってしまいます。どのように行を設定していいのかさっぱりわかりません。どなたか、ご指導のほどよろしくお願いします。 Sub copy_last_line() Dim LastRow As Long Sheets("Sheet1").Select LastRow = Cells(Rows.Count, 1).End(xlUp).Row LastRow.Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("A1").Select End Sub

  • 選択した範囲を配列に格納

    勉強はじめたばかりの超初心者です。 InputBoxメソッドを用いシートのなかからデータ処理をする範囲を選択 し、その選択した範囲の行数を求めようとしております。 下記の様にすればできることは承知しておりますが、選択した範囲の値 をSelectを用いずに直接配列に格納し、Ubound関数とかで行数を求める にはどうしたらよいのでしょうか。何かべつの変数を定義しVariantで 型宣言をしてといったところまでは想像つくのですが、それ以上がわかりません。ご教示いただけると幸いです。 Dim MotoN As Integer Public Sub データ範囲取得() Set MotoHani = Application.InputBox(Prompt:="元範囲を選択", Type:=8) MotoHani.Select MotoN = Selection.Rows.Count End Sub

専門家に質問してみよう