Help us understand the problem. What is going on with this article?

【Word VBA】選択部分の消費税込み金額を増税に対応させる

想定状況

消費税率が変わるので、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

反省点

  • 半角の金額と全角の金額が混在している文書のために、半角化処理とか挟んだ方が良いかもしれない
  • 「~円」で検索した結果に対して適用するために、「円」が含まれていても処理できるようにした方が良いかもしれない
  • 消費税率が下がることも想定したプロシージャ名にしたほうが良いかもしれない
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away