- PR -

【VBA】Excelを使用しSJIS文字コードから文字への変換

1
投稿者投稿内容
ponkan
会議室デビュー日: 2008/11/29
投稿数: 2
投稿日時: 2008-11-29 10:52
すみません。質問先を間違えて別の会議室に投稿してしまった為、
再度投稿させていただきます。


環境:Excel 2003

Excelのマクロ(VBA)を使用して、
セルに入っているSJISの文字コード(例:"82A0")を取得し、
文字(例:"あ")に変換してして別のセルに出力させるにはどうすればよろしいでしょうか。

セルの値は、1バイト文字(例:"00")、2バイト文字(例:"82A0")のコードが
混在する可能性がありますが、判断が難しそうであれば、2バイト文字のみの変換でも構いません。

セルの値は文字列または数値型としても格納する事もできますが、
そこからSJISの文字に変換する方法が分かりませんでした。


変換プログラムは、VBAのマクロだけで組んでも、外部のDLLを使用しても構いません。

ご存じの方居られましたらご教示いただけないでしょうか?
nas
会議室デビュー日: 2008/08/01
投稿数: 7
投稿日時: 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/02/05
投稿数: 19
投稿日時: 2008-12-01 12:00
イミディエイトウィンドウで、
?chr(int("&H" & "82A0")), chr(&H42)
あ B
となります。
Range("B1").Value = Chr(Int("&H" & Range("A1").Value))
でよさそうな気が。

mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2008-12-01 12:54
1文字とは限らないのでは…。
ふるふる
会議室デビュー日: 2008/02/05
投稿数: 19
投稿日時: 2008-12-01 13:30
そうですね。セルには1文字で、複数セルがあるのかな、と思っていました。
引用:
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

スキルアップ/キャリアアップ(JOB@IT)