kzhr's diary

ad ponendum

非欧文中の算用数字を漢数字に置換してくれるかもしれないマクロ

Macでも使へるやうにとRegExpなしでやってみたものの,よくわからないエラーで動かなかったので動くのかもよく知らない。もっとすっきり書けるのではと思ふが,VBA初心者すぎてよく分らない。

Option Explicit

'
' Arabic2HanInJa by Kazuhiro Okada
' A macro converts Arabic numerals in Japanese context into Han numerals
' Note that this macro converts entire file
' version 16 Oct 2017 Initial version
'

Sub Arabic2HanInJa()
' A main body
  Dim para As Paragraph
  Dim chr As Range
  Dim numFlag As Boolean
  Dim replFlag As Boolean
  Dim replBegin As Integer
  Dim replChr As Integer
  Dim chrNum As Integer

  For Each para In ActiveDocument.Paragraphs
    numFlag = False
    replFlag = True
    chrNum = 1
    For Each chr In para.Range
      With chr
        If .Text Like "[!a-zA-Z0-9 ]" Then
          If replFlag And numFlag Then
            For replChr = replBegin To chrNum
              para.Range.Characters(replChr).Text = _
                Arabic2Han(CInt(para.Range.Characters(replChr).Text))
            Next replChr
          Else
            replFlag = True
          End If
        Else
          If .Text Like "[0-9]" Then
            If numFlag = False Then
              numFlag = True
              replBegin = chrNum
            End If
          Else
            replFlag = False
          End If
        End If
      End With
      chrNum = chrNum + 1
    Next chr
    If numFlag And replFlag Then
      For replChr = replBegin To chrNum
        para.Range.Characters(replChr).Text = _
          Arabic2Han(CInt(para.Range.Characters(replChr).Text))
      Next replChr
    End If
  Next para
End Sub

Function Arabic2Han(num As Integer) As String
' A private function that converts Arabic numerals into Han
  Dim hanNumeral()
  hanNumeral = Array("〇", "一", "二", "三", "四", "五", "六", "七", "八", "九")
  Arabic2Han = hanNumeral(num)
End Function