• 締切済み

ExcelのVBAにおけるLastRowという言葉

tsubu-yukiの回答

回答No.5

少し前のご質問ですから、ご本人もすでにご覧にならないかもしれませんが、 私見を一つ二つ挟ませていただきます。 まず、テクニカルタームか?という問題。 例として挙げていらっしゃる「作業列」等と同様、 正式なテクニカルタームではないが、 エクセル(あるいはVBA)をある程度(コレも曖昧ですが)使う人間には 説明せずとも通じる言葉であると考えます。 私自身は ・最終行・・・LastRow ・最大行・・・MaxRow と使い分ける、自分にのみ通じるルールに基づいていますが、 他人さまが書かれたコードにおける変数に関しては気にしたことがありませんでした。 変数に何を代入するかは、コードを見ていけばわかりますから。 なので、「どんな名前でもいいじゃん」な姿勢です。 さてさて、「Last」に言及します。 恐らくご存じであろうと思いますが、宜しければ改めてご確認ください。 何処か適当なセル2~3カ所に、何か適当な値を入力しておきます。 マクロの記録を開始し、 ・F5 あるいは Ctrl+G (ジャンプ) ・(ジャンプダイアログ内)セル選択 のボタン ・最後のセル を選択して OK で記録終了します。 すると、1行     Selection.SpecialCells(xlCellTypeLastCell).Select が記録されていると思われます(Ver.問わず)。 あるいは同じくマクロの記録で ・Ctrl+End だけを記録すると、     ActiveCell.SpecialCells(xlLastCell).Select が記録されるはずです。 つまり、エクセル(あるいはVBA/VBEにおけるエクセル)の世界では 「Last〇〇」という使い方はある一定の市民権を得ている、とは言えないでしょうか。 ちなみに、アクセスに話を飛ばすと、 「テーブル(レコードセット)の最終(最初)レコードを取得する」、 Last(First)関数も存在します。 それを考えると、やはり「Last」という言い回しは自然なのかもしれません。 ・・・MaxRowを好んで使う私のほうが異端なのかも・・・ だって連番管理するもん。連番最大=最終だもん(厳密には違う)。 などとのたまいながら、私見を〆させていただきます。 失礼いたしました。

kagakusuki
質問者

