文字列の抽出と計算 3.VBA:文字数の規則性 ③

はじめに

前回はVBAのMID関数を用いて、マクロで中央の数字を取り出しました。
さらに、その合計値算出にワークシート関数をVBA内で使用しました。
infoment.hatenablog.com

今回は、前回の内容をさらに改良してみましょう。

今回のテーマ

前回と同じテーマです。
一つのセルに、3桁の数字が3つあります。これらは、半角スペースで区切られています。この数字について、真ん中のグループの和を求めてみましょう。
f:id:Infoment:20180619063141p:plain


マクロでセルに関数を入力する

まず、前回のコードを振り返ってみます。

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を使用しています。
しかしこの方法では、セルの結果だけを見た場合、足し算が正しく
行われているか判別できません。

f:id:Infoment:20180623092801p:plain
 
そこで、「後で確認できるようにしたい」という方には、数式を
直接入力する方法をお勧めします。

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関数により、合計が
求められています。これなら「どこからどこまでをどうした」を、
他の人が見ても確認することができます。

f:id:Infoment:20180623094742p:plain

 
このように、二つの「"」(ダブルコーテーション)で挟まれた
文字は、「文字列」として指定したセルに入力されるので、
数式を直接セットすることも可能になります。

これを、B2~B4の数値抽出にも応用してみましょう。

Sub myCalc()

    Range("B2:B4").Value = "=MID(RC[-1],5,3)*1"
    Range("B5").Value = "=SUM(B2:B4)"
    
End Sub

 
それぞれのセルに、値ではなく数式が入力されました。
 
f:id:Infoment:20180623095519p:plain

 

おわりに

今回の方法に対する評価(私見)は、以下の通りです。

メリット :

  • 前回と比べて、計算の過程(内訳)を確認できるようになった。
  • 3行でも10000行でも、コードの長さはほぼ同じになった。

デメリット:

  • 前回と比べた場合、デメリットは存在しない。

行の増減に追従しない点は相変わらず前回と同様ですが、今回も、前回と比べた場合のデメリットは無さそうです。

(おわり)