[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『範囲選択で最終行をしていするには』(ふ)
こんばんわ
普通範囲選択は Range("A14:E20").Select
という風に書くのですが
それをデータの最終行にするにはどうすればよろしいでしょうか
最終行の取得はできます
Sub 最終行
Dim 最終行 As Long
最終行 = cells(Rows.Count.1)End(xlup).Rows
ここから先がわかりません
教えてくださいよろしくおねがいします
< 使用 Excel:Excel2019、使用 OS:Windows10 >
Range("A14:E" & cells(Rows.Count,1).End(xlUp).Row).Select
じゃないですか?
(半平太) 2022/05/31(火) 23:19
Option Explicit
Sub test()
Dim lg As Long, lg2 As Range
lg = Cells(Rows.Count, 1).End(xlUp).Rows lg2 = Range(Cells(1, 1), Cells(lg, 5)) lg2.Select End Sub
(見習い会社員) 2022/06/01(水) 08:09
見習い会社員さんへ。 lg = Cells(Rows.Count, 1).End(xlUp).Rows は RowsではなくRowの間違いではないですか?
lg2 = Range(Cells(1, 1), Cells(lg, 5)) は Set lg2 = Range(Cells(1, 1), Cells(lg, 5)) としないといけないでしょう。 Range等のオブジェクトを変数に代入するにはSetを付けないといけません。
ところで、変数名の lgとかlg2とは何の省略なんでしょうか。 名は体を表すものにしておいたほうが、将来の自分(他人みたいなものです)にとって有益です。
(γ) 2022/06/01(水) 09:18
>Range等のオブジェクトを変数に代入するにはSetを付けないといけません。
御意!
>RowsではなくRowの間違いではないですか?
Rowでは、コンパイルエラー(変数が定義されていません)がでます。 ROWSで問題なく完走します。
最終行を取得でRowsで問題ないと思いますが ?
>変数名の lgとかlg2とは何の省略なんでしょうか。
ラスト行(LastGyo)でlgとしました。 lg2については、変数はRangeなので安易にそのまま2を付けてlg2ですが 名が体をなしていない安易な命名でした。 反省 my_BAD !!
(見習い会社員) 2022/06/01(水) 09:54
セル範囲(あるいはセル単体)については、
いろいろな表現方法があります。
>Dim 最終行 As Long >最終行 = cells(Rows.Count.1)End(xlup).Rows
↑これだと、最後の行番号「だけ」が取得されます。
まぁ、それを使ってセル範囲を表す、「"A14:E20"」というような、
「文字列」を作るというのもありなんですが、
シート上の状態は、いつも同じようになっているとは限りませんので、
セルの場所を示す語彙を増やすことが肝要かと思います。
(まっつわん) 2022/06/01(水) 10:02
Dim lg As Long lg = Cells(Rows.Count, 1).End(xlUp).Rows は、私の手元では、「型が一致しません」というエラーになりました。 どういう理屈で行番号が返るのか、私には理解ができません。
イミディエイトウインドウで、 ?typename(Cells(Rows.Count, 1).End(xlUp).Rows) と入力してみてください。 Rangeを返しませんか?
Set lg2 = Range(Cells(1, 1), Cells(lg, 5))とlgを使うのだから、 求めたいのは、行番号という整数のはずでしょう?
素直に lg = Cells(Rows.Count, 1).End(xlUp).Row でよいと思いますよ。
?typename(Cells(Rows.Count, 1).End(xlUp).Row) はLongを返します。 RowはRangeオブジェクトの(最初のセルの)行番号を返すプロパティですよ。 https://docs.microsoft.com/ja-jp/office/vba/api/excel.range.row を読んでみてください。
# 本来の質問者さんの参考にもなるかと思い、議論しています。 (γ) 2022/06/01(水) 10:23
lg = Cells(Rows.Count, 1).End(xlUp).Row でした。
ここに回答を書き込むのは10年早そうなので
質問するだけして見習いは、ROMが相応なので回答するのは控えます。
お世話をおかけしました。
すいません。 _(._.)_
(見習い会社員) 2022/06/01(水) 11:01
(γ) 2022/06/01(水) 11:09
(γ) 2022/06/01(水) 11:16
>ここに回答を書き込むのは10年早そうなので >質問するだけして見習いは、ROMが相応なので回答するのは控えます。
私は掲示板に質問しまくって勉強しました。
最初は、コミュニケーションとるのもなかなか大変ですが、
遠慮は不要かと。
勉強してると疑問やわからないところが次々出てきますし、
理解したつもりが理解できてないということもあるとは思います。
手動の操作だと、「選択する」ことで、操作対象のセル範囲をエクセル君に教えますが、
VBAの場合、言葉で指示できるので、基本的には「選択する」という行為を、
命令又は指示することは不要です。
まずは、
「アクティブなシート上のE列のデータ最終行のセル」
だけに注力してみてはいかがでしょうか?
'文字列を作る例
sub test
dim r as long dim a as string
r = cells(rows.count,"E").end(xlup).row a = r
msgbox a
a= "A14:E" & a msgbox a
range(a).select '選択してみてセル範囲を目視で確認
end sub
※
Rowsプロパティは、行(セル範囲の一種)の集まり(コレクション)を返します。
Rowプロパティは、行番号を返します。
返すというのは、聞いた質問に対しての返答的な意味です。
その他わからない用語はネットで調べてみてください。
(まっつわん) 2022/06/01(水) 15:49
>それをデータの最終行にするにはどうすればよろしいでしょうか A20:E20 を選択したいということ。 >最終行の取得はできます どうやって取得したの。 >最終行 = cells(Rows.Count.1)End(xlup).Rows コンパイルエラーになったぞ。 >ここから先がわかりません 何が分からないんですか。やりたいことは何ですか。 (分からん) 2022/06/01(水) 18:53
ん? (半平太)さんの
↓これではいかんのかしら?
(半平太) 2022/05/31(火) 23:19
(あみな) 2022/06/06(月) 17:45
(不憫) 2022/06/06(月) 18:22
Range("B2:E8").Resize(1, 1).Offset(Range("B2:E8").Rows.Count, Range("B2:E8").Columns.Count - 1).Select
(不憫) 2022/06/06(月) 18:36
私が脇道にそらしたかもしれません。
私としては既に解決済みではあるものの、
# 本来の質問者さんの参考にもなるかと思い、議論しています。
と一応のお断りをしたつもりでしたが、通じていなかったですか。
(γ) 2022/06/06(月) 23:31
>つまりRange("A14:E20")の20の部分を最終行が変わっても範囲選択できるようにしたいです 「20の部分を」が分からないのだがデータが増減するということですね。 >はい 取得はa列で大丈夫です 下記のコードは A列を指定しています。
参考です。
Sub 範囲選択() Dim lastRow As Integer lastRow = Range("A" & Rows.Count).End(xlUp).Row '最終行番号取得 Range(Cells(14, 1), Cells(lastRow, 5)).Select'範囲選択取得 End Sub
Sub 最終行選択() Dim lastRow As Integer lastRow = Range("A" & Rows.Count).End(xlUp).Row '最終行番号取得 Range(Cells(lastRow, 1), Cells(lastRow, 5)).Select'最終行範囲取得 End Sub
(nm) 2022/06/07(火) 11:29
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.