文字列の抽出と計算 3.VBA:自分だけの関数を作る ②

はじめに

前回は、ユーザー定義関数で目的の文字を抽出することで、レイアウトの変更に自動追従させてみました。
infoment.hatenablog.com

今回も、前回の内容を改良してみましょう。

今回のテーマ

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


ユーザー定義関数で複数範囲を指定

前回は、一つのセルを引数として関数に渡し、結果を得るという方法を採りました。今回は、複数範囲をまとめて処理してみましょう。

Function Calc2(myRng As Range) As Long

    Dim r As Range

    For Each r In myRng
        Calc2 = Calc2 + Mid(r.Value, 5, 3)
    Next
    
End Function

f:id:Infoment:20180629063052p:plain

今まで紹介した For ~ Next ループでは、For i =2 to 4 のように、開始と終了の数字を具体的に指定していました。「何番目の処理であるか」が重要である場合、有効な処理です。また、

 For i = 0 to 100 Step 5

のように、0 から 100 まで 5つとびで処理することもできました。

一方、 For Each r in myRng とした場合は、myRng という集団の中から一つずつ「r」として取り出し、個別に処理します。集団の大きさ(総数)に関係なく、指定した集団の中身を隅から隅まで処理する場合に有効です。

おわりに

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

メリット :

  • 前回に比べて、一括で処理できるようになった。

デメリット:

  • 前回同様、他のブックにコピーした場合、コピー先に同じユーザー定義関数がなければエラーになる。

今まで作成したものと組み合わせることで、さらなる高機能化が可能です。

(おわり)