【コード】選択範囲内の数字を合計するWordマクロ

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

Wordでもフィールドコードを使うと、Excelのようにセルの値を合計できます。

Word または Outlook の表で計算式を使用する

でも、フィールドちょっと面倒と思ってしまいまして(笑)、マクロを作ってしまいました。

このマクロでできること

選択範囲内の数字を合計して、ステータスバーに表示します。

ちょうどExcelのステータスバーに選択されているセルの数字の合計が表示されるような感じです。

(実行前)

対象を選択します。表内の数字でなくてもかまいません。単位がついていてもかまいません。

数字計算

(実行後)

ステータスバーに合計が表示されます。

16-12-275

マクロの解説

表内の文字列を取得する場合、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

トップへ戻る