- - PR -
【VBA】Excelを使用しSJIS文字コードから文字への変換
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-11-29 10:52
すみません。質問先を間違えて別の会議室に投稿してしまった為、
再度投稿させていただきます。 環境:Excel 2003 Excelのマクロ(VBA)を使用して、 セルに入っているSJISの文字コード(例:"82A0")を取得し、 文字(例:"あ")に変換してして別のセルに出力させるにはどうすればよろしいでしょうか。 セルの値は、1バイト文字(例:"00")、2バイト文字(例:"82A0")のコードが 混在する可能性がありますが、判断が難しそうであれば、2バイト文字のみの変換でも構いません。 セルの値は文字列または数値型としても格納する事もできますが、 そこからSJISの文字に変換する方法が分かりませんでした。 変換プログラムは、VBAのマクロだけで組んでも、外部のDLLを使用しても構いません。 ご存じの方居られましたらご教示いただけないでしょうか? | ||||
|
投稿日時: 2008-11-29 14:41
SJIS文字コードから文字への変換は、以下の様にすればできます。
1.変換する文字列を2文字ずつ切り出します。 2.1.の文字を数値化(文字コード)します。("&H"をつけてCInt関数で変換するのが楽かな?) 3.2.の数値(文字コード)を文字に変換します。(ChrB関数を使います) 4.3.の文字を文字列に貯めます。 5.変換する文字列が無くなるまで1.〜4.を繰り返します。 6.最後に貯めた文字列(SJIS)をUnicodeに変換します。(StrConv関数を使います) 変換した結果を別セルに出力させるのは、標準モジュールに以下の様な変換関数を作成してそれを呼べばよいのではないでしょうか? Function xxx(data As Range) As String ワークシートの別セルは「=xxx(変換したいセル)」とします。 では、頑張ってください。 | ||||
|
投稿日時: 2008-12-01 12:00
イミディエイトウィンドウで、
?chr(int("&H" & "82A0")), chr(&H42) あ B となります。 Range("B1").Value = Chr(Int("&H" & Range("A1").Value)) でよさそうな気が。 | ||||
|
投稿日時: 2008-12-01 12:54
1文字とは限らないのでは…。
| ||||
|
投稿日時: 2008-12-01 13:30
そうですね。セルには1文字で、複数セルがあるのかな、と思っていました。
ひとつのセル内に複数文字分のSJISコードですね。 nasさんの方法でもいいと思いますが、バイト配列を使うと楽だと思います。 Dim a(2) as Byte a(0) = &H82: a(1) = &HA0: a(2) = &H42 Debug.Print StrConv(a, vbUnicode) あB が出力されます。2文字(1バイト分)ごとを数値にしてByte配列に代入してあげればいいかと。 |
1