この記事では、VBAで「テーブル」を操作する前に「テーブル」とうはどういうものなのかを知っておく必要がありますね(^^;
今回から「テーブル」に関することを題材に勉強していきましょう(^^)/ 「テーブル」ってわかりますか?
ピボットテーブルは使ったことがあります。
「テーブル」ってピボットテーブルのことですか?
わからないのでおしえてくださ~い(^^;
【この記事でわかることは】
・テーブルとはどういうものなのかが、何となく(^^;わかるようになります
・テーブルを使うメリットがわかります
・VBAでテーブルを作成する方法
前回記事のおさらいは、下のカードをクリックすれば開きます(^^ゞ
前回記事は、UnionメソッドとOffsetを使って同じ値の連続するセル範囲を結合する方法の記事です。是非覗いてみてね(^^)/
テーブルとは
・そもそも「テーブル」って何でしょうか?
Excel のテーブルの概要
・Microsoft Office サポートで検索すると、Excel のテーブルの概要には「関連するデータのグループを簡単に管理および分析するために、セルの範囲をExcelのテーブルに変換できます (以前は Excel リストと呼ばれていました)。」と書かれています。
・個人的には、データ表を「テーブル」というオブジェクト(Listobject)にして管理できるようにしたものと言えるのではないかと思っています。
テーブルの要素について
・同じくサポートには、テーブルの要素について書かれていますので列挙してみます。
見出し行: 既定で見出し行がつき、列のフィルター処理や並べ替えをすばやくできます。
縞模様 (行): 網かけまたは行の縞模様が設定され、データを適切に区別できます。
集計列: 列の 1つのセルに式を入力すると、その列すべてのセルに式を直ちに適用します。
集計行: テーブルに集計行を追加すると、Excel によって [合計]、[平均] などの関数を選ぶための [オート Sum] ドロップダウンリストが表示されます。
サイズ変更ハンドル: テーブル右下のサイズ変更ハンドルを使ってサイズを変更できます。
テーブルの特徴
・テーブルの一般的な特徴は次のとおりです。
・同じ列のデータは全て同じデータ型です。
・1データ(1レコード)につき1行の設定です。
・列名、行名の重複はできません。(重複は自動でインデックス番号が付きます)
・テーブル名は1ブック内(1ファイル内)で重複できません。(同上)
テーブルのメリット
・テーブルのメリットとなる部分について具体的に見て行きます。
【関数の作成・修正関係】
・列名「見出し」を関数に使えます
・列に関数を入力すると、同列のすべてのセルに関数が適用されます
・行や列の増減時に関数を修正する必要がありません
・データを追加したら自動的にテーブル範囲を拡張してくれます
例えば、「金額列」にB列(単価)xC列(数量)の結果を表示したい場合、
通常の表では、=B2*C2 と書きます(テーブルでも書くことができます)。一方テーブルは、セルを選択して計算式をセットすると、=[@単価]*[@数量] と列名が指定されます。
【その他スタイルや便利な動作など】
・テーブルスタイル(セル色・フォント色・罫線)を適用できます
・自動でユニークな列名[見出し]を割り当てしてくれます
・勝手にセルの結合をできないようにしてくれます
・最終行にsumやcountなどの集計行を簡単に挿入することが出来ます
・「ウインドウ枠を固定」しなくても「列見出し」が表示されたままになります
・Power Query エディターが使えます
・セル移動が便利になるテーブル内でのショートカットキー
- 「Ctrl+A」 テーブル内で使うと列見出しを含めない表全体を選択できます
- さらにもう一度押すと、列見出しを含めた表全体を選択します
- 「Ctrl+End」 テーブルの終端セルに移動できます
- 「Ctrl+矢印キー」 テーブル内のその方向の終端セルに移動できます
・VBAからテーブルを扱うのに便利なメソッドやプロパティが使えます
・この部分は、次の項および今後の記事で解説していきます。
テーブル操作を行うVBA
VBAでテーブルのオブジェクトを操作するにはWorksheetオブジェクトメンバのListObjectsにアクセスする必要があります。
テーブル化するAddメソッド
・アクティブシートの選択セルの属する表範囲をテーブルに変換するコードです。
・単純に表をテーブルに変換するだけならこの1行だけです。
Sub ListObjAddSample()
ActiveSheet.ListObjects.Add xlSrcRange, Selection.CurrentRegion
End Sub
テーブルの各位置を取得するVBA
よく使いそうなコードサンプルを少しだけ紹介します。
・見出し行(ヘッダー行)を取得する
・カラム(列)数を取得する
・レコード数を取得する
・最終行番号を取得する(テーブル領域の最終行)
=見出し行番号(テーブルの開始行番号)+ レコード数(テーブルの行数)
・最終列番号を取得する
=見出し列番号(テーブルの開始列番号)+ カラム数(テーブルの列数)-1
Sub ListObjectsSample()
Dim res As Variant
Dim a As String
With ActiveSheet
'見出し行(ヘッダー行)を取得する
res = .ListObjects(1).HeaderRowRange.Row
a = "見出しの行位置取得 = " & res
'カラム(列)数を取得する
res = .ListObjects(1).ListColumns.Count
a = a & vbCrLf & "カラム(列)数取得 = " & res
'レコード数を取得する
res = .ListObjects(1).ListRows.Count
a = a & vbCrLf & "レコード(行)数取得 = " & res
'最終行番号を取得する(テーブルとして定義している領域の最終行)
'=見出し行番号(テーブルの開始行番号)+ レコード数(テーブルの行数)
res = .ListObjects(1).HeaderRowRange.Row + _
.ListObjects(1).ListRows.Count
a = a & vbCrLf & "最終行番号取得 = " & res
'最終列番号を取得する
'=見出し列番号(テーブルの開始列番号)+ カラム数(テーブルの列数)-1
res = .ListObjects(1).HeaderRowRange.Column + _
.ListObjects(1).ListColumns.Count - 1
a = a & vbCrLf & "最終列番号取得 = " & res
End With
MsgBox a
End Sub
・コードの実行結果をメッセージボックスで表示します。
・ListObjectとそのメンバーを使ったコードのほんの一例です。一般の表に対して同じデータを取得する場合との違いを比べてみてください。
・一般の表で同じデータを得るには、end(xldown)、end(xlup)、End(xlToLeft)などのメソッドと変数を使って取得する必要があります。
今回の解説はここでおしまいにします。
まとめ(おわりに)
・いかがでしたでしょうか?
・「いつも汎用でだれでも使えて活用できるように考えてVBAを使う」というポリシーを念頭に記事を書いています。
・サンプルファイルを用意していますのでよろしければお使いください(^^)
まとめと感想など
テーブルに関しては初回でしたので、ほんのさわりだけのようになってしまいましたが、いかがでしたか? しばらく「テーブル」関係の解説を継続していきますね(^^ゞ
はい! 「テーブル」のことは知らなかったのですごく勉強になりました。ピボットテーブルの元になるのが「テーブル」なのかな?と思いました。
テーブルからじゃなくてもピボットテーブルは作成できますけど、大体合っていますよ。ピボットテーブルを使うと、元データの中から必要な項目を集計場所にドラッグして、指定した計算方法で集計できますよね。今度、ピボットテーブルのデータをダブルクリックしてみてください。すると、そのデータがテーブルでシートに出力されますよ(^^)/
★★★ ブログランキング参加中! クリックしてね(^^)/ ★★★
今後の記事について
今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてVBAを使う」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m
【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思います・・・・・
・今後の記事にもご期待ください(^^)/
記事のサンプルファイルをダウンロードできます
今回の記事のサンプルはこのリンク先からダウンロードできます!
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください
【今回分かったことは】
・テーブルとはどういうものなのか何となくわかりました
・テーブルを使うメリットがわかりました
・VBAでテーブルを作成する簡単な方法がわかりました