はじめに
前回はVBAのMID関数を用いて、マクロで中央の数字を取り出しました。
さらに、その合計値算出にワークシート関数をVBA内で使用しました。
infoment.hatenablog.com
今回は、前回の内容をさらに改良してみましょう。
今回のテーマ
前回と同じテーマです。
一つのセルに、3桁の数字が3つあります。これらは、半角スペースで区切られています。この数字について、真ん中のグループの和を求めてみましょう。
マクロでセルに関数を入力する
まず、前回のコードを振り返ってみます。
Sub myCalc() Range("B2").Value = Mid(Range("A2").Value, 5, 3) Range("B3").Value = Mid(Range("A3").Value, 5, 3) Range("B4").Value = Mid(Range("A4").Value, 5, 3) Range("B5").Value = WorksheetFunction.Sum(Range("B2:B4")) End Sub
最後の和を求める際、ワークシート関数のSUMを使用しています。
しかしこの方法では、セルの結果だけを見た場合、足し算が正しく
行われているか判別できません。
そこで、「後で確認できるようにしたい」という方には、数式を
直接入力する方法をお勧めします。
Sub myCalc() Range("B2").Value = Mid(Range("A2").Value, 5, 3) Range("B3").Value = Mid(Range("A3").Value, 5, 3) Range("B4").Value = Mid(Range("A4").Value, 5, 3) ' 合計の計算方法変更 Range("B5").Value = "=SUM(B2:B4)" End Sub
実行して、結果を確認してみましょう。SUM関数により、合計が
求められています。これなら「どこからどこまでをどうした」を、
他の人が見ても確認することができます。
このように、二つの「"」(ダブルコーテーション)で挟まれた
文字は、「文字列」として指定したセルに入力されるので、
数式を直接セットすることも可能になります。
これを、B2~B4の数値抽出にも応用してみましょう。
Sub myCalc() Range("B2:B4").Value = "=MID(RC[-1],5,3)*1" Range("B5").Value = "=SUM(B2:B4)" End Sub
それぞれのセルに、値ではなく数式が入力されました。
おわりに
今回の方法に対する評価(私見)は、以下の通りです。
メリット :
- 前回と比べて、計算の過程(内訳)を確認できるようになった。
- 3行でも10000行でも、コードの長さはほぼ同じになった。
デメリット:
- 前回と比べた場合、デメリットは存在しない。
行の増減に追従しない点は相変わらず前回と同様ですが、今回も、前回と比べた場合のデメリットは無さそうです。
(おわり)