テーブル機能の備忘録 ⑥ 指定範囲をテーブル化
先日から、マクロによるテーブル機能の扱いを纏めている(備忘録)。
infoment.hatenablog.com
今日まで何回か続けていて、ハタと気が付いた。
そういえば、テーブルの作成が抜けていた。
指定範囲、例えば下記の選択範囲を、テーブル化してみよう。
マクロの記録では、このようなコードが記録された。
Sub Macro1() ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$15"), , xlYes).Name = _ "テーブル1" End Sub
これだと、少々味気ない。
- テーブルの範囲が固定だし
- 名前も固定だし、
- xlYesの意味が解らない。
そこで、もう少し丁寧に見てみる。
オブジェクトブラウザで調べてみると、このように書いてある。
ということは、選択範囲をテーブル化し、且つ一行目をヘッダー化するなら、
こんな感じが良いかもしれない。
Sub Macro1() Dim Tb As ListObject ' 選択範囲をテーブル化(Source) ' 一行目をヘッダーにする(XlListObjectHasHeaders) Set Tb = ActiveSheet.ListObjects.Add(Source:=Selection, _ XlListObjectHasHeaders:=xlYes) End Sub
これを関数化すれば、更に使い勝手が良くなると思う。
Function MakeTable(source_range As Range, _ Optional table_name As String = vbNullString) As ListObject ' 一行目をヘッダーにする(XlListObjectHasHeaders) Set MakeTable = ActiveSheet.ListObjects.Add(Source:=source_range, _ XlListObjectHasHeaders:=xlYes) ' テーブルの名前。無指定なら、年月日_時分秒をテーブル名に盛り込んで名前の重複を避ける。 Select Case table_name Case vbNullString MakeTable.Name = "Table_" & Format(Now, "yyyymmdd_hhmmss") Case Else MakeTable.Name = table_name End Select End Function Sub test() Dim Tb As ListObject Set Tb = MakeTable(Selection) End Sub
次回に続きます。
参考まで。