下のような感じで,セルに○が入っていると,します。未記入欄に・を記入するマクロを考えてみましょう。
※ここでは,速度計測結果を載せているので,変数の宣言をInteger型のままにしてあります。
左は,ワークシートの一部しかでてませんが, 実際は,100行×100列で,ランダムに○が記入されています。 |
|
Sub 一個ずつ() Dim R As Integer Dim C As Integer For R = 1 To 100 For C = 1 To 100 If Cells(R, C) = "" Then Cells(R, C) = "・" ←@ Next C Next R End Sub |
いわゆる,普通のやり方です。 @で,「セルの値が空なら,・を書き込む」 という処理をしています。 |
Sub 配列で() Dim R As Integer Dim C As Integer Dim tmp As Variant tmp = Range(Cells(1, 1), Cells(100, 100)) ←@ For R = 1 To 100 For C = 1 To 100 If tmp(R, C) = "" Then tmp(R, C) = "・" ←A Next C Next R Range(Cells(1, 1), Cells(100, 100)) = tmp ←B End Sub |
配列を使ったやり方です。 配列を使うには,少し工夫が必要になります。 考え方としては,扱う範囲のデータをまず配列に格納し,変数上で処理を行った後,ワークシートに1回で書き込みます。 @範囲のデータを配列に格納します。 A配列の中で,空ならば・を入れていきます。 B最後に,1回でセルに書き込みます。 |
これを10回繰り返して,平均を出したのが,以下の表です。
また,文字列を数値に置き換える,つまり,○を1に,・を0に置き換えて実行すると,速度が向上することも見逃せません。
一個ずつ | 配列で | 一個ずつ | 配列で | 【考察】 @ ○と・で実行した場合,配列にすると,17.6%の時間で処理できた。 A 1と0で実行した場合,配列にすると,5.9%の時間で処理できた。 B ○を1に,・を0に置き換えて実行した場合,「1つ1つで処理する方法」同士を比較すると,数値処理は文字処理のおよそ1/2の時間で処理できた。 C 同じように数値に置き換えて実行した場合,「配列で処理する方法」同士を比較すると,数値処理は文字処理のおよそ1/16の時間で処理できた。 |
|
1回目 | 0.90625 | 0.15625 | 0.390625 | 0.015625 | |
2回目 | 0.88671875 | 0.15625 | 0.375 | 0.03125 | |
3回目 | 0.890625 | 0.15625 | 0.38671875 | 0.01171875 | |
4回目 | 0.890625 | 0.15625 | 0.375 | 0.03125 | |
5回目 | 0.88671875 | 0.15234375 | 0.390625 | 0.03125 | |
6回目 | 0.890625 | 0.15625 | 0.38671875 | 0.015625 | |
7回目 | 0.90625 | 0.15625 | 0.390625 | 0.03125 | |
8回目 | 0.88671875 | 0.171875 | 0.390625 | 0.015625 | |
9回目 | 0.90234375 | 0.15625 | 0.37109375 | 0.02734375 | |
10回目 | 0.88671875 | 0.15234375 | 0.390625 | 0.015625 | |
平均 | 0.893359375 | 0.15703125 | 0.384765625 | 0.02265625 | |
倍率 | 17.6% | 5.9% | |||
データ | 文字 | 文字 | 数値 | 数値 |
≪番外編≫ 空セルだけにデータを入力
ここではいろいろな場合に応用できる方法として配列を使いましたが,空白セルにデータを書き込むことだけに限れば,Rangeオブジェクトの中のSpecialCellsメソッドを使う方法もあります。
Range("a1:cv100").SpecialCells(xlCellTypeBlanks).Value = "・"
この場合,気を付けないといけないのは,Rangeを使うことです。Cells(○,○)を使うとエラーになり,動作しません。
以下に,SpecialCellsメソッドの他の引数を紹介しておきます。(一部)
定数 | 解説 | 定数 | 解説 |
xlCellTypeAllFormatConditions | 表示形式が設定されているセル | xlCellTypeFormulas | 数式が含まれているセル |
xlCellTypeBlanks | 空のセル | xlCellTypeSameFormatConditions | 同じ表示形式が設定されているセル |
xlCellTypeComments | コメントが含まれているセル | xlCellTypeVisible | 可視セル。フィルタなどで非表示になっていないセル。 |
xlCellTypeConstants | 定数が含まれているセル | xlCellTypeLastCell | 使用されているセル範囲の最後のセル |