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

はじめに

前回はMID関数を用いて、マクロで中央の数字を取り出しました。
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 = Range("B2").Value + Range("B3").Value + Range("B4").Value
End Sub

最後の和を求める際、セルの値を一つずつ足し算しています。

Range("B5").Value = Range("B2").Value + Range("B3").Value + Range("B4").Value

数が少ない内は良いのですが、行数が増えるごとに式は長くなり、入力の手間も増えます。
できれば、ワークシート関数のSUMを使用したいところです。ところが、VBAにはSUM関数が
ありません。そこで、和を求める部分を次のように変更して、ワークシート関数を使用できる
ようにしてみましょう。

Range("B5").Value = WorksheetFunction.Sum(Range("B2:B4"))

WorksheetFunction. と記載することで、使用できるワークシート関数があります。
※全てのワークシート関数が使用できるわけではない点に、ご留意ください。
実行して、前回と同じ結果が得られることを確認しましょう。

ところで、Range("B2:B4") は B2~B4の範囲を表しています。Range("B2","B4")でも、同じ結果になります。様々な表現があるので、随時覚えていきましょう。

最後に、今回のコードを改めて記載します。

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


今回も、正しい結果を得られました。

f:id:Infoment:20180621225809p:plain
 

おわりに

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

メリット :

  • 前回と比べて、行数が3行でも100行でも、コードの長さが殆ど変わらない(※合計算出のみ)

デメリット:

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

行の増減に追従しない点は前回と同様ですが、前回と比べた場合のデメリットは無さそうです。このような改修は、積極的に行うべきと考えます。

(おわり)