Excelマクロのオートフィルはどの書き方が一番仕事で役に立つか?
こんにちは! Excel講師の榊裕次郎です。
Excelマクロでオートフィルを指示するときのコードはいろいろありますが、GAFA(Appleは除く)のネット広告業に携わってきた中で、これが一番かな~と思い、自分へのメモとして記載しておきます。
例えば、セル「F2」に「=D2-C2」の数式を入れて、オートフィルをするとします。
このワークシートに記載されたデータの件数は、明日以降も増えていくことを想定すると、マクロの中に「F2:F6」と定めてしまうと7行目、8行目にデータが現れた場合、毎日修正しなければいけません。
私はいつもこのように記載しています。
① Sub Sample()
② Range(“A2”, Cells(Rows.Count, 1).End(xlUp)).Offset(, 5).Value = “=D2-C2”
③ End Sub
Rangeプロパティの中に、Cellsプロパティを入れてしまうのも野良マクロと言われそうですが、相対的に行数を取得するにはこれしかないかなと思いました。
① Sampleマクロです。
② A2:A列の末行までの範囲 → それを5列スライドした位置 =「=D2-C2」の数式を入れる。
③ マクロ終了
Cells(Rows.Count, 1).End(xlUp)を解説します。
Cells()内の「Rows.Count」 は末行を指します。「1」はA列です。最後にEnd(xlUp)しているので、Endキーと↑を1回押した結果を意味します。
Excelでセル「A1048576」にアクティブセルを置き、Endキーを押して、↑を1回押すとデータの最終行に到達します。やったことないかたは、こちらの操作を試してみてください。
また、Range(“A2″,”A4”)と記載すると、セルA2からA4までを指定していることと同じになります。関数で「=SUM(A2,A4)」と記載すると、セルA2とA4という意味になるのですが、ここが違うので私も最初は迷いました。
A列の最終行からEndキーと↑を押した結果はセル「A6」になります。つまり、Range(“A2″,”A6”)となるわけです。
続く、Offsetの設定。A列から数えて5列目の場所を指定する、という意味となり、.Offset(,5)の5は自力で数える必要があります。(,5)というのは、(行,列)なので、行方向は省略しています。
ここだけ目視でがんばって数えてあげれば、CSVデータの列が途中で増えたり減ったりしても、あとあと対応ができるはずです。
以下、F2に「=D2-C2」と挿入され、F3以降はきちんと相対参照でセルが動いてくれます。
Excelマクロでオートフィル操作はとても重要な操作です。そしてせっかく作っても変更が多く、何度も修正を余儀なくされます傾向にあります。
マクロを動かしてきた中で、一番維持管理が楽だったので、お気に召した方はお使いくださいませ。