請求書を作成しています。項目が列挙されているときにその合計金額を記入する必要があります。
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