Vorsorge

雑記帳

【vba】【法令用】選択範囲の漢数字を算用数字に変換(修正)

Sub eGov2()
    '
    ' 選択範囲の漢数字を英数字に置換
    '
    Dim i_百 As Integer
    Dim i_十 As Integer
    Dim i_一 As Integer
    Dim str_検索文字列 As String
    
    '初期化
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    
    For i = 999 To 1 Step -1
        i_百 = i \ 100
        i_十 = i Mod 100
        
        i_一 = i_十 Mod 10
        i_十 = i_十 \ 10
        
        str_検索文字列 = 漢数字変換(i_百, "百") + 漢数字変換(i_十, "十") + 漢数字変換(i_一, "一")
        
        With Selection.Find
            .Text = "([第法条項号前])" & str_検索文字列 & "([編章節款目条項号種])"
            .Replacement.Text = "\1" & i & "\2"
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchByte = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .MatchFuzzy = False
            .MatchWildcards = True
        End With
        
        Selection.Find.Execute Replace:=wdReplaceAll
    Next
    
    For i = 99 To 1 Step -1
        
        i_一 = i Mod 10
        i_十 = i \ 10
        
        str_検索文字列 = 漢数字変換(i_十, "十") + 漢数字変換(i_一, "一")
        
        With Selection.Find
            .Text = "([の治正和成])" & str_検索文字列 & "([第 年の])"
            .Replacement.Text = "\1" & i & "\2"
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchByte = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .MatchFuzzy = False
            .MatchWildcards = True
        End With
        
        Selection.Find.Execute Replace:=wdReplaceAll
    Next
        
    For i = 99 To 1 Step -1
        
        i_一 = i Mod 10
        i_十 = i \ 10
        
        str_検索文字列 = 漢数字変換(i_十, "十") + 漢数字変換(i_一, "一")
        
        With Selection.Find
            .Text = str_検索文字列 & "([時間])"
            .Replacement.Text = i & "\1"
            .Forward = True
            .Wrap = wdFindStop
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchByte = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .MatchFuzzy = False
            .MatchWildcards = True
        End With
        
        Selection.Find.Execute Replace:=wdReplaceAll
    Next


End Sub

Function 漢数字変換(ByVal i As Integer, ByVal str_位 As String) As String
    Select Case i
        Case 0
            漢数字変換 = ""
        Case 1
            '一、十、百をそのまま出力
            漢数字変換 = str_位
        Case 2
            If str_位 = "一" Then
                漢数字変換 = "二"
            Else
                漢数字変換 = "二" + str_位
            End If
        Case 3
            If str_位 = "一" Then
                漢数字変換 = "三"
            Else
                漢数字変換 = "三" + str_位
            End If
        Case 4
            If str_位 = "一" Then
                漢数字変換 = "四"
            Else
                漢数字変換 = "四" + str_位
            End If
        Case 5
            If str_位 = "一" Then
                漢数字変換 = "五"
            Else
                漢数字変換 = "五" + str_位
            End If
        Case 6
            If str_位 = "一" Then
                漢数字変換 = "六"
            Else
                漢数字変換 = "六" + str_位
            End If
        Case 7
            If str_位 = "一" Then
                漢数字変換 = "七"
            Else
                漢数字変換 = "七" + str_位
            End If
        Case 8
            If str_位 = "一" Then
                漢数字変換 = "八"
            Else
                漢数字変換 = "八" + str_位
            End If
        Case 9
            If str_位 = "一" Then
                漢数字変換 = "九"
            Else
                漢数字変換 = "九" + str_位
            End If
        Case Else
    End Select
End Function