『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