Excel VBA質問箱 IV

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

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


7051 / 13646 ツリー ←次へ | 前へ→

【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 お礼[未読]

【41425】VBAでシフトJISコードをJISコードに変換
質問  およよ  - 06/8/9(水) 23:24 -

引用なし
パスワード
   いつも参考にさせていただいてます。
突然な質問で、すみません。

VBAでシフトJISコードのメール文をJISコードで変換して
いろんな編集をしたいと考えてます。

あまり詳しくないのでインターネットでいくら探しても
見つからず、お手上げ状態です。

わがままですが、どうかよろしくお願いします。

【41426】Re:VBAでシフトJISコードをJISコードに変...
発言  かみちゃん  - 06/8/10(木) 0:13 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>VBAでシフトJISコードのメール文をJISコードで変換して
>いろんな編集をしたいと考えてます。
>
>あまり詳しくないのでインターネットでいくら探しても
>見つからず

以下のURLが参考になりませんか?
http://www.ken3.org/backno/backno_vba16.html#79

※半角カタカナは、機種によっては文字化けの原因になります。
 不特定多数の方が見る掲示板で使うのは、控えるようにしましょう。

【41431】Re:VBAでシフトJISコードをJISコードに変換
回答  neptune  - 06/8/10(木) 8:35 -

引用なし
パスワード
   ▼およよ さん:

>VBAでシフトJISコードのメール文をJISコードで変換して
>いろんな編集をしたいと考えてます。
>
>あまり詳しくないのでインターネットでいくら探しても
>見つからず、お手上げ状態です。

情報の量はMSDNが一番多いです。
ADO Stream オブジェクトを使うのか簡単かと思います。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpado260/htm/mdobjstream.asp
Open メソッド 、readメソッド、writeメソッド、
Charset プロパティ、Type プロパティ
などを調べて下さい。サンプルもあります。

【41437】Re:VBAでシフトJISコードをJISコードに変...
お礼  およよ  - 06/8/10(木) 12:40 -

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

教えて頂いたURLは参考になりましたが、うまくいきませんでした。
自分の説明不足も合ったようで、メール分とはメルマガのことでして

例えば・・・

メルマガ

をVBAのMidを使って読み取ると

$B%a%k%^%,

なふうになってしまいます。

これってシフトJISではないのかな・・・。

折角、返信頂いたのにいいお返事が出来なくてすみません。

これからもよろしくお願いします。


▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>VBAでシフトJISコードのメール文をJISコードで変換して
>>いろんな編集をしたいと考えてます。
>>
>>あまり詳しくないのでインターネットでいくら探しても
>>見つからず
>
>以下のURLが参考になりませんか?
>http://www.ken3.org/backno/backno_vba16.html#79
>
>※半角カタカナは、機種によっては文字化けの原因になります。
> 不特定多数の方が見る掲示板で使うのは、控えるようにしましょう。

【41439】Re:VBAでシフトJISコードをJISコードに変換
お礼  およよ  - 06/8/10(木) 12:43 -

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

教えて頂いたURL拝見しました。
ちょっと自分には難しいようです。

勉強不足と感じました。

いいお返事が出来なくてすみません。

これからも、よろしくお願いします。


▼neptune さん:
>▼およよ さん:
>
>>VBAでシフトJISコードのメール文をJISコードで変換して
>>いろんな編集をしたいと考えてます。
>>
>>あまり詳しくないのでインターネットでいくら探しても
>>見つからず、お手上げ状態です。
>
>情報の量はMSDNが一番多いです。
>ADO Stream オブジェクトを使うのか簡単かと思います。
>http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpado260/htm/mdobjstream.asp
>Open メソッド 、readメソッド、writeメソッド、
>Charset プロパティ、Type プロパティ
>などを調べて下さい。サンプルもあります。

【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という関数を使って
実際のデータを試してみてください。

【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という関数を使って
>実際のデータを試してみてください。

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