Excel VBA質問箱 IV

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

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


40341 / 76736 ←次へ | 前へ→

【41494】Re:VBAでシフトJISコードをJISコードに変換
お礼  およよ  - 06/8/12(土) 8:04 -

引用なし
パスワード
   こんにちは、およよです。
ichinoseさん、お返事ありがとうございます。

即興で、こんなに書けるとは凄いですね。脱帽です。
えぇ〜。これを理解するまでちょっとお時間下さい。

自分が勉強不足だと改めて感じました。とほほです。
お返事のソースをうまく活用したいです。

結果はどうなるか分かりませんが、頑張ります。

ありがとうございます。


▼ichinose さん:
>皆さん、こんばんは。
>
>>
>>例えば・・・
>>
>>メルマガ
>>
>>を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 お礼

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