Excel VBA での列番号の指定はアルファベットよりも「変数+数値」を使う方が後々融通が利く

シェアする

The following two tabs change content below.

松井 元(まつい はじめ)

静岡県三島市の松井会計事務所に勤務する理系税理士。 文理両方のスキルの融合を考えており、このブログは以下を中心に更新している。
●税金・会計に関すること
●IT(Excel、VBAなど)を使った業務効率化
●自分のこと(考え、私生活)。

家族は妻子供2人の4人家族。
喫茶店(特にコメダ珈琲)が好き。カラオケが好き。

さらに詳細なプロフィールはこちら
松井会計事務所へのお仕事ご依頼・お問い合わせはこちら

Excel VBA でプログラミングする際には、ほとんどの場合においてセルを何かしら操作します。

セルを操作するためには、セルを指定しなければなりません。

ご存知の通り、Excel の1つ1つのセルは行番号と列番号を持っています。

Excel シート上ではデフォルトで

・行番号は数値(1、2、3、、、)
・列番号はアルファベット(A、B、C、、、)

で表示されています。

image

Excel VBA でプログラミングする際には、行番号と列番号を与えてセルを指定しなければなりません↓

Cells(行番号,列番号)

そして、列番号の与え方には数値を使う方法とアルファベットを使う方法の2つがあるのです。

セル「D4」を指定する方法はそれぞれ以下のようになります。

・数値を使う方法   Cells(1,4)
・アルファベットを使う方法   Cells(1,”D”)

私個人としては、列番号の指定は数値を使った方が良いと思っています。

レクタングル大 広告

1、列番号の指定

行番号をアルファベットで指定する場合と「変数+数値」で指定する場合について、具体例をあげますね。

次のように毎月の売上高(B列)と売上原価(C列)から原価率(D列)を計算するコードを考えてみます。

*マクロ(Excel VBA)を使う必要もない計算ですが事例として上げさせて頂きます。

Image

①列番号をアルファベットで指定する場合のコード

②列番号を「変数+数値」で指定する場合のコード

コードの違い

上記2つのコードで違う箇所は列番号の指定方法です。

①は売上高、売上原価の読み込みと原価率の出力の部分で列をアルファベットで指定しているのに対し、②は「変数+数値」で指定していますよね。

①の場合⇃

     Uriagedaka = Cells(Row_Start + i – 1, “B”)      ‘売上高読み込み’

     Uriagegenka = Cells(Row_Start + i – 1, “C”)     ‘売上原価読み込み’

     Cells(Row_Start + i – 1, “D”) = Genkaritsu       ‘原価率出力’

②の場合⇃

     Uriagedaka = Cells(Row_Start + i – 1, Line_Start)      ‘売上高読み込み’

     Uriagegenka = Cells(Row_Start + i – 1, Line_Start + 1)   ‘売上原価読み込み’

     Cells(Row_Start + i – 1, Line_Start + 2) = Genkaritsu      ‘原価率出力’

②では変数「Line_Start」にあらかじめ値を入れておくことで全ての列番号が決まります⇃

「Line_Start = 2 」の部分ですね。

マクロの実行結果

上記2つのマクロを実行するといずれも次のように原価率が計算できます。

Image

計算結果は同じなので、この時点では全く問題ありません。

2、列番号の指定に数値を使うメリット

新しく列を挿入する場合

さて、列番号をアルファベットで指定するとどのような場合に不具合が生じるか説明しますね。

次のようにシートの設計を変更する必要が出てきて、一番左側に新しい列を挿入しなければならなくなったとします。

Image

すると何が起こるでしょうか?

列番号がずれたことで、上記のコードのままだと狙い通りに動作しなくなります。

ちゃんと狙い通りに動作するように、コードを変更しなければなりません。

具体的には列番号を変更することになります。

①列番号をアルファベットで指定していた場合

さて、上記①の場合はアルファベットで指定してある列番号を次のように変更します。

変更前↓

    Uriagedaka = Cells(Row_Start + i – 1, “B”)

    Uriagegenka = Cells(Row_Start + i – 1, “C”)

Cells(Row_Start + i – 1, “D”) = Genkaritsu

変更後↓

    Uriagedaka = Cells(Row_Start + i – 1, “C”)

    Uriagegenka = Cells(Row_Start + i – 1, “D”)

    Cells(Row_Start + i – 1, “E”) = Genkaritsu

列がズレたことを考慮して

・BをCに

・CをDに

・DをEに

変更しています。

②列番号を「変数+数値」で指定していた場合

一方で上記②の場合はどうでしょうか?

「Line_Start = 2」の部分を「「Line_Start = 3」に変更するだけで済みます。

列番号を指定して読み込み、出力している以下の部分は何も変更しなくても大丈夫です。

        Uriagedaka = Cells(Row_Start + i – 1, Line_Start) 

        Uriagegenka = Cells(Row_Start + i – 1, Line_Start + 1)

        Cells(Row_Start + i – 1, Line_Start + 2) = Genkaritsu     

列の数が多いほど効果大

さて、アルファベットで列番号を指定していた場合、今回のケースでは売上高、売上原価、原価率の3列を作ってデータを扱っているだけなので、変更はたった3箇所アルファベットを書き換えるだけで済んでいますが

もし、列の数がもっと多かったらどうなるでしょう。

列がズレたのを治すためのアルファベットの書き換えが非常に面倒です。

ですので、列番号を「変数+数値」で指定する方法はデータの列数が多いほど効果が大きいのです。

3、まとめ

以前にも同様の記事を書いていました↓

列番号はアルファベットよりも「変数+数値」を使って指定した方が、後々シートに変更があってプログラミングコードも変更しなければならないときにも融通が利きます。

私はあるシステムを作る際に、列番号をアルファベットで指定してしまい失敗した。。と思った経験がありますので、それを踏まえてこのように↑考えています。

ぜひ参考にして頂きたいです!!

お仕事のご依頼は、以下のリンク先にある個別のフォームよりお願い致します。
*リンク先は私が勤務する松井会計事務所の HP です。

◆税務・会計 顧問
◆税務・会計のスポットコンサルティング
◆経理業務効率化コンサルティング
◆Excel シートのオーダーメイド
◆Excel、マクロ(Excel VBA) の講義、マンツーマンレッスン
◆その他のスポットコンサルティング(当ブログを読み何かご相談したい事項が出てきた方に向けたサービス)

セミナー開催要望がありましたら、以下のリンク先にある個別のフォームよりお願い致します。
◆セミナー開催要望
税理士試験まとめ、税法論文の書き方

————————————————
税理士試験についてのまとめはこちらです!

税法2科目免除大学院についてのまとめはこちらです!

kindle電子書籍を出版しました。

税理士試験の税法2科目免除のために大学院で税法論文(修士論文)を書いた経験を元に、大学院生としての目線から税法論文の書き方を体系化した書籍です↓

大学院での税法論文の書き方

本書籍の内容についてはこちらの記事をご確認下さい。

お問い合わせ・フォローボタン

———————————

よろしければフォロー下さい↓

Twitter フォローボタン:

Feedly フォローボタン:
follow us in feedly

Facebookページ:
*いいね!を押して頂くと更新情報が届きます。

関連コンテンツ



レクタングル大 広告
レクタングル大 広告

シェアする

フォローする