文字列の抽出と計算 3.VBA:半角スペースの利用 ②

はじめに

前回は数値を一旦配列に格納する際、半角スペースで分割するという方法で行いました。

infoment.hatenablog.com

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

今回のテーマ

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


文字列の分割

前回は文字列を半角スペースで分割し、配列 splitResult という箱に小分けにしてみました。

splitResult(0)=123
splitResult(1)=456
splitResult(2)=789

↓前回のコード↓

Sub myCalc()

    Dim i As Long
    Dim iMax As Long
    Dim splitResult As Variant

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

    For i = 2 To iMax
        splitResult = Split(Cells(i, 1).Value, " ")
        Cells(iMax + 1, 2).Value = Cells(iMax + 1, 2).Value _
                                                   + splitResult(1)
    Next
    
End Sub

しかし、そもそもの目的から考えてみると、中央のグループ(この場合は「456」)さえ取れれば良い訳で、使わない数字であれば変数に毎回格納する必要はありません。
そこで、前回のコードを次のように修正してみました。

Sub myCalc()

    Dim i As Long
    Dim iMax As Long

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

    For i = 2 To iMax
        Cells(iMax + 1, 2).Value = Cells(iMax + 1, 2).Value + _
                              Split(Cells(i, 1), " ")(1)
    Next
    
End Sub

前回登場した splitResult は、今回出番なしです。

Split(Cells(i, 1), " ")(1)

とし、分割されたものの2番目(0番目から始まるので、「(1)」になっていることに注意)をすれば、配列に一旦格納する必要もなくなります。これで、変数を一つ減らした分だけ、コードが短くなりました。
さらに言えば、分割する文字列を省略した場合、初期値である半角スペースで分割されます。また、「.Value」も省略可能なため、最終的にはここまで簡略化されます。

Sub myCalc()

    Dim i As Long
    Dim iMax As Long

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

    For i = 2 To iMax
        Cells(iMax + 1, 2) = Cells(iMax + 1, 2) + Split(Cells(i, 1))(1)
    Next
    
End Sub

f:id:Infoment:20180624114555p:plain

最初の頃に比べると、だいぶんすっきりしてきました。

おわりに

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

メリット :

  • コードが短くなった分、情報量が少ないので分かり易い。

デメリット:

  • 無駄をそぎ落とした分だけ、変更に弱い。

 (捨ててしまった左右の数値を、改めて取り直す必要が出る、など)

優秀な同級生の数学ノートを見ても、何を書いてあるかサッパリ分からないことがあります。脳内で完結している事柄は、敢えて書き出していないからでしょうか。同じことが起きないよう、「省略しすぎ」に注意しましょう。

(おわり)