文字列の抽出と計算 3.VBA:半角スペースの利用 ①
今回のテーマ
前回と同じテーマです。
一つのセルに、3桁の数字が3つあります。これらは、半角スペースで区切られています。この数字について、真ん中のグループの和を求めてみましょう。
文字列の分割
今までは、文字数が規則正しければ、正しく処理することができるものでした。しかし、例えばこの中に
1234 5678 91011
のようなものが混在した場合、正しい結果が得られません。
そこで今回は、「文字列を指定した文字で分割する」という方法を紹介します。
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
今回紹介する関数は、Split関数です。分割した結果は、配列になります。今回はその受け皿として、splitResultという変数を設けました。変数の型はVariant型、つまり何でもありの「万能型」です。
具体的な結果は、次のとおりです。
分割される文字列 123 456 789
分割する文字列 " " (半角スペース)
結果:
splitResult(0)=123
splitResult(1)=456
splitResult(2)=789
配列が「0番目」から始まることに、ご留意ください。今回欲しいのは中央のグループ、つまりsplitResult(1)です。
加えて今回は、合計表示セルを事前にリセットする処理を設けてみました。
Cells(iMax + 1, 2).Value =0
直前の計算結果が残っていると、累計され、本来の正しい結果よりどんどん大きな値になってしまうからです。
おわりに
今回の方法に対する評価(私見)は、以下の通りです。
メリット :
- 文字数が固定でなくとも、対応できるようになった。
デメリット:
- Split関数を用いることに関しては、「今のところ」デメリットなし
顧客名称や品名など、文字長さが一定ではない場合に有効です。
(おわり)