Excel VBAエキスパート試験スタンダード学習_2
おはようございます
子どもの習い事の試合が続き、久しぶりの週末学習です
今日は学習が足りていなかったテーブルについてまとめてから問題にチャレンジします
テーブル値操作には大きく分けて3通りある
うろ覚えでそんなことは覚えているのですが、
具体的にコーディングしたこともないのでやってみよう!
テーブル操作
テーブの特定
ListObjectオブジェクト
方法 | 基本文法 |
---|---|
テーブルのセルから特定 | テーブル内のセル.ListObject |
テーブルが存在するセルから特定 | 対象のシート.ListObjects(インデックス/テーブル名) |
Rangeとテーブルの名前で特定 | Range(テーブル名) |
☆Range(テーブル名)の書き方では、できない操作もある
Range("A1").ListObject
特定
'タイトル行を含むテーブル全体 Range("A1").ListObject.Range 'タイトル行を含まない Range("A1").ListObject.DataBodyRange 'タイトル行 Range("A1").ListObject.HeaderRowRange '列 Range("A1").ListObject.ListColumns(インデックス/項目名) Range("A1").ListObject.ListColumns(1) Range("A1").ListObject.ListColumns("商品名") Range("A1").ListObject.ListColumns(1).Range 'セル全体 Range("A1").ListObject.ListColumns(1).DataBodyRange 'タイトル行含まないセル全体 Range("A1").ListObject.ListColumns(1).HeaderRowRange 'タイトル行 '行 Range("A1").ListObject.ListRows(インデックス) 'インデックスにタイトル行は含まない Range("A1").ListObject.ListRows(1).Range 'セル全体
操作
'データを探す=AutoFilter Range("A1").ListObject.Range.AutoFilter 2, "みかん" Range("A1").ListObject.DataBodyRange.AutoFilter 2, "みかん" 'ex.絞り込んだ範囲をコピー(アクティブセルがテーブル外だと不具合有り) With Range("A1").ListObject.Range 'タイトル行含む .AutoFilter 2, "みかん" .Copy Sheets("Sheet2").Range("A1") End With With Range("A1").ListObject.DataBodyRange 'タイトル行以外 .AutoFilter 2, "みかん" .Copy Sheets("Sheet2").Range("A1") End With 'ex.絞り込んだ特定列のコピー With Range("A1").ListObject Range.AutoFilter 2, "みかん" .ListColumns(1).Range.Copy Sheets("Sheet2").Range("A1") .ListColumns(3).Range.Copy Sheets("Sheet2").Range("B1") End With 'ex.絞り込んだ特定列に書式設定 With Range("A1").ListObject .Range.AutoFilter 2, "みかん" .ListColumns(2).DataBodyRange.Font.Bold = True .Range.AutoFilter 2 End With 'ex.絞り込んだ行を削除 With Range("A1").ListObject.DataBodyRange .AutoFilter 2, "みかん" .EntireRow.Delete .AutoFilter 2 End With
挿入
'テーブルの右隣に列を挿入 Range("A1").ListObject.ListColumns.Add 'ex.追加した列に数値列の値の2倍の値を入力する Range("A1").ListObject.ListColumns.Add n = Range("A1").ListObject.ListColumns.Count Range("A1").ListObject.ListColumns(n).DataBodyRange = "=[@数値]*2"
Range("テーブル1")
特定
構造化参照を使用
テーブル名[[特殊項目指定子], [列指定子]]
特殊項目指定子
[#All] #すべて
[#Data] #データ
[#Headers] #見出し
[#Totals] #集計
'タイトル行を含むテーブル全体 Range("テーブル1[#All]") 'タイトル行を含まない Range("テーブル1") Range("テーブル1[#Data]") '列 Range("テーブル1[[#All], [商品名]]") 'セル全体 Range("テーブル1[商品名]") 'タイトル行含まないセル全体 Range("テーブル1[[#Data], [商品名]]") '行選択不可
操作
'データを探す=AutoFilter Range("テーブル1").AutoFilter 2, "みかん" 'ex.絞り込んだ範囲をコピー(アクティブセルがテーブル外だと不具合有り) Range("テーブル1[#All]").Copy Sheets("Sheet2").Range("A1") 'タイトル行含む Range("テーブル1[#Data]").Copy Sheets("Sheet2").Range("A1") 'データ行のみ 'ex.絞り込んだ行を削除 Range("テーブル1[#Data]").EntireRow.Delete
挿入
'列を挿入=右隣にデータを入力すれば、Excelが自動でテーブル範囲を広げることを利用 'ex.追加した列に数値列の値の2倍の値を入力する Range("テーブル1[[#Data], [数値]]").Offset(0, 1) = "=[@数値]*2"