文字列の抽出と計算 3.VBA:文字数の規則性 ⑤
今回のテーマ
前回と同じテーマです。
一つのセルに、3桁の数字が3つあります。これらは、半角スペースで区切られています。この数字について、真ん中のグループの和を求めてみましょう。
繰り返し処理
今までの例では、セルを一つずつ処理する方法を用いていました。
Sub myCalc() Cells(2, 2).Value = Mid(Cells(2, 1).Value, 5, 3) Cells(3, 2).Value = Mid(Cells(3, 1).Value, 5, 3) Cells(4, 2).Value = Mid(Cells(4, 1).Value, 5, 3) Cells(5, 2).Value = Cells(2, 2).Value + Cells(3, 2).Value + Cells(4, 2).Value End Sub
データが3行の場合は、同じような数式を3回書いても、大した手間ではありません。
しかしこれが100行、1000行もある場合はどうでしょうか。
- コード作成に時間がかかる。
- 書き間違いが生じる。
- 何か修正があった場合、行数分の修正作業が必要になる。
などの理由から、マクロで処理するメリットは皆無と言ってよいでしょう。
そこで、このような場合の有効な処理の一つである、繰り返し処理を用いてみます。
繰り返し処理とは、以下の条件のもと、同じことを繰り返す処理を言います。
- 決められた回数に達するまで
- 決められた条件を満たすまで
- 決められた条件を満たさなくなるまで
決められた回数に達する前に、決められた条件を満たした場合、その時点で繰り返しを
終えることも可能です。
VBAに限ったことではありませんが、条件分岐と繰り返しの二つを覚えれば、様ざまな
処理を行えるようになります。
それではまず、繰り返し処理を用いたコードを見てみましょう。
Sub myCalc() Dim i As Long For i = 2 To 4 Cells(i, 2).Value = Mid(Cells(i, 1).Value, 5, 3) Cells(5, 2).Value = Cells(5, 2).Value + Cells(i, 2).Value Next End Sub
Dim i As Long とは、以下の内容を意味しています。
- これから、「i」という名前の変数を使用します(と宣言しています)。
- i という変数の「型」は、「長整数型」です(「あ」などの文字や日付などは入りません)。
変数とは、様々な数値や文字などを一時的に入れるための箱、のようなものです。
ある規則に従って値が変化する場合、変数で表すと大変便利なので、これを利用する場合が
非常に多いです。中学の数学で習った「一次関数」の式
y = ax + b
などと同じですね。
For と Next の間にあるのが、繰り返し処理される内容です。i = 2 To 4 と書かれている
ので、i は 2 から 4 まで 1つずつ増えていきます。具体的には、以下の処理を行います。
Cells(2, 2).Value = Mid(Cells(2, 1).Value, 5, 3)
Cells(5, 2).Value = Cells(5, 2).Value + Cells(2, 2).Value
Cells(3, 2).Value = Mid(Cells(3, 1).Value, 5, 3)
Cells(5, 2).Value = Cells(5, 2).Value + Cells(3, 2).Value
Cells(4, 2).Value = Mid(Cells(4, 1).Value, 5, 3)
Cells(5, 2).Value = Cells(5, 2).Value + Cells(4, 2).Value
2 から 4 まで変化する部分以外は、全て同じです。同じことを何度も書くのは大変
なので、変わるところ(=行番号)だけ変数にして、変わる範囲(2~4)を指定
したわけです。
おわりに
今回の方法に対する評価(私見)は、以下の通りです。
メリット :
- 処理行数に関係なく、ほぼ同じコードで処理できるようになった。
デメリット:
- 開始行や終了行が変わってしまうと、正しく処理できない。
処理行数が3行でも100万行でも、マクロの行数は同じです。これは、大きな改善と
言えます。
(おわり)