エクセルVBAでテーブル操作~そのメリットと変換方法&ListObjectの取得


table

photo credit: thekevinchang via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルですが便利なのに、なぜか使われていないように思える機能として「テーブル」があります。

テーブル…ご存知…です…よね?

ということで、今回からシリーズで、エクセルVBAでテーブルを操作する方法について、テーブルが知らない!ってくらいの人でもわかるように、解説をしていきます。

題材は、請求書を作成するマクロを目指します。以下の記事から始まる人気の請求書シリーズのテーブル版です。

【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
初心者向けVBAの実用的な使い方について、請求データ一覧から請求書を自動で作成するを目標に進めます。初回はWorksheetオブジェクト、Rangeオブジェクトと、セルの値の操作についてお伝えします。

まず、初回である本記事では、テーブルとは何か?エクセルのデータリストをテーブルに変換する方法から、VBAでテーブルをオブジェクトとして取得するまでをお伝えしていきますよ。

では、行ってみましょう!

テーブルとは?またそのメリットは?

エクセルで作成した表は、「テーブル」に変換することができます。

エクセルの表をテーブルに変換すると

  • 並べ替え
  • オートフィルター
  • 行や列の追加・挿入・削除
  • 集計行の追加
  • 簡単にピボットテーブルを作成
  • スタイルによる書式設定

など、様々な便利機能を味わうことができます。

「…なんだ、スタイル以外は普通のエクセルシートの機能でもできるじゃん」って思いました?

いえ、違うんですよ。

シートにただ作った縦横の表はあくまで、セル範囲に記載されたデータの羅列でしかないですよね?

どこからどこまでデータがあって、どこが見出し行で…というのは、ユーザー側が把握(データの有無で判断したりしますよね)してあげないといけません。

ですが、テーブル化すれば、エクセルがテーブルをひとまとまりで管理してくれるようになります。

行や列を追加しても、それを「テーブル内のもの」としてエクセルが把握してくれています。

見出し行、集計行がどの範囲なのかもエクセルはわかっています。

これはかなり便利なことなんです。追ってそのパワーもわかると思います。

テーブルへの変換方法

では、実際に表をテーブル化してみましょう。

以下のような請求データの一覧表があるとします。

エクセルの請求データリスト

この表の上のいずれかのセルにカーソルが置かれた状態で、リボンから「挿入」→「テーブル」を選択してみてください。

エクセルのリボンからテーブルを選択する

もしくは、ショートカットキー Ctrl + T でもOKです。

すると、「テーブルの作成」ダイアログが開きます。

テーブルの作成ダイアログ

ここで、テーブル化したいセル範囲を指定するのですが、エクセルが自動でデータのある範囲を検出してくれますので、ほとんどの場合はそのまま「OK」で良いはずです。

これでテーブルへの変換は完了です。スタイルが設定されるので、テーブル化されたことはすぐにわかりますね。

エクセルのリボンのテーブルツールメニュー

リボンに「テーブルツール」「デザイン」というメニューが登場しますので、このリボンや右クリック操作で、テーブルならではの機能を堪能することができるようになります。

テーブルはListObjectオブジェクト

では、このテーブルをVBAで取得してみましょうか。

VBAではテーブルはListObjectオブジェクトとして取り扱います。

名前がびみょーって思うかも知れませんね…。Excel2003までは、テーブル機能は「リスト機能」と呼ばれていた名残だそうです。Excel2007から「テーブル」と呼ばれるようになりました。

イミディエイトウィンドウで以下のように入力して Enter してみましょう。

すると、以下のようにイミディエイトウィンドウに出力されるはずです。

ListObjectオブジェクトの名前をイミディエイトウィンドウに出力

では、この命令の解説をしていきましょう。

シート上のテーブルをコレクションとして取得する

まず、テーブルつまりListObjectオブジェクトは、Worksheetオブジェクトの配下のオブジェクトです。

そして、Worksheetオブジェクトには、複数のテーブルを配置することができますので、コレクションで取得することになります。

Worksheetオブジェクト上にある、テーブルをコレクションとして取得するにはListObjectsプロパティを使います。

Worksheetオブジェクト.ListObjects

ListObjectsコレクションからListObjectオブジェクトを特定する

コレクションとして取得したので、その中から単体のListObjcetオブジェクトを特定する必要があります。

1から始まる整数が順番に割り振られているインデックスを使うか、テーブル名を使うかのどちらかで、以下のように単体のテーブルオブジェクトを指定します。

ListObjectsコレクション(インデックス)
ListObjectsコレクション(テーブル名)

これで得られるのは、ListObjectオブジェクトです。

シート上にはそんなにたくさんのテーブルを配置することはないと思いますので、だいたいはインデックスで1とか2を指定すればよいのかなと思います。

テーブル名を取得する

テーブル名を取得するには、ListObjectオブジェクトに対してNameプロパティです。

ListObjectオブジェクト.Name

テーブル操作において、テーブル名はあまり重要ではないことが多いですが、確認用としてNameプロパティは便利です。いつも便利です。

なお、シート上では該当のテーブルを選択した状態で、リボンの「テーブルツール」→「デザイン」→「テーブル名」で、テーブル名を確認することができますよ。

エクセルでテーブル名を確認する

まとめ

以上、エクセルのテーブルとはなにか、そのメリット、そしてVBAでテーブルを取得する方法についてお伝えしました。

まだテーブル化の恩恵についてはわからないかも知れませんが、次回以降で徐々にそのパワーを味わっていくことにしましょう。

次回は、テーブル名でテーブルを扱う方法について詳しくお伝えしていきます。

エクセルVBAでテーブル名を使用してテーブルを取得する方法
請求書マクロの作成を題材として、エクセルVBAでテーブルを操作する方法についてお伝えしています。今回は、テーブル名の変更する方法と、テーブル名を使用してテーブルを取得する方法について解説をしていきます。

どうぞお楽しみに!

連載目次:エクセルVBAでテーブルを活用した請求書マクロを作る

エクセルのとっても便利な機能「テーブル」。VBAで操作するときも、テーブルならではの便利さを味わうことができます。請求書マクロを題材にVBAによるテーブルの操作方法をお伝えしていきます。
  1. エクセルVBAでテーブル操作~そのメリットと変換方法&ListObjectの取得
  2. エクセルVBAでテーブル名を使用してテーブルを取得する方法
  3. エクセルVBAでテーブルの見出し行・データ行・集計行の範囲の取得をする方法
  4. エクセルVBAでテーブルのデータ行についてループ処理を行う方法
  5. エクセルVBAでテーブルのデータ行を追加して値を入力をする方法
  6. エクセルVBAでテーブルを走査して取引先ごとのブックを作るマクロ
  7. エクセルVBAでテーブル上の請求データを新規ブックに転記するマクロの作り方
  8. エクセルVBAで請求書作成マクロをテーブルを活用して作る
  9. エクセルVBAでテーブルと列挙体を組み合わせると最強のコードが書ける理由

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

コメント