[[20231212113647]] 『VBA 和暦に変換』(1250) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA 和暦に変換』(1250)

色んなシートから引用し名前や住所、生年月日を一つにまとめてる表があります。
まとめた表を最終的に数字から漢数字に直すのですが
数字から漢数字に一括変換できるVBAをネットで見つけたので実行しましたが
パソコンによってうまく変換できない場合があります。

私が使用しているのは、Excel2013 バージョンはWindows10
うまく実行されないのは、Excel2019 バージョンはWindows11です。

Sub 数字を漢数字に変換()

    On Error Resume Next
    Application.Calculation = xlCalculationManual

    Dim num1, num2, num3
    Dim i As Integer
    Dim Rng As Range

    num1 = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
    num2 = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
    num3 = Array("一", "二", "三", "四", "五", "六", "七", "八", "九", "〇")

    For Each Rng In Selection
        '数字のみ半角に統一
        For i = 0 To 9
            Rng.Value = Replace(Rng.Value, num1(i), num2(i))
        Next i
        '漢数字化
        For i = 0 To 9
            Rng.Value = Replace(Rng.Value, num2(i), num3(i))
        Next i
    Next Rng
    Application.Calculation = xlCalculationAutomatic

End Sub

上記のVBAを実行すると生年月日が令和5年12月12日⇒令和五年一二月一二日と表示されるセルと
令和5年12月12日⇒2023/12/12と表示されるセルがあります。
セルの書式設定で和暦にしても直りませんでした。
対処法をご教示ください。

範囲が違う場合もあるので、範囲選択してからVBAを実行しています。
またリンクを値に変換せずにVBAを実行しています。
数字から漢数字に変換できれば上記のVBAでなくても構いません。

よろしくお願いいたします。

< 使用 Excel:Excel2013、使用 OS:Windows10 >


対象エリアに入力されているのはシリアル値ですか?文字列ですか?
上記VBAでの変換は文字列が想定されていると思いますが。(試してませんが)
(ゆたか) 2023/12/12(火) 12:02:41

 >For Each Rng In Selection
 の次の行に
 Rng.NumberFormatLocal = "ggge""年""m""月""d""日"""
 と入れて2か所の
 >Rng.Value = Replace(Rng.Value, num1(i), num2(i))
 を
 Rng.Value = Replace(Rng.Text, num1(i), num2(i))
 としてはどうだろうか?

(ねむねむ) 2023/12/12(火) 12:37:29


 おっと

 >Rng.Value = Replace(Rng.Value, num1(i), num2(i))
 を
 Rng.Value = Replace(Rng.Text, num1(i), num2(i))

 >Rng.Value = Replace(Rng.Value, num2(i), num3(i))
 を
 Rng.Value = Replace(Rng.Text, num2(i), num3(i))
 で。
(ねむねむ) 2023/12/12(火) 12:39:14

 > 上記のVBAを実行すると生年月日が令和5年12月12日⇒令和五年一二月一二日と表示されるセルと
 > 令和5年12月12日⇒2023/12/12と表示されるセルがあります。

 原因はおそらく下記のようなことでしょう。

 令和5年12月12日⇒令和五年一二月一二日と表示されるセル
  セルの書式設定が文字列になっている。

 令和5年12月12日⇒2023/12/12と表示されるセル
 これは 二〇二三/一二/一二 となるの間違いではないでしょうか。
 もしそうなら、セルにはシリアル値が入力されて書式設定が和暦になっている。

 生年月日が文字列でもシリアル値でも漢数字に変換する、住所などに含まれる数字も漢数字に変換するなら、下記でどうでしょう。

 Sub 数字を漢数字に変換1()
    Application.Calculation = xlCalculationManual
    Dim Rng As Range
    For Each Rng In Selection
        If IsDate(Rng.Value) Then
            Rng.Value = NumToKan(Format(Rng.Value, "ggge年m月d日"))
        Else
            Rng.Value = NumToKan(Rng.Value)
        End If
        Rng.NumberFormatLocal = "@"
    Next Rng
    Application.Calculation = xlCalculationAutomatic
 End Sub

 Function NumToKan(s As String) As String
    Const s1 = "0123456789−"
    Const s2 = "〇一二三四五六七八九‐"
    Dim i As Long
    NumToKan = s
    For i = 1 To 10
        NumToKan = Replace(NumToKan, Mid(s1, i, 1), Mid(s2, i, 1), 1, -1, vbTextCompare)
    Next
 End Function
(hatena) 2023/12/12(火) 23:16:11

返信が遅くなり申し訳ございません。

ねむねむ様に教えていただいた方法で
3台のパソコンで確認し無事変換することができました。

教えていただきありがとうございました。

hatena様も詳しく教えていただきありがとうございました。
教えていただいたマクロでも無事変換できましたので
この方法もある、ということでメモして覚えておこうと思います。

(1250) 2023/12/13(水) 15:06:38


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.