お礼

 御回答頂き有難う御座います。  また、お礼が遅くなってしまい申し訳御座いません。(回答通知が来ていたのを見落としておりました) >エクセル(あるいはVBA)をある程度(コレも曖昧ですが)使う人間には説明せずとも通じる言葉であると考えます。  仰る様に意味だけは何となく推測がつく言葉ではあります。  しかし、「何が言いたいのか推測する事も出来なくはない」という事と、「おかしな言葉使いではない」という事は別の話だと思います。  私が知りたかったのは、 >エクセル(あるいはVBA)をある程度(コレも曖昧ですが)使う人間 の間では、「最終行」という言葉を使う場面において、「最終行」という言葉の代わりに「LastRow」という言葉を使う事が珍しい事ではなく、その様な言い方・書き方が、エクセル(あるいはVBA)分野においては一般的に広く行われている事なのかどうかという点なのです。  因みに、本質問で問題にしている「LastRow」とは、質問文中の >Range(”○○")からLastRowまで >○○セルからLastRowまで という箇所の中にある「LastRow」の様に、変数名ではない「LastRow」の事であり、例えば、質問文の文中にVBAの構文の類を記す事のないまま、 「A1セルからLastRowまで日付が入力されています。  これを別シートに転記するにはどうすれば良いのか教えて下さい。」 といった類の質問内容となっていて、「LastRow」という言葉が変数名としてではなく、一般名詞として使われている場合における「LastRow」の事なのです。 >それを考えると、やはり「Last」という言い回しは自然なのかもしれません。  エクセル(あるいはVBA)分野においては、「最終行」とは言わずに「LastRow」と言う事が自然な事なのでしょうか?

関連するQ&A

  • エクセルVBAで最終行取得方法

    エクセルVBAで最終行を取得する良い方法を教えて下さい。 VBA初心者でいきづまっていまして、、、 内容はボタンを押した時にF列に対して最終行を取得して、 その最終行の下のセルにボタンの内容が繁栄させるようにしたくて Private Sub CommandButton202_Click() Dim lastRow As Long lastRow = Cells(Rows.Count, 6).End(xlUp).Row + 1 Cells(lastRow, 6).Value = CommandButton202.Caption End Sub と作ってみたのですが、F17より下に文字がはいっているため、 検索範囲を「F列」ではなく、「F2:F16」のように範囲を指定したいのですがどうしたらよいでしょうか、、、。 結構色々調べてはみたのですができなくて、、、

  • エクセルVBAでデータ最終行取得方法

    エクセルVBAでデータ最終行取得方法で良い方法を教えてください。 データの行数、列数は不定。 最多のデータ行の列も不定。 この条件で、データ最終行を取得するにはどうすればよいでしょうか? lastrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row では、A列の最終行に限定されます。 lastrow = ActiveSheet.Cells(1, "A").SpecialCells(xlLastCell).Row では、列の限定はありませんが、一旦データ入力後、削除した部分まで入ってしまいます。 lastrow = ActiveSheet.UsedRange.Rows.Count では、データ入力後、削除した部分まで入ってしまい、かつ、1行目など上部が空白の場合、不正確になります。

  • VBA データのある最終行の取得

    エクセルVBAで最終行を取得する良い方法を教えて下さい。 VBA初心者でいきづまっていまして、、、 内容はボタンを押した時にF列に対して最終行を取得して、 その最終行の下のセルにボタンの内容が繁栄させるようにしたくて Private Sub CommandButton202_Click() Dim lastRow As Long lastRow = Cells(Rows.Count, 6).End(xlUp).Row + 1 Cells(lastRow, 6).Value = CommandButton202.Caption End Sub と作ってみたのですが、F17より下に文字がはいっているため、 検索範囲を「F列」ではなく、「F2:F16」のように範囲を指定したいのですがどうしたらよいでしょうか、、、。 結構色々調べてはみたのですができなくて、、、

  • VBA 変数を使うべき?

    VBA 変数を使うべき? VBAを独学で勉強中のものです。 エクセルVBAでデータが入っている行数分処理を行いたい場合などに ------------------------------------------------ lastRow = cells(rows.count,1).end(xlup).row for i = 1 to lastRow ・・・ next i ------------------------------------------------ などと最終行を変数に代入して使う場合と ------------------------------------------------ for i = 1 to cells(rows.count,1).end(xlup).row ・・・ next i ------------------------------------------------ などと直接for文の中で指定する場合とでは結果は同じと思うのですが 結果以外の部分で見た場合どちらで行うほうがいいのでしょうか?

  • エクセルVBAでセル位置の置き換え

    売上帳をエクセルVBAを使って作っています。 シート自体は、    B    C     D    E 1 日付 顧客NO. 顧客名 品名 2 3 のようになっており、 B列、C列、D列の最終行に入っている値を、その一行下から、E列最終行までのB~D列全部に貼りつけたいのです。 コードは下記のように書いてあります。 Dim 行番号 Dim セル日 Dim セル客 Dim 品名行 Dim 日付行 Dim セル日2 Dim セル日3 Sub 日付と顧客名を貼付() 行番号 = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行の行番号を取得し「行番号」に代入 セル日 = "B" & 行番号 セル客 = "D" & 行番号 Range("セル日:セル客").Copy '日付と顧客番号と顧客名をコピー 品名行 = Cells(Rows.Count, "E").End(xlUp).Row 'E列最終行の行番号を取得し「品名行」に代入 日付行 = Cells(Rows.Count, "B").End(xlUp).Row + 1 'B列最終行の1行下の行番号を取得し「日付行」に代入 セル日2 = "B" & 日付行 セル日3 = "B" & 品名行 Range("セル日2:セル日3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'B列最終行の1行下のB列からD列に値の貼り付け End Sub これを実行すると、 『Range("セル日:セル客").Copy』の部分でエラーがでます。 正しくはどのように書けばよいのでしょうか?

  • Excel vbaのClearについて

    よろしくお願いします。 Excel2003使用です。 最終行を指定して、それを使って動作をしたいのですが、、うまく動作しません。 A列~D列まで入力があり、A列の52行目からD列の最終行までをClearしたいのです。 Set ps = ThisWorkbook.Worksheets("●●") LastRow = ps.Cells(ps.Rows.Count,1).End(xlUP).Row ps.Range(Cells(52,1),Cells(LastRow,4)).Clear →Error1004がでます うまく動く方法をご存じな方、よろしくお願いします。

  • エクセル vba セル合計

    添付表について下記の様な処理をしたいのですが途中からVBAの書き方が(セル合計)がわからず困っております。  *日別の原価計(K列のセル値)の小計(K列の最終入力行の下※k112)に計算する。 自分ではこの様を処理を考えております。 (1)商品名(G列)最終入力行の1行下を選ぶ(G112) (2) (1)の同行にある(k112)を合計算出セルとして選ぶ (3)商品名(G列)最終入力行(g112)からその列上の空欄行の1セル下(g66)を見て(要はg 112からEnd(xlUp))、その行と同じ範囲のK列(k112ーk66)を合計をする範囲として選ぶ (4) (2)の合計する範囲を(3)で算出する。 VBA素人の私では(1)~(3)までを下記の通り書きました。 Sub 原価合計求める() Dim lastrowshu As Long Dim lastrowgen As Long Dim fastrowgen As Long lastrowshu = Cells(Rows.Count, 7).End(xlUp).Row + 1 '帳票シートの商品名(G列)最終入力行+1を取得する。 lastrowgen = Cells(Rows.Count, 7).End(xlUp).Row '商品名行の最終入力 fastrowgen = Cells(lastrowgen, 7).End(xlUp).Row '商品名最終入力行から一番上 Cells(lastrowshu, 11).Select ここまでを実行すると添付ファイルでいうk112セルをselectするまではうまくいきましたが、 これ以降の(4)の合計の書き方がわかりません。 どなたか御教授願います。 あるいはもっといい方法があれば同時にご指導頂けますと幸いです。

  • エクセルVBAで最終行取得ができない

    エクセルVBAでたとえばC列にどこまでデータが入力されているかを調べるとき、通常は r = Cells(Rows.Count, "C").End(xlUp).Row などでできます。 しかし添付画像のような入力フォームが出来上がっており、かつC列に最初から何らか(画像では〒マーク)の入力がされているので、そこに回答者が途中まで入力された場合、これでは最終行は取得できません。 逆に上からEnd(xlDown)でやろうとしても、途中に空白セルがあってお手上げです。 余分な〒マークを元データから削除してしまいたいのですがそれでは入力されているところのマークまで消えてしまいます。 このようなファイルが何百もあり、それを1枚のシートにまとめようとしているのですが、この最終行取得でつまずいてしまいました。 どのような方法があるでしょうか? 画像はエクセル2013ですが、実際にマクロを動かすのは2010です。

  • Excel VBA について

    ExcelのVBAのコードでB列の1カ所の「zz2300」を取得したいのですが、 どういう記述をすればよろしいのでしょうか。 ※その列には同じ文字は存在しません。 test=Range("b65535").End(xlUp).Rowの定義があるのですが使えますか?

  • VBAについて

    VBAで最終行を取得する際に、""などを無視するようにしたいのですが、どうすればよいのでしょうか? 最終行は以下のように取得しています。 GYOMAX_T = SH.Cells(65536, cnt).End(xlUp).Row すみませんが、よろしくお願いいたします。