パソコン

ExcelVBA テーブル操作

エクセル

ExcelVBAでよく使うテーブル操作をまとめてみました。

テーブルのフィルタをリセット・解除する

2回繰り返すだけでテーブルのフィルタをリセット(項目ごとに条件を絞る前の状態)できます。

1度だけだとフィルタが解除されるだけで、再度フィルタをセットする必要があります。

テーブルを追加する

テーブルの最終行の下に、データを追加する方法です。

別のプロシージャなどで配列Data(i)に保存したデータを、左側の列から順に出力します。

Colは列数ですね。

・・・他にいい方法があるかも

テーブルのフィルタを操作して期間や日付で絞り込む

テーブルの日付を特定の期間や日付で絞り込む

Fieldで指定した列番号が日付の場合、期間を指定できます。Criteria1は、以下に変更できます。

期間 定数
今日 xlFilterToday 1
昨日 xlFilterYesterday 2
明日 xlFilterTomorrow 3
今週 xlFilterThisWeek 4
先週 xlFilterLastWeek 5
来週 xlFilterNextWeek 6
今月 xlFilterThisMonth 7
先月 xlFilterLastMonth 8
来月 xlFilterNextMonth 9
今年 xlFilterThisYear 13
昨年 xlFilterLastYear 14
来年 xlFilterNextYear 15
今年の初めから今日まで xlFilterYearToDate 16

※使いそうなものだけピックアップ

テーブルの日付を指定した期間で絞りこむ

StartDateとEndDateに日付を指定すれば、その期間でテーブルを操作することができます。

テーブルのフィルタ操作後にデータを取り出す

フィルタ操作後のデータの取り扱いについて、ネットで色々調べたのですが、「これだっ!」といったものが見つかりませんでした。使えそうな方法を試して、もデータがない場合エラーになったりしたので、色々試した結果、以下の形に落ち着きました。

本当は、19行目の処理「For Each Data In Range(“テーブル名”).SpecialCells(xlCellTypeVisible).Rows」だけでテーブルフィルタ操作後のデータを出力したいのですが、データがない場合エラーになります。

そのため、10行目の処理で列タイトルを含む、表示されたテーブルの行数をカウントし、データがある場合(2以上)とない場合で処理を分けて行います。

ここで注意したいのが、CurrentRegionを使っており、テーブルに接するセルが使用されている場合は、うまく動作しない場合があります。

20,21行目で、フィルタ操作後のCells(列番号)でデータを取り出せます。

テーブルの列から重複しないリストを作る

For Each~で、リストを作成したいテーブルの列名を指定することで、リストを簡単に作成できます。

参考にさせて頂いたサイト:Office TANAKA

テーブル操作後に表示されているテーブルから重複しないリストを作る

『.SpecialCells(xlCellTypeVisible)』で表示されている範囲のみ繰り返します。

日付や性別などの条件で絞った状態で重複しないリストを作るときに便利です。