スポンサーリンク

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


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、まとめ

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

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

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

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