テーブルにレコードを追加するときの注意点 ① 失敗談から抜粋
Excelのテーブル機能が、とても便利だ。抽象的な表現ではあるが、この機能は空気を読んで、色々と良い感じに編集してくれる。だが、時にはそれが仇となる場合もある。
例えば、こんな表があるとする。
この表は既に、テーブルとして書式設定されている。
この表に、マクロで一行レコードを追加したい。こんな感じで。
ちなみに手入力の場合、空気を読んで、テーブルは自らを拡張してくれる。
何て素敵な機能なんだ。
そこで手入力と同じ感覚で、「テーブルのすぐ下の行」に情報を入力してみる。
Sub TableTest() Cells(Rows.Count, 1).End(xlUp).Offset(1) = "ばなな" Cells(Rows.Count, 2).End(xlUp).Offset(1) = "300" Cells(Rows.Count, 3).End(xlUp).Offset(1) = "フィリピン" End Sub
結果は、↓ こうなる。
このように一行になるべきところ、階段状にデータがセットされてしまうのは、以下の理由による。
「ばなな」がセットされた時点でテーブルが下に一行分広がってしまい、その結果「テーブルのすぐ下の行」が一つずれてしまったため
上記のマクロをステップ実行してみると、それが良く判る。
従って、もしこの方法でテーブルにレコードを追加したいならば、次のように行う必要がある。
Sub TableTest() Cells(Rows.Count, 1).End(xlUp).Offset(1) = "ばなな" ' 2列目以降はオフセットしない。 Cells(Rows.Count, 2).End(xlUp) = "300" Cells(Rows.Count, 3).End(xlUp) = "フィリピン" End Sub
若しくは、配列に入れて一気に張り付けても良い。
Sub TableTest() Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 3) = Array("ばなな", 300, "フィリピン") End Sub
ところでテーブルには、「集計行」なるものがある。
これがある場合、上記の方法では上手くいかない。
その場合の方法については、明日に続きます。
参考まで。