| 
    
     |  | こんにちは、およよです。 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という関数を使って
 >実際のデータを試してみてください。
 
 
 |  |