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

はじめに

前回は、似たようなコードを「繰り返し処理」を用いて記述しました。
これで、処理の回数に関係なく、同じコードで処理できるようになりました。

infoment.hatenablog.com

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

今回のテーマ

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


繰り返し処理(最大値を変数に)

前回は、セルの最大値を「4」で固定していました。しかしこれでは、行数が変わるたびこの個所を修正する必要があって煩雑です。
そこで、最大行数に処理範囲が追従するよう、次のように修正します。
 

Sub myCalc()

    Dim i As Long
    Dim iMax As Long

    iMax = Cells(2, 1).End(xlDown).Row - 1

    For i = 2 To iMax
        Cells(i, 2).Value = Mid(Cells(i, 1).Value, 5, 3)
        Cells(5, 2).Value = Cells(5, 2).Value + Cells(i, 2).Value
    Next
    
End Sub

 
f:id:Infoment:20180623210528p:plain

今回新たに iMax という変数を設けました。「i の最大値」の意味で iMax としましたが、誤解なく意味が通じれば、何でも良いと思います。
では、iMax はどのように求まるのでしょうか。下記の一文を読み解いてみましょう。

    iMax = Cells(2, 1).End(xlDown).Row - 1

 
「=」は、この場合「=」の右側(右辺)を「=」の左側(左辺)に入れる(代入する)という意味ですが、今回は「は、」と読み替えることで、理解が進むと思います。
同様に、「.」は「の」に読み替えてみましょう。

iMax は、Cells(2,1) の End(xlDown) の Row から1引いたもの

End(xlDown) は、シートで「Ctrl を押しながら 矢印の ↓ キー」を押した場合と同じ動作をします。従ってこの場合、Cells(2,1).End(xlDown) は、「合計」と書かれた Cells(5,1) になります。

    iMax = Cells(5, 1).Row - 1

Cells(5, 1) の Row とは、Cells(5,1) の行番号、つまり 5 です。

    iMax = 5 - 1

最後に 1 を引いたのは、最終行が「合計」と書かれた「処理対象外の行」だからです。これは、状況によっていろいろと変わるところだと思います。

    iMax = 4

最終的に iMax は、行の増減に自動で追従できるようになりました。

おわりに

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

メリット :

  • 処理の最終行数を、都度編集する必要がなくなった。

デメリット:

  • 開始行や終了行が変わってしまうと、正しく処理できない。

処理行数に対し、マクロが自動で追従するようになりました。大きな進歩です。

(おわり)