セルの値を合計するマクロ

↓ こちらが面白い。
www.atmarkit.co.jp

中でも、登場人物のこの会話が楽しくて好きだ。
「セルの値を合計するマクロができたぞ……!」
「そういう再発明もたまにはいいですよね」

ということで、私もセルの値を合計するマクロを作ってみた。
f:id:Infoment:20210208224714p:plain

この飛び飛びの範囲で、足し算してみよう。
f:id:Infoment:20210208224953p:plain

ちなみに、通常であればSUM関数による瞬殺案件だ。
f:id:Infoment:20210208225106p:plain

↑ 御覧のように、指定範囲に含まれる文字は無視して、数字だけを加算している。

今回は、数が決まっていない複数の範囲を指定されることを想定し、引数を
可変長にしてみた。
docs.microsoft.com

また、文字を足し算するとエラーになることから、今回はナマクラしてエラーを
無視させてみた(On Error Resume Next)。

Function 合計(ParamArray target_range() As Variant) As Double
    Dim Area As Variant
    Dim Cell As Variant
        On Error Resume Next
        For Each Area In target_range
            For Each Cell In Area
                合計 = 合計 + Cell
            Next
        Next
        On Error GoTo 0
End Function

本家のSUM関数と同じ結果を返してくれた。今のところ、問題なさそうだ。
f:id:Infoment:20210208225706p:plain

ということで、これを職場の勉強会に持ち込んでみたのだが、テーマとして
実は難度が結構高いことが分かった。

  1. 普段、ParamArrayに馴染みが無い。
  2. 二重ループは、学び始めの方にはイメージしにくい。
  3. エラーって無視していいのか。
  4. 無視しないなら、足していいかをどう確認するか。
  5. Areasプロパティに話が及ぶ。
  6. などなど。

結果、中級者を対象とした勉強会のテーマにすると、色々と学ぶことが多くて
面白いかも?と思った次第です。

参考まで。