Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


40376 / 76732 ←次へ | 前へ→

【41455】Re:VBAでシフトJISコードをJISコードに変換
発言  ichinose  - 06/8/10(木) 21:41 -

引用なし
パスワード
   皆さん、こんばんは。

>
>例えば・・・
>
>メルマガ
>
>をVBAのMidを使って読み取ると
>
>$B%a%k%^%,
>
>なふうになってしまいます。
>
>これってシフトJISではないのかな・・・。
これは、JISコード(EBCDIC)ではないですか?
KIコードも入っていますね?

どっか探せばツールもあるんでしょうねえ・・・。

よって、JISコードをExcel上で表示できるようにすればよい
ということですか?

>$B%a%k%^%,
これは、推測ですが、HEXコードで表すと

&H1B, &H24, &H42, &H25, &H61, &H25, &H6B, &H25, &H5E, &H25, &H2C

このようになっているのではないですか?

どういうコードで読み込んでいるのかわかりませんが、

テキストファイルに上記のJISコードで書き込んだファイルを読み込んで
Excel上で表示可能にすることを考えます。


標準モジュールに
'================================================================
Sub 例()
  On Error Resume Next
  Dim flno As Long
  Dim wb(1 To 13) As Byte
  Dim ar As Variant
  Dim idx As Long
  Kill ThisWorkbook.Path & "\jiscode.txt"
  flno = FreeFile()
  Open ThisWorkbook.Path & "\jiscode.txt" For Binary As #flno
  For Each ar In Array(&H1B, &H24, &H42, &H25, &H61, &H25, &H6B, &H25, &H5E, &H25, &H2C, &HD, &HA)
    wb(idx + 1) = ar
    idx = idx + 1
    Next
  Put #flno, , wb()
  Close #flno
End Sub


上記のコードでJISコードで「メルマガ」とjiscode.txtに書き込みます。

バイナリエディタで上記のArray()の中のHexコードが正しく書き込まれているか
確認してみてください。

以下のコードで、
このjiscode.txtを読み込んでデータを加工して表示可能にします。


'====================================
Sub main()
  Dim flno As Long
  Dim jisdata As String
  flno = FreeFile()
  Open ThisWorkbook.Path & "\jiscode.txt" For Input As #flno
  Line Input #flno, jisdata
  Close #flno
  MsgBox cnvjis(jisdata)
End Sub
'=======================================================================
Function cnvjis(mystr As String) As String
  Const esc = 27
  Const ki1 = "$"
  Const ki2 = "B@"
  Const ko1 = "("
  Const ko2 = "BJ"
  Dim idx As Long
  Dim sv As Long
  Dim ki_mode As Long
  Dim e_mode As Long
  For idx = 1 To Len(mystr)
    If Asc(Mid(mystr, idx, 1)) = esc Then
     e_mode = 1
    ElseIf e_mode = 1 Then
     If Mid(mystr, idx, 1) = ki1 Then
       e_mode = 2
     ElseIf Mid(mystr, idx, 1) = ko1 Then
       e_mode = 3
     Else
       e_mode = 0
       End If
    ElseIf e_mode = 2 Then
     If Mid(mystr, idx, 1) = Mid(ki2, 1, 1) Or Mid(mystr, idx, 1) = Mid(ki2, 2, 1) Then
       e_mode = 0
       ki_mode = 1
     Else
       e_mode = 0
       End If
    ElseIf e_mode = 3 Then
     If Mid(mystr, idx, 1) = Mid(ko2, 1, 1) Or Mid(mystr, idx, 1) = Mid(ko2, 2, 1) Then
       e_mode = 0
       ki_mode = 0
     Else
       e_mode = 0
       End If
    ElseIf e_mode = 0 Then
     If ki_mode = 0 Then
       cnvjis = cnvjis & Mid(mystr, idx, 1)
     ElseIf ki_mode = 1 Then
       sv = Asc(Mid(mystr, idx, 1)) * 256
       ki_mode = 2
     ElseIf ki_mode = 2 Then
       sv = sv + Asc(Mid(mystr, idx, 1))
       cnvjis = cnvjis & Evaluate("char(" & sv & ")")
       ki_mode = 1
       End If
     End If
    Next idx
End Function

即興なのでバグがあるかもしれませんが
(何せこの手のコードは15年ぶりくらいですから)

これでうまくおいくようでしたら、このconvjisという関数を使って
実際のデータを試してみてください。

0 hits

【41425】VBAでシフトJISコードをJISコードに変換 およよ 06/8/9(水) 23:24 質問
【41426】Re:VBAでシフトJISコードをJISコードに変換 かみちゃん 06/8/10(木) 0:13 発言
【41437】Re:VBAでシフトJISコードをJISコードに変換 およよ 06/8/10(木) 12:40 お礼
【41455】Re:VBAでシフトJISコードをJISコードに変換 ichinose 06/8/10(木) 21:41 発言
【41494】Re:VBAでシフトJISコードをJISコードに変換 およよ 06/8/12(土) 8:04 お礼
【41431】Re:VBAでシフトJISコードをJISコードに変換 neptune 06/8/10(木) 8:35 回答
【41439】Re:VBAでシフトJISコードをJISコードに変換 およよ 06/8/10(木) 12:43 お礼

40376 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free