みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルですが便利なのに、なぜか使われていないように思える機能として「テーブル」があります。
テーブル…ご存知…です…よね?
ということで、今回からシリーズで、エクセルVBAでテーブルを操作する方法について、テーブルが知らない!ってくらいの人でもわかるように、解説をしていきます。
題材は、請求書を作成するマクロを目指します。以下の記事から始まる人気の請求書シリーズのテーブル版です。
まず、初回である本記事では、テーブルとは何か?エクセルのデータリストをテーブルに変換する方法から、VBAでテーブルをオブジェクトとして取得するまでをお伝えしていきますよ。
では、行ってみましょう!
テーブルとは?またそのメリットは?
エクセルで作成した表は、「テーブル」に変換することができます。
エクセルの表をテーブルに変換すると
- 並べ替え
- オートフィルター
- 行や列の追加・挿入・削除
- 集計行の追加
- 簡単にピボットテーブルを作成
- スタイルによる書式設定
など、様々な便利機能を味わうことができます。
「…なんだ、スタイル以外は普通のエクセルシートの機能でもできるじゃん」って思いました?
いえ、違うんですよ。
シートにただ作った縦横の表はあくまで、セル範囲に記載されたデータの羅列でしかないですよね?
どこからどこまでデータがあって、どこが見出し行で…というのは、ユーザー側が把握(データの有無で判断したりしますよね)してあげないといけません。
ですが、テーブル化すれば、エクセルがテーブルをひとまとまりで管理してくれるようになります。
行や列を追加しても、それを「テーブル内のもの」としてエクセルが把握してくれています。
見出し行、集計行がどの範囲なのかもエクセルはわかっています。
これはかなり便利なことなんです。追ってそのパワーもわかると思います。
テーブルへの変換方法
では、実際に表をテーブル化してみましょう。
以下のような請求データの一覧表があるとします。
この表の上のいずれかのセルにカーソルが置かれた状態で、リボンから「挿入」→「テーブル」を選択してみてください。
もしくは、ショートカットキー Ctrl + T でもOKです。
すると、「テーブルの作成」ダイアログが開きます。
ここで、テーブル化したいセル範囲を指定するのですが、エクセルが自動でデータのある範囲を検出してくれますので、ほとんどの場合はそのまま「OK」で良いはずです。
これでテーブルへの変換は完了です。スタイルが設定されるので、テーブル化されたことはすぐにわかりますね。
リボンに「テーブルツール」「デザイン」というメニューが登場しますので、このリボンや右クリック操作で、テーブルならではの機能を堪能することができるようになります。
テーブルはListObjectオブジェクト
では、このテーブルをVBAで取得してみましょうか。
VBAではテーブルはListObjectオブジェクトとして取り扱います。
名前がびみょーって思うかも知れませんね…。Excel2003までは、テーブル機能は「リスト機能」と呼ばれていた名残だそうです。Excel2007から「テーブル」と呼ばれるようになりました。
イミディエイトウィンドウで以下のように入力して Enter してみましょう。
? ActiveSheet.ListObjects(1).Name
すると、以下のようにイミディエイトウィンドウに出力されるはずです。
では、この命令の解説をしていきましょう。
シート上のテーブルをコレクションとして取得する
まず、テーブルつまりListObjectオブジェクトは、Worksheetオブジェクトの配下のオブジェクトです。
そして、Worksheetオブジェクトには、複数のテーブルを配置することができますので、コレクションで取得することになります。
Worksheetオブジェクト上にある、テーブルをコレクションとして取得するにはListObjectsプロパティを使います。
ListObjectsコレクションからListObjectオブジェクトを特定する
コレクションとして取得したので、その中から単体のListObjcetオブジェクトを特定する必要があります。
1から始まる整数が順番に割り振られているインデックスを使うか、テーブル名を使うかのどちらかで、以下のように単体のテーブルオブジェクトを指定します。
ListObjectsコレクション(テーブル名)
これで得られるのは、ListObjectオブジェクトです。
シート上にはそんなにたくさんのテーブルを配置することはないと思いますので、だいたいはインデックスで1とか2を指定すればよいのかなと思います。
テーブル名を取得する
テーブル名を取得するには、ListObjectオブジェクトに対してNameプロパティです。
テーブル操作において、テーブル名はあまり重要ではないことが多いですが、確認用としてNameプロパティは便利です。いつも便利です。
なお、シート上では該当のテーブルを選択した状態で、リボンの「テーブルツール」→「デザイン」→「テーブル名」で、テーブル名を確認することができますよ。
まとめ
以上、エクセルのテーブルとはなにか、そのメリット、そしてVBAでテーブルを取得する方法についてお伝えしました。
まだテーブル化の恩恵についてはわからないかも知れませんが、次回以降で徐々にそのパワーを味わっていくことにしましょう。
次回は、テーブル名でテーブルを扱う方法について詳しくお伝えしていきます。
どうぞお楽しみに!
連載目次:エクセルVBAでテーブルを活用した請求書マクロを作る
エクセルのとっても便利な機能「テーブル」。VBAで操作するときも、テーブルならではの便利さを味わうことができます。請求書マクロを題材にVBAによるテーブルの操作方法をお伝えしていきます。- エクセルVBAでテーブル操作~そのメリットと変換方法&ListObjectの取得
- エクセルVBAでテーブル名を使用してテーブルを取得する方法
- エクセルVBAでテーブルの見出し行・データ行・集計行の範囲の取得をする方法
- エクセルVBAでテーブルのデータ行についてループ処理を行う方法
- エクセルVBAでテーブルのデータ行を追加して値を入力をする方法
- エクセルVBAでテーブルを走査して取引先ごとのブックを作るマクロ
- エクセルVBAでテーブル上の請求データを新規ブックに転記するマクロの作り方
- エクセルVBAで請求書作成マクロをテーブルを活用して作る
- エクセルVBAでテーブルと列挙体を組み合わせると最強のコードが書ける理由