VBAと日々のこぼれ話

  1. VBA

【VBA】(VBAを始めたばかりの人が陥りがちな落とし穴) Excelシートの最終行を取得したい こぼれ話

最終行取得処理のこぼれ話

最終行取得コードに関する話と言うより、VBAを始めたばかりの人が陥りがちな落とし穴についてです。
以下の記事のこぼれ話になります。

Cells(Rows.Count,1)の「1」とは?

記憶があいまいなのですが以前に『マクロを作ってみたが最終行が取得できない』という相談がありました。
そこで有志が質問者が書いたコードを見てみたところ、コード自体に問題を見つけられませんでした。

では何が原因だったかというと、

「ExcelシートのA列を使っていないにも関わらず、A列で最終行を取得しているため」

でした。

※A列というのは私のサンプルコードでいうところのCells(Rows.Count,1)の「1」の部分にあたります。

この相談&原因からだけだと

コピペミスというか「サンプルコードの中身をよく理解しないまま使っちゃった」
あるいは
「単純にコピー&ペーストでコードを引っ張ってきて修正がもれてしまった」

このあたりが根本原因かなと思いますよね。

が、よくよく経緯を確認してみると

『どのサイトを見ても「1」を指定しているのだから必ず「1」を指定しなくてはならないと思っていた』とコメントしていました。

つまり、どこででも同じように紹介されていたから「作法だという思い込み」をしてしまっていたと言う訳です。

勿論、これは「コードを理解できていない」には間違いありません。
ですが、これは技術記事を書いている1人として少し反省すべきだなと思いました。

言われてみれば、確かにサンプルコードで変数を与えない場合(コードに対象を直書き)は「Cells(1,1)」だとか「Range(“A1”)」としてしまうことが多いです。

こういった技術記事を書くにあたって、すっかりそういう風に書くことに慣れてしまっていたのでその「作法」だという発想はありませんでした。

【スポンサーリンク】



何故「Cells(Rows.Count,1)」とするのか

結論から言うと、ずばり例(ex)

だからです。

私の場合、何かの書類のサンプルに「名前:山田花子」と記入されているのと殆ど同じくらいの意味合いしかありません。
とはいえ、注意書きなどもなければ、携わって間もない人にとっては不親切極まりないですね。

ましてや色々なサイトの情報を突き合わせてもどこも書いていないのであれば『記入例』ではなく『作法』だという結論にたどり着くのは私自身がいくつも覚えがあるのでよく分かります。

これは特に基本的な事柄の記事を書く側の場合、一言申し添える等の対策を考えなければと考えさせられました。

英数字の組み合わせだからか何か意味のある定数のように深読みしてしまいますが、コードの前提や説明がなければ実態に合わせて変えて構わないものです。と後で(ただいまPC壊れているので)一文付け足しておきます。

検索対象(キー項目)が一番左はデータの基本

先ほどサンプルコードで注記なしの「Cells(Rows.Count,1)」は「名前:山田花子」と殆ど同じくらいの意味しかないと書きました。
(コードの前後で意味がある場合もあります)

それはそれで正しいのですが、ここではもう半歩だけ先に進んだ話になります。

今回の最終行取得に関するコードといった対象を特定するような場合は、往々にして対象データ中の一番左の列を検索対象にします

そして、Excelシートにデータが設定されている場合はA列からデータを設定していることが多いです。ですので、A列を指定しているサンプルが多いのは仕方がない側面もあります。

それは、データベーステーブル等のデータの作りとして、 一番左(各データの先頭)には必須項目(各データで未入力が許されない項目)でかつユニーク(そのデータだと特定できる)な値を設定することが基本の形だからです。

データで難しく考えてしまうのであれば、何かの申請書類を思い出してください。
対象(相手)を特定できて、書類でも未記入を許されない必須項目になっているような項目といえば分かりやすいでしょうか。

それらの書類に記載する学籍番号、会員番号、社員番号、マイナンバーだとかがデータの一番左に設定する値に該当します。

勿論、これらは基本であるだけで例外は多々ありますのでそうでなければいけない必要はありません。
複雑なデータ構成であれば、必須入力はともかく1項目でユニークにすることは出来なかったり、また(セキュリティ対策の一環等で)敢えて複数項目でユニークにすることもあります。

VBAの最近記事

  1. 【VBA】(VBAを始めたばかりの人が陥りがちな落とし穴) Excelシートの最終行を取得…

  2. 【VBA】QRコードを作成したい

  3. 【VBA】CSVを1行ずつ処理したい

  4. Excelシートの最終行を取得したい その1

  5. 【VBA】未だに苦手としていること

関連記事

【スポンサーリンク】




PAGE TOP