請求書を作成しています。項目が列挙されているときにその合計金額を記入する必要があります。
Wordでもフィールドコードを使うと、Excelのようにセルの値を合計できます。
でも、フィールドちょっと面倒と思ってしまいまして(笑)、マクロを作ってしまいました。
<目次>
このマクロでできること
選択範囲内の数字を合計して、ステータスバーに表示します。
ちょうどExcelのステータスバーに選択されているセルの数字の合計が表示されるような感じです。
(実行前)
対象を選択します。表内の数字でなくてもかまいません。単位がついていてもかまいません。
(実行後)
ステータスバーに合計が表示されます。
マクロの解説
表内の文字列を取得する場合、Selection.Range.Textでは正確に取得できなかったので、For Each...Next ステートメントを使って、選択されているセル毎にテキストを取得しています。(13行目~15行目)
桁区切りのコンマも除外するようにしてみました。
かなり機械的な処理で荒削りですが、ひとまず今回の私の業務ではとりあえず動いています。
なお、テキスト処理で数字以外を削除するために、先日の記事「【コード】文字の出現頻度を数えるWordマクロ 」でも紹介したVBScriptの正規表現を用いています。
マクロ
Sub 選択範囲内の数字を合計する()
Dim n As Long
Dim RE
Dim myText As String
Dim myVar As Variant
Dim mySum As Single
Dim myCell As Cell
Set RE = CreateObject("VBScript.RegExp")
If Selection.Information(wdWithInTable) = True Then
For Each myCell In Selection.Cells
myText = myText & "|" & myCell.Range.Text
Next
Else
myText = Selection.Range.Text
End If
With RE
'-------------------------------------------
'桁区切りのカンマを削除
'-------------------------------------------
.Pattern = ","
.IgnoreCase = True
.Global = True
myText = .Replace(myText, "")
'-------------------------------------------
'数字以外の文字列を|に変換
'-------------------------------------------
.Pattern = "[^0-9.]{1,}"
.IgnoreCase = True
.Global = True
myText = .Replace(myText, "|")
End With
myVar = Split(myText, "|")
For n = 0 To UBound(myVar)
If myVar(n) <> "" Then
mySum = mySum + myVar(n)
End If
Next n
Application.StatusBar = mySum
Set RE = Nothing
End Sub







