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

このQ&Aに関連する最新のQ&A

A 回答 (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
    • good
    • 1
この回答へのお礼

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

お礼日時:2001/06/16 08:39

先ほどの回答は早とちりしていました。

シート上で行ってしまい、質問に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
    • good
    • 0

ツール→アドインで分析ツールにチェックを入れます。


HEX2DECを使えるようにします。
=CHAR(HEX2DEC(3021))
で出ると思います。
分析ツールを使わない場合は、=CHAR(16進数3021を10進数にした数値)ででます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/15 19:11

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QChr関数のラインフィールド文字って?

EXCEL2000のVBAを勉強しているものです。
Chr関数のラインフィールド文字ってどんなことが
できるのでしょうか?調べると「復帰」とかかれているのですが・・
実際に使ってみても何がどう変わっているのかがわかりません。
chr(10)
とすると、どうなるのでしょうか?教えてください。
よろしくお願いいたします。

Aベストアンサー

こんにちは。maruru01です。

文字コード10のラインフィードは、Excelではセル内改行になります。
セルの書式設定の[配置]で、[折り返して全体を表示する]にチェックをしておいて、
そのセルに、

Range("A1").Value = "1行目" & Chr(10) & "2行目"

と書き込むと、セル内改行されます。
ちなみにVBの定数を使用して、

Range("A1").Value = "1行目" & vbLf & "2行目"

とも出来ます。

なお、通常のWindows改行は、Chr(13) & Chr(10)で、VBの定数は、「vbCrLf」ですが、これを使用して、

Range("A1").Value = "1行目" & vbCrLf & "2行目"

とすると、セルの表示は、

1行目・
2行目

という風に、Chr(13)が表示出来ずに、中黒になってしまいます。

Q小文字の英数文字列の漢字登録で大文字も表示される。

IME2000を使っています。
例えば、
aaa@***.co.jp を「アドレス」という読み方で登録すると
漢字変換すると
AAA@***.CO.JP や
Aaa@***.co.jp や
AAA@***.CO.JP(全角)
も一緒に候補として出てきます。
余計な候補表示を消す、または、出てこなくするような登録方法は無いでしょうか?

Aベストアンサー

よく言われているのは、品詞を「顔文字」として登録することです。

ちなみに、2000のような変換は、2002だと出なくなります。

Qアクセス レポート テキストボックスの文字配置は文字数で自動的に文字配置の変更可能ですか

現在アクセスに入力されているテーブルのデーターをもとに書道展のキャプションを作成中です
タイトルと作家の名前を表示させますがタイトルが1文字数から13文字数くらいまでと様々なため
テキストボックスの文字配置が均等割り付けだと文字数の多いタイトルは2段目が間延びしておかしいです
例えば8文字までだと均等割り付けそれ以上だと左揃えなどということが可能でしょうか?
他に良い方法があれば教えてくださいよろしくお願いします
Wordの差し込み文章のように一枚ごとの編集が出来ればいうことなしなのですが?それはあり得ませんか?

Aベストアンサー

> イベントプロシージャには文字数が多くなれば自動で2行にになり字も小さくなるための式がかかれています

こちらでしょうか?

テキストボックス内の文字を自動で縮小して全体を表示
http://hatenachips.blog34.fc2.com/blog-entry-11.html

上記の例なら

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  AutoFontSize Me.テキストボックス名, 12
  If Len(Me.テキストボックス名) <= 8 Then
    Me.テキストボックス名.TextAlign = 4 '均等割り付け
  Else
    Me.テキストボックス名.TextAlign = 1 '左揃え
  End If
End Sub

のようになります。


> ユーザー定義関数名、「イベントプロシージャ」以外の式が指定されていますとなりました。

加えた変更を元に戻してもエラーになりますか?

とりあえず、コンパイルしてエラーが無いことを確認してください。

経験上、Access のバージョンにもよりますが、
デザインビュー以外で表示しているときに VBA の修正をしたりすると
このエラーが出ることが多いような気がしています。

> イベントプロシージャには文字数が多くなれば自動で2行にになり字も小さくなるための式がかかれています

こちらでしょうか?

テキストボックス内の文字を自動で縮小して全体を表示
http://hatenachips.blog34.fc2.com/blog-entry-11.html

上記の例なら

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  AutoFontSize Me.テキストボックス名, 12
  If Len(Me.テキストボックス名) <= 8 Then
    Me.テキストボックス名.TextAlign = 4 '均等割り付け
  Else
    Me.テ...続きを読む

QACCESSのVBAで2バイト文字を%xxの形に変換する方法

例えば"教えて!goo"の検索で「コード変換」で検索をすると、アドレスには以下のURLが表示されます。
http://oshiete.goo.ne.jp/search/search.php?status=select&MT=%A5%B3%A1%BC%A5%C9%CA%D1%B4%B9&ct_select=1&ct0=207&ct1=218&ct2=232

"%A5%B3%A1%BC%A5%C9%CA%D1%B4%B9"の部分が「コード変換」という文字を表しているのだと思いますが、この変換処理をACCESSのVBAで行う方法はありませんでしょうか?

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

Aベストアンサー

http://133.53.64.43/tonoike/computer/vb/otheroriginal.asp

URLエンコード・デコードを試してみてください。

Q亜フィル形式とはどのような形式ですか?

亜フィル形式とはどのような形式ですか?

Aベストアンサー

土木用語でダムの形式に「ロックフィル形式」というのがあるのは聞いたことがありますが、「亜フィル形式」って、これまで見たことも聞いたことも無い言葉です。
jun198181 さんは、どんな文脈のなかでその言葉に遭遇したのでしょうか?
それによっては識者から何らかのの回答がつくかもしれません。

回答にならなくてすみません。
(^^;;


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

人気Q&Aランキング

おすすめ情報