文字列の抽出と計算 3.VBA:半角スペースの利用 ②
今回のテーマ
前回と同じテーマです。
一つのセルに、3桁の数字が3つあります。これらは、半角スペースで区切られています。この数字について、真ん中のグループの和を求めてみましょう。
文字列の分割
前回は文字列を半角スペースで分割し、配列 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
最初の頃に比べると、だいぶんすっきりしてきました。
おわりに
今回の方法に対する評価(私見)は、以下の通りです。
メリット :
- コードが短くなった分、情報量が少ないので分かり易い。
デメリット:
- 無駄をそぎ落とした分だけ、変更に弱い。
(捨ててしまった左右の数値を、改めて取り直す必要が出る、など)
優秀な同級生の数学ノートを見ても、何を書いてあるかサッパリ分からないことがあります。脳内で完結している事柄は、敢えて書き出していないからでしょうか。同じことが起きないよう、「省略しすぎ」に注意しましょう。
(おわり)