みなさん、こんにちは。
ITソリューション事業部の林です。
本記事では、ExcelVBAのテクニックを紹介・解説いたします。
今回紹介するのは、「列の感覚を養う」です。
これまで紹介した関数やステートメントなどとは異なり、感覚的なテクニックになります。
【目次】
それでは、始めましょう!
列の感覚とは
VBAでマクロ開発を効率的に進めるために、列の感覚をつかんでおいて損はありません。
Excelを表計算ソフトとして利用するだけならそのような感覚は必要ないのですが、ことマクロづくりにおいては話が変わります。
上図のように、Excelのデフォルト設定で列はアルファベットで表示されています。
この状態でマクロ作成していると、「この列は左から何番目なんだ?」という疑問が思い浮かんできます。
特に、Cellsでセルアドレスを指定する場合や、水平方向(列方向)へのループ処理をする場合に、顕著です。
視覚的に列名(アルファベット)を数字表記に切り替えて確認する方法も、一応あります。
この設定はExcelのオプションから変更することができます。
(ファイルタブ→オプション→数式のオプション→数式の処理>[R1C1参照形式を使用する]にチェックオン)
しかし、列の感覚をつかめていれば、オプション設定を変更しなくても列名を数字で把握できますので、テンポよく開発を進められるようになります。
感覚をつかむ練習「アルファベットと列番号を覚える」
アルファベットはAからZまでで26個あります。
そして、Excelシートの列はZの後ろにもAA、AB、AC・・・と続いていきます。
これらをすべて覚えるとなると、それなりの時間がかかります。
しかし、すべて覚える必要はありません。
最小で2つ、余裕があれば3つ、多くて4つ覚えられれば、十分です。
■練習① アルファベット2つと列番号を紐づけて覚える
ここでは、J(ジェイ)とT(ティー)を覚えます。
この2つはそれぞれ、左端(A列)から数えて10番目と20番目に位置します。
【J(ジェイ)の位置】
【T(ティー)の位置】
これを理解していると、JもしくはTを基準に、異なる列の列番号を相対的に求められるようになります。
JまたはTを基準に列の相対位置をつかむクセをつければ、26個のアルファベットの列番号をわざわざ覚える必要はなくなります。
よほど項目の多い表でなければ、Excelの表はT列(20番目)以内に収まっています。
そのため、JとTの列番号を覚えていれば、だいたいの表に対応できます。
私はこの二つをJT(ジェイティー)と暗記しました。
■練習② アルファベット3~4つと列番号を紐づける
JTを覚えていればほぼ必要はないのですが、感覚拡張のために3つめ、4つめのアルファベットを覚えます。
3つめはAD(エーディー)、4つめはAN(エーエヌ)です。
ADは左から30番目、ANは40番目に位置します。
【AD(エーディー)の位置】
【AN(エーエヌ)の位置】
これを覚えておくと、練習①同様の要領で、基準となる列番号からの相対的な位置把握をしやすくなります。
覚え方ですが、強引に語呂合わせできなくもありません。
アルファベット3つ:J_T_AD(ジェイタッド)
アルファベット4つ:J_T_AD_AN(ジェイタッダン)
AD列やAN列まで使用する表はそう多くありませんが、パラメータやログをExcelシートに展開した場合などには使えると思います。
番外編:セルアドレスから列名(アルファベット)を求める方法
ここでは、マクロの関数を使用して列名(アルファベット)を求める方法を紹介します。
使用機会としては、マクロを中断してデバッグモードを開いているときに、今どの列が処理されているか確認するときに使えます。
それ以外にも、Cellsで指定したセルの列名を求めるときにも応用できます。
具体的には、Split関数とAddressプロパティを用います。
[書式]Split(確認対象セル.Address, "$")(1)
Split関数については過去記事で紹介しています。
(過去記事Vol.9 参照)
Addressプロパティはセルのアドレス情報を表示することができます。
このプロパティ単体だと、A10セル(10行目、1列目)のアドレスは以下のように表示されます。
【イミディエイトウインドウで確認】
セルアドレス情報は"$"で区切られています。
Split関数は、文字列情報に対して区切り文字を境に分割し配列に格納する特性があります。
そして、格納された配列から要素番号"1"を指定して取り出すと、そのセルアドレス情報から列名がわかります。
【イミディエイトウインドウで確認】
---------------------------------------------------------------------------------------------------------------------
今回の記事は以上になります。
それでは、また次回お会いしましょう!