[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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 >
>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.