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

はじめに

前回は数値を一旦配列に格納し、合計値を計算しました。

infoment.hatenablog.com

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

今回のテーマ

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


文字列の分割

今までは、文字数が規則正しければ、正しく処理することができるものでした。しかし、例えばこの中に

1234 5678 91011

のようなものが混在した場合、正しい結果が得られません。

f:id:Infoment:20180625063219p:plain

そこで今回は、「文字列を指定した文字で分割する」という方法を紹介します。

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関数を用いることに関しては、「今のところ」デメリットなし

顧客名称や品名など、文字長さが一定ではない場合に有効です。

(おわり)