• ベストアンサー

VBAでコードから漢字に変換するのは

VBAを使用していますが、コードから漢字を求める方法が見つかりません。 たとえば、3021から漢字の亜を求めたいのですが。 1バイト文字ならChr関数で求められますが、2バイト文字、つまり、漢字を求める方法が見つからないのです。 どなたか教えていただきたいのですが。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

一人で回答を汚しています。すいません。 一応、VBAの中だけでできました。JisからShiftJisに変換しています。何個かの漢字で確かめましたが全部ではないので何かあるかも・・・ Sub jiscode2Kanji() Dim kjCD As String kjCD = "3021" '*** これをセット *** Jis2ShiftJis Val("&H" & Mid(kjCD, 1, 2)), Val("&H" & Mid(kjCD, 3, 2)) End Sub Sub Jis2ShiftJis(HiByt As Double, LoByt As Double) '下位バイト If HiByt And 1 Then If LoByt < &H60 Then LoByt = LoByt + &H1F Else LoByt = LoByt + &H20 End If Else LoByt = LoByt + &H7E End If '上位バイト If HiByt < &H5F Then HiByt = (HiByt + &HE1) \ 2 Else HiByt = (HiByt + &H161) \ 2 End If '漢字 Dim knjCode As Double knjCode = HiByt * &H100 + LoByt If knjCode < 0 Then knjCode = knjCode + 65536 End If Range("A1") = Chr(knjCode) End Sub

yamamichi
質問者

お礼

何度も回答ありがとうございます。 こんな時間に回答していただけるなんてとても感謝しております。  早速、実行してみました。 OKです。 それで、漢字一覧表を作成し、全件で確認しました。 そうしたら、1点だけ問題がありました。 それは、上位バイトが奇数で、下位バイトが7Fでも漢字を取得しています。 連続して次のコードも取得しています。 つまり、たとえば押はJISコードが3221ですが317Fでも現れ、応は317Eですが3220でも出てくるのです。 同様に、前述の上位バイトが奇数のときに最後の拡張漢字7B7Fと7C20でも出てきます。 ですが、これは、私にもカットできるので、本当にありがとうございました。 ゆっくりお休みください。  「マスターに推薦」したいのですが、初めてなので、どのようにしたらいいのかわかりません。次回になると思いますが、悪しからず。 とりあえずお礼まで。

その他の回答 (2)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

先ほどの回答は早とちりしていました。シート上で行ってしまい、質問にVBA・・・があるのを見落としていました。16進数を10進数に変換することを簡単に行うためにアドインを持ち出してしまいました。問題はこれではなかったようです。すいませんでした。 シート上なら、3021(16進数)を10進数(12321)に直して、Char(12321)で亜が出ます。 気になったのでVBAで行ってみたら、なるほど、うまくいきません。色々行ってみましたが???です。シートでなら簡単なので、苦し紛れに下記を書いてみました。VBAを使っていることになるのかどうか分かりませんが、例として、A1に16進数を書き込み、B1に=Char(A1)を書いておき、VBA側でRange("B1")で値を拾っています。 これも回答になっていないと思いますが参考程度にして下さい。また調べてみます。 他の方からいい回答がきますように。 'A1に16進数を入れて、B1にはあらかじめ「=Char(A1)」をセットしています Sub Code2Kanji() Dim i As Integer 'カウンタ Dim cd As Integer '漢字コード Dim cd2Kanji As String 'その漢字 Dim cdHex As Long 'cdを16進数に cd = 3021 For i = 1 To 4 cdHex = cdHex * 16 + Mid(cd, i, 1) Next Range("A1") = cdHex cd2Kanji = Range("B1") Debug.Print cd2Kanji End Sub

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

ツール→アドインで分析ツールにチェックを入れます。 HEX2DECを使えるようにします。 =CHAR(HEX2DEC(3021)) で出ると思います。 分析ツールを使わない場合は、=CHAR(16進数3021を10進数にした数値)ででます。

yamamichi
質問者

お礼

早速の回答ありがとうございます。 初めての質問だったのでとても驚いています。 そこで、早速やってみました。ですが、分析ツールを使わないでも出来るとのことなので、Char関数を使ってみたのですが、コンパイルエラーになります。  そこで、ツール->アドインを使用としたのですが、ツールの下にはアドインはなく、アドインはツールと並んでありますが、その中には分析ツールにチェックするような項目はありませんでした。 AccessとExcelの両方を見たのですが同様でした。  そこでまた、Char関数をヘルプで覗いたところ、msowcf.dllファイルをインストールする必要があるとあり、ファイルは見つかったのですが、インストールの仕方がわかりません。 お手数ですが、インストールする方法を教えていただきたいのです。 よろしくお願いいたします。

関連するQ&A