想定状況
消費税率が変わるので、Word文書内の金額(税込表示)を改訂しなければならない。
前提条件
- 消費税が適用される金額と、適用されない金額が混在しており、機械的な判別が困難
- 金額はWord文書内にベタ打ちされている
- ベースとなる税抜金額はすべて100の倍数である
さてどうする
- 前の金額を消して料金表から再計算するより、Wordで計算してから料金表と照合した方が正確そう(計算苦手並感)
- 計算過程は残しておきたいので、今回はフィールドを使うことにした(外したいときはUnlinkすればいいし)
書いた
書いたらこれを適宜ショートカット登録して、金額部分を選択しながら使う
- 消費税非適用の部分や既に新税率適用済みの箇所を選択してしまっても、前の税率の倍数でなければダイアログで止まる→うっかりミスの可能性が低くなる
- 素人マクロなのはご容赦~
Module1
Sub VATIncreace()
Dim i As Long
Dim Price As Variant '税抜金額
Dim PastVATRate As Variant '過去の消費税率
PastVATRate = Array(1.08)
'PastVATRate = Array(1.08, 1.05, 1.03) '混在している文書用
Const VAT_RATE As Double = 1.1 '変更後の消費税率
'--------------------
Price = 0
If (IsNumeric(Selection.Text) = False) Then
GoSub INPUT1
Else
For i = LBound(PastVATRate) To UBound(PastVATRate)
If (CLng(Selection.Text) Mod CLng(PastVATRate(i) * 100)) = 0 Then
Price = CLng(Selection.Text) / PastVATRate(i)
Exit For
End If
Next i
If Price = 0 Then GoSub INPUT1
End If
Selection.InsertFormula Formula:="=(" & Price & ")*" & VAT_RATE, NumberFormat:="#,##0"
Exit Sub
INPUT1:
Price = InputBox("税抜価格を入力してください")
'数式入力を許容する場合は次のIF文をなんとかする(わかんない)
If (IsNumeric(Price) = False) Then
MsgBox ("正しい値が入力されませんでした。処理を中断します")
Exit Sub
End If
Return
End Sub
反省点
- 半角の金額と全角の金額が混在している文書のために、半角化処理とか挟んだ方が良いかもしれない
- 「~円」で検索した結果に対して適用するために、「円」が含まれていても処理できるようにした方が良いかもしれない
- 消費税率が下がることも想定したプロシージャ名にしたほうが良いかもしれない