プロが教えるわが家の防犯対策術!

ExcelVBAの漢字の範囲について質問です

過去20年くらいの名簿の中に世界各国人名が沢山ありまして、
亜から熙のように表されるか
Unicodeであらわされるような
漢字の1〜4水準の表に方法をご存知でしたらご教示ください

よろしくお願いします

質問者からの補足コメント

  • 日本人名と混ざった個人名なので、個人情報の兼ね合いから直接はお出しできないのが残念です

      補足日時:2024/03/14 22:41
  • Excelのシートに収められています

      補足日時:2024/03/14 22:43
  • どう思う?

    また、fujillinさんの方法と併せて漢字であればtrueと出したいとおもい、
    [々〇\u3400-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF]という範囲を見つけました。

      補足日時:2024/03/14 22:53
  • 1と2、両方です
    ご迷惑おかけしてすみません

      補足日時:2024/03/15 07:19

A 回答 (7件)

以下のマクロは


①A1~A10の漢字をUnicodeに変換し、B列から右側に出力します。
添付図の上側参照(黄が元データ、赤が変換結果)

②A11~A20行のUnicode(B列から右側に表示)を漢字に変換し、
A11~A20に変換します。
添付図の下側参照(黄が元データ、赤が変換結果)


Public Sub Kanji_to_Unicode()
Dim wrow As Long
Dim i As Long
Dim moji As String
Dim ws As Worksheet
Set ws = ActiveSheet
For wrow = 1 To 10
moji = ws.Cells(wrow, 1).Value
If moji <> "" Then
For i = 1 To Len(moji)
Dim cd As Long
cd = AscW(Mid(moji, i, 1))
If cd < 0 Then cd = cd + 65536
Cells(wrow, i + 1).Value = "\u" & Hex(cd)
Next
End If
Next
End Sub


Public Sub Unicode_to_Kanji()
Dim wrow As Long
Dim wcol As Long
Dim maxcol As Long
Dim moji As String
Dim ws As Worksheet
Set ws = ActiveSheet
For wrow = 11 To 20
maxcol = Cells(wrow, Columns.Count).End(xlToLeft).Column
If maxcol > 1 Then
moji = ""
For wcol = 2 To maxcol
Dim val As String
val = Cells(wrow, wcol).Value
If Left(val, 2) = "\u" Then
val = Mid(val, 3)
moji = moji & ChrW("&H" & val)
Else
moji = "不正文字コード"
Exit For
End If
Next
Cells(wrow, 1).Value = moji
End If
Next

End Sub

参考になれば幸いです。
「ExcelVBAの漢字の範囲について質問」の回答画像7
    • good
    • 1
この回答へのお礼

助かりました

ありがとうございます!

お礼日時:2024/03/15 17:47

下記のマクロは、A1~A10の人名中の漢字の使用状態をB1~B10に設定するマクロです。

1文字でも漢字を使用していれば、TRUEになります。1文字も漢字を使用していない場合はFALSEになります。
Unicodeが\u4E00 以上の文字を漢字と判定します。
下記URL参照
http://www.ys-labo.com/pc/2015/Unicode.html

Public Sub 漢字判定()
Dim wrow As Long
Dim moji As String
Dim ws As Worksheet
Set ws = ActiveSheet
For wrow = 1 To 10
moji = ws.Cells(wrow, 1).Value
If moji <> "" Then
ws.Cells(wrow, 2).Value = KANJI_HANTEI(moji)
End If
Next
End Sub

Private Function KANJI_HANTEI(ByVal moji As String)
Dim ll As Long
Dim i As Long
Dim ucode As Long
KANJI_HANTEI = False
For i = 1 To Len(moji)
ucode = AscW(Mid(moji, i, 1))
If ucode < 0 Then ucode = ucode + 65536
If ucode >= &H4E00 Then
KANJI_HANTEI = True
Exit Function
End If
Next
End Function
「ExcelVBAの漢字の範囲について質問」の回答画像6
    • good
    • 1

>全ての人名の中には漢字に変換候補がなくカタカナであらわされている方がいるので、カタカナから漢字の変換と



これは、思いつきません。
オダノブナガ から 織田信長 にしたい。
にする方法は、人間が判断するか、AIに判断させるかのどちらかになるかと思います。VBAのマクロでは手に負えないかと思います。


>外国人の中には日本人と結婚されている方がおおく、全てがカタカナであらわされている外国人を抽出するのが目的です。

これは、カタカナの範囲を文字コードの範囲で定義し、その範囲内に
全て収まっていれば、全てがカタカナであると判断できます。
    • good
    • 0
この回答へのお礼

返信ありがとうございます
上部のは、fujillinさんの案にも基づいて考えていきたいと思います
下部のは[ ]で囲ったカタカナの文字コードで頑張ろうも思います。

お礼日時:2024/03/15 09:32

>1と2、両方です



具体的に例を挙げて説明していただけませんでしょうか。
①と②の両方ということはあり得ないはずです。
    • good
    • 0
この回答へのお礼

全ての人名の中には漢字に変換候補がなくカタカナであらわされている方がいるので、カタカナから漢字の変換と
外国人の中には日本人と結婚されている方がおおく、全てがカタカナであらわされている外国人を抽出するのが目的です

お礼日時:2024/03/15 07:28

すみません。

あなたが何をなさりたいのかがよくわかりません。
例えば、織田信長という人名の場合、 あなたがなさりたいのは、以下のどれでしょうか。
①.織田信長 という文字から、そのUnicodeを取得したい。
(\u7E54 \u7530 \u4FE1 \u9577 を取得したい)

②.その人名のunicodeはわかっているので、そのunicodeから人名を取得したい。
(\u7E54 \u7530 \u4FE1 \u9577から"織田信長"という文字を取得したい)

③.上記の①、②のどちらでもない。

③の場合は、織田信長を例にして、あなたがなさりたいことを、具体的に提示していただけませんでしょうか。
    • good
    • 0

>過去20年くらいの名簿の中に世界各国人名が沢山ありまして



それは、excelのシートに書かれているのでしょうか。
実際に書かれているサンプルを提示していただけると、良い回答が得られやすくなるかと。
    • good
    • 0

こんにちは



Unicodeの文字コードがわかっていて、それをセルなどに表示したいという意味と解釈しました。


基本的にUnicodeの文字コードを文字に変換するには
 ChrW()
関数を利用すれば可能です。

例えば、
Function unicodeWord(ByRef a) As String
 Dim i
 unicodeWord = ""
 For i = LBound(a) To UBound(a)
  unicodeWord = unicodeWord & ChrW(a(i))
 Next i
End Function
のような関数を作成しておいて・・

'アラビア語
 Range("A1").Value = unicodeWord(Array(1691, 1697, 1705))
'楔形文字
 Range("A2").Value = unicodeWord(Array(55304, 56322, 55304, 56337))

のような処理を実行すれば、A1、A2セルにそれぞれの字句を表示できます。
(当然ですが漢字も同様です。上の例は単なる例で、字句に意味はありません。)
文字コードが16進表記の場合は、&H○○○○などとすれば良いです。
(1文字だけの変換なら、上記の関数も不要なので直接cChrW関数で・・)
    • good
    • 1
この回答へのお礼

ありがとうございます
たくさんの人がいるので困っていました

解決の糸口を頂きとても嬉しいです

お礼日時:2024/03/13 17:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A