初心者のためのExcel エクセルマクロVBA入門:連続データを作成しよう
オートフィルならAutoFillを使え!
今日はオートフィルをしてみましょう。プログラミングではありますが、やっぱりマクロは便利なのだ!ということを実感してもらうコーナーです。オートフィルはエクセルの機能です。例えば、「子、丑」とA1、A2に書かれていたら、それを選択して、セルの右下をドラッグすると、それ以降が自動的に入力されますよね。これがオートフィルというエクセルの「機能」になります。
例えば、これをエクセルのマクロで書くとどうなるか?まずはエクセルを知らない人がこれをマクロプログラミングすると・・・
Sub Macro() Dim eto As Variant Dim i As Long eto = Array("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥") For i = 0 To UBound(eto) Sheet1.Cells(i + 1, "G").Value = eto(i) Next End Sub
とこんな感じになります。別に間違いじゃないですが、これはちょっといただけないです。何がいただけないか?というと、やってることは間違ってないですが、パフォーマンスが良くありません。これは単に十二支を出すコードだからいいですが、同じような感じで10000行入力するとなったら・・・
10000回繰り返す必要があります。
( ゚д゚)
これは明らかに、動きが遅いコードになってしまいます。ですが、エクセルで操作する時ってそんなに時間かからないですよね?もうマウスでビューっとやれば一発です。じゃあ、その通りにやればいいのです。それが、、、
AutoFillメソッド
になります。AutoFillメソッドはRangeオブジェクトのメソッド(機能)です。もうさんざ強調しますが、やっぱりエクセルで何かを操作するということは「オブジェクト」を操作することなのです。AutoFillメソッドもメソッドですから、当然どこかのオブジェクトが持っている機能なのです。
ほらね。あった。オブジェクトのメソッドとしてちゃんとAutoFillがあるわけです。エクセルで使っている機能にはちゃんとそれをマクロで表現するものが用意されているです。ですので、それをちゃんと使った方が処理も早いしコードもすっきりするのです。
じゃあさっそくこの機能を使ってコードを書くと。。。
Sub Macro1() Sheet1.Cells(1, "G").Value = "子" Sheet1.Cells(1, "G").AutoFill Destination:=Sheet1.Range("G1:G12") End Sub
となります。見比べてみるとわかりますが、これなら本当に簡単にしかも上のコードよりも早く実行されます。これがエクセルマクロのすごいところなのです。普通のプログラムではちょっと大変なこともエクセルマクロならすぐできます。それはエクセルというアプリケーションの機能をちゃんと使えるからなのです。
これなら、10000行でも50000行でも簡単です。
Sub Macro1() Sheet1.Cells(1, "G").Value = "子" Sheet1.Cells(1, "G").AutoFill Destination:=Sheet1.Range("G1:G50000") End Sub
となるだけです。実行も早いです。気になる人がいたら是非両方試して、どのくらい差があるのか?を見て見たら良いと思います。
今日はここまで。
かしこ