こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

 ExcelのVBAにおいて、「最終行」即ち「(その列において)データが存在しているセルの中で最も下にあるセルの行番号」を取得する必要が生じる事が良くあります。
 その様な場合には、Cells(Rows.Count,列番号).End(xlUp).Row か Range(列番号 & Rows.Count).End(xlUp).Row を用いて取得するのが主流ですが、多くの場合、最終行の行番号のデータが必要になるたびに取得しなおすのではなく、最初に取得した最終行の行番号を変数に格納しておき、最終行の行番号のデータが必要な場合はその変数を使って最終行の行番号を指定するのが普通です。
 その様な最終行の値を格納する変数を使用する場合、私個人の場合は「何に使用するための変数であるのかという事を解りやすい変数名を用いる」という観点から、「LastRow」という変数名を好んで用いております。
 この「LastRow」という変数名はあくまでそのVBAマクロ内だけで使用されるその場限りのものに過ぎない筈です。
 しかし、このサイトのExcelのVBAに関する質問を眺めていると、例えば

Range(”○○")からLastRowまで
○○セルからLastRowまで

といった具合に、「LastRow」という言葉があたかも「『最終行の行番号』や『最終行のセル』を表す"一般名詞"」であるかの様に使用されている質問を時々見かける事があります。
 これが「last row」であれば「最後の行」という意味の英語の言葉になりますから間違いとは言えません。
 それに対し「LastRow」という単語は少なくとも英語には存在しません。
 それにもかかわらず、「LastRow」という言葉が前述の様な一般名詞として使われているという事は、ExcelのVBAにおいて「LastRow」という言葉は、Excelのワークシートを使った処理における「作業列」などと同様のテクニカルタームになっているという事なのでしょうか?

投稿日時 - 2016-11-26 13:12:32

QNo.9260444

暇なときに回答ください

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.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を好んで使う私のほうが異端なのかも・・・
だって連番管理するもん。連番最大=最終だもん(厳密には違う)。
などとのたまいながら、私見を〆させていただきます。
失礼いたしました。

投稿日時 - 2016-12-08 12:33:16

お礼

 御回答頂き有難う御座います。
 また、お礼が遅くなってしまい申し訳御座いません。(回答通知が来ていたのを見落としておりました)


>エクセル(あるいはVBA)をある程度(コレも曖昧ですが)使う人間には説明せずとも通じる言葉であると考えます。

 仰る様に意味だけは何となく推測がつく言葉ではあります。
 しかし、「何が言いたいのか推測する事も出来なくはない」という事と、「おかしな言葉使いではない」という事は別の話だと思います。
 私が知りたかったのは、

>エクセル(あるいはVBA)をある程度(コレも曖昧ですが)使う人間

の間では、「最終行」という言葉を使う場面において、「最終行」という言葉の代わりに「LastRow」という言葉を使う事が珍しい事ではなく、その様な言い方・書き方が、エクセル(あるいはVBA)分野においては一般的に広く行われている事なのかどうかという点なのです。
 因みに、本質問で問題にしている「LastRow」とは、質問文中の

>Range(”○○")からLastRowまで
>○○セルからLastRowまで

という箇所の中にある「LastRow」の様に、変数名ではない「LastRow」の事であり、例えば、質問文の文中にVBAの構文の類を記す事のないまま、

「A1セルからLastRowまで日付が入力されています。
 これを別シートに転記するにはどうすれば良いのか教えて下さい。」

といった類の質問内容となっていて、「LastRow」という言葉が変数名としてではなく、一般名詞として使われている場合における「LastRow」の事なのです。

>それを考えると、やはり「Last」という言い回しは自然なのかもしれません。

 エクセル(あるいはVBA)分野においては、「最終行」とは言わずに「LastRow」と言う事が自然な事なのでしょうか?

投稿日時 - 2016-12-10 02:37:24

ANo.4

>本質問は、内容を理解出来るかどうかという事を問題にしているという訳ではなく
>上記の様な類の質問における言葉の使い方に違和感を覚えたので、もしかすると私が知ら
>ないだけで世間(と申しますかExcelのVBAの分野)では「LastRow」という言葉は、

>>「『最終行の行番号』や『最終行のセル』を表す"一般名詞"」

>として使われる様になっている(←もしそうであれば誤った言葉の使い方とは言えなくなる
>ので違和感は解消します)のかどうかという事を知りたいと思って投稿したものなのです。

一般名詞として使われません。

投稿日時 - 2016-11-28 11:09:33

お礼

 解りました。
 御教え頂き感謝致します。

投稿日時 - 2016-11-28 12:16:28

ANo.3

追加質問に回答致します。

テクニカルタームではないです。
当たり前ではないです。

ですが、ある程度経験があるかは大方予想がつくのかな、と思います。

話は少し逸れますが、プログラムのプロジェクトごとに命名規則はあった方が無難だと思います。
行数が多くなる程尚更です。

柔軟性を持たせているからこそ、様々なことが実行できるのがプログラムです。
プログラマの方は、意味がわからない記述があればコードを読んで処理内容を理解します。
言葉の定義うんぬんより、実物見た方が早いというわけですね。

わからなければコードを読めば良いので、当たり前という基準はありません。
コードがわからなければ、コーディングした人に聞くか、独学で解読できるようになればいいと思います。

記載がコロコロ変わるのが嫌なら、内々で命名規則をしっかり決めてください。

コーディングの経験も増えれば、今回のような点に気にならなくなるのが、プログラミングの世界です。

投稿日時 - 2016-11-28 00:14:55

お礼

 御回答頂き有難う御座います。

>コーディングの経験も増えれば、今回のような点に気にならなくなるのが、プログラミングの世界です。

 私の書き方が悪かったため、誤解を招いてしまい申し訳御座いません。

>私個人の場合は「何に使用するための変数であるのかという事を解りやすい変数名を用いる」という観点から、「LastRow」という変数名を好んで用いております。
>この「LastRow」という変数名はあくまでそのVBAマクロ内だけで使用されるその場限りのものに過ぎない筈です。

という箇所の中にある「LastRow」は確かに変数名なのですが、本質問で問題にしている

>Range(”○○")からLastRowまで
>○○セルからLastRowまで

という箇所の中にある「LastRow」は変数名などではなく、例えば、質問文の文中にVBAの構文の類を記す事のないまま、

「A1セルからLastRowまで日付が入力されています。
 これを別シートに転記するにはどうすれば良いのか教えて下さい。」

といった類の質問内容となっているのです。
 ですから、

>記述があればコードを読んで処理内容を理解します。

という方法を使う余地もない訳で、その様な状況になっているからこそ

>「LastRow」という言葉があたかも「『最終行の行番号』や『最終行のセル』を表す"一般名詞"」であるかの様に使用されている質問

と申した訳です。

>相手が理解できるのであれば、多少間違った言葉の使い方をしても良い
>という考えの元、議論することが多いです。

というお話には同感なのですが、本質問は、内容を理解出来るかどうかという事を問題にしているという訳ではなく、上記の様な類の質問における言葉の使い方に違和感を覚えたので、もしかすると私が知らないだけで世間(と申しますかExcelのVBAの分野)では「LastRow」という言葉は、

>「『最終行の行番号』や『最終行のセル』を表す"一般名詞"」

として使われる様になっている(←もしそうであれば誤った言葉の使い方とは言えなくなるので違和感は解消します)のかどうかという事を知りたいと思って投稿したものなのです。

投稿日時 - 2016-11-28 01:26:52

ANo.2

回答ではありませんが
http://oshiete.goo.ne.jp/qa/8914221.html
のような記事がありました。
ーー
この質問では何を聞きたいのでしょう(迷っているというか)。
エクセルを使っている英米人が「LastRow」という単語をみて、エクセルでの意図した意味(Range.End(xlUp).Row )と、違和感を感じないかということでしょうか?

投稿日時 - 2016-11-27 18:06:28

補足

>この質問では何を聞きたいのでしょう

 質問文を読んで下さい。

>ExcelのVBAにおいて「LastRow」という言葉は、Excelのワークシートを使った処理における「作業列」などと同様のテクニカルタームになっているという事なのでしょうか?

と書かれています。
 もしかしますと、「テクニカルターム」という表現では意味が分かり難かったという事なのでしょうか?
 「テクニカルターム」とは「ある特定の分野でのみ使用され、通用する言葉・用語」の事です。
 つまるところ、

>ExcelのVBAにおいて「LastRow」という言葉は、「LastRow」という言葉は、
>テクニカルタームになっているという事なのでしょうか?

と尋ねているという事は、「LastRow」という言葉が、それを一般名詞として使用しても構わないほど、ExcelのVBAを扱っている人々の間では、広く使われている言葉になっているのかという事を尋ねている訳です。

投稿日時 - 2016-11-27 21:35:40

ANo.1

LastRowまで→.End(xlUp).Row で取得した最終行(Last Row)まで
と解釈すればよいのでしょうか。

正確な文言に注視しすぎて、議論が進まないのでは生産的と言えない、と思います。
IT業界で働いていますが(VBAは使っていませんが)
相手が理解できるのであれば、多少間違った言葉の使い方をしても良い
という考えの元、議論することが多いです。

テクニカルタームになっているかは微妙です。が、大方VBAを触った方は理解できるのではないでしょうか。

投稿日時 - 2016-11-26 14:12:38

お礼

 御回答頂き有難う御座います。

>私個人の場合は「何に使用するための変数であるのかという事を解りやすい変数名を用いる」という観点から、「LastRow」という変数名を好んで用いております。

と述べました様に、VBAにおいて変数名を何にするかという事に関して明確な決まりはなく、「最終行の行数の値を格納するための変数」の変数名に関してもそれは同様で、「LastRow」という変数名も私が個人的に好んで使用しているものに過ぎず、別に私以外の方が組まれたVBAにおいても特に頻繁に使われている変数名という訳でもなく、「最終行の行数の値を格納するための変数」の変数名として使用する文字列は「end_Row」、「last」、「MaxRow」等々、人によって様々なのですが、それでも

>大方VBAを触った方は理解できる

>LastRowまで→.End(xlUp).Row で取得した最終行(Last Row)まで
>と解釈

するのが当たり前という事なのでしょうか?

投稿日時 - 2016-11-26 16:51:15

あなたにオススメの質問