Excel VBA質問箱 IV

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

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


20068 / 76732 ←次へ | 前へ→

【62088】Re:テキストの変換
発言  りん E-MAIL  - 09/6/21(日) 9:37 -

引用なし
パスワード
   たかし さん、おはようございます。

>しかし、今まで300以上のファイルの読み込みを行ったが、文字化けしていたのは
>"−"(全角)と"〜"(全角)、"1.→20."(ここでの表示は"1."になっているが
>"マル1")の3種類で、それぞれに対応してるコードはわかっています。
>その他の漢字やひらがなで文字化けしている文字はありません。
>この場合、対応しているコードを引っ張ってきて変換する事もできないのでしょうか?
>
>例) abcde-fghi
>       ↓
>   abcde−fghi


>何かいい方法はないでしょうか?
>そんな方法がないのであれば、ないことを教えてください。
組み合わせがわかっているということなので、
VBAのInstr関数(またはワークシート関数のFind)で文字列の存在を確認→Select Caseなどで組み合わせを決定→VBAのReplace関数(ワークシート関数のSubstitute)で置き換えでもよさそうですが・・・ということで、関数で行なう場合のサンプルです。

Sub test1()
  Dim a(0 To 2) As String
  Dim p(1 To 2) As Integer
  'サンプル文字列
  a(0) = "AAA;BCDEFG-HIJ𑅯;QQQ"
  '処理用文字列
  a(1) = a(0)
  Do
   p(1) = InStr(a(1), "&#")
   If p(1) = 0 Then Exit Do
   p(2) = InStr(p(1) + 1, a(1), ";")
   If p(2) < p(1) Then Exit Do '対になる「;」がない場合は中断
   '置換前の文字列「&#65293;」
   a(2) = Mid(a(1), p(1), p(2) - p(1) + 1)
   '下の関数で変換後の文字列を取得しReplaceで置き換える
   a(1) = Replace(a(1), a(2), Get_BB(a(2)))
  Loop
  '
  MsgBox a(0) & vbCrLf & " ↓" & vbCrLf & a(1), vbInformation, "Done"
  Erase a, p
End Sub
'////////////文字コードから文字列へCase分岐で変換
Function Get_BB(arg1 As String) As String
  Dim NN As Long, s1 As String
  '数値化
  s1 = Replace(Replace(arg1, "&#", ""), ";", "")
  NN = Val(s1)
  '分岐(分岐に失敗したら数値のまま返す)
  Select Case NN
   Case 9312 To 9331: s1 = Chr(Asc("1.") + NN - 9312) 'カッコ内に○つき1を書いています
   Case 65293: s1 = "−"
   Case 65374: s1 = "〜"
   Case Else: s1 = " ?" & NN & "? " '対応するコード設定が必要
  End Select
  Get_BB = s1
End Function
○数字等の含めたコード番号は(htt p://blog.zodiac.vc/webtools/u/?n=68)を参考にしました。ちなみに、ハイフンっぽい文字ということらしいです(htt p://d.hatena.ne.jp/koseki2/20070927/unicodehyphen)

ところで、

Sub Test()
  '
  Workbooks.OpenText Filename:="C:\AAAA.txt", Origin:=932, _
   DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
   ConsecutiveDelimiter:=False, _
   Tab:=False, Semicolon:=True, Comma:=False, Space:=False, Other:=False
End Sub

これで文字化けなくファイルを開くことができますか?
適当なサンプルがないので試せていませんが、原因がUnicodeの変換表の混乱によるものらしい(参考:htt p://oshiete1.goo.ne.jp/qa3716434.html)ので、読み込む際のコードページを合わせたら最初から化けずにすむのではないかと。
ハイフンではないようなので、その後はやはり面倒そうですが。
224 hits

【62070】テキストの変換 たかし 09/6/19(金) 14:47 質問
【62075】Re:テキストの変換 neptune 09/6/19(金) 23:04 発言
【62085】Re:テキストの変換 たかし 09/6/21(日) 0:45 質問
【62088】Re:テキストの変換 りん 09/6/21(日) 9:37 発言
【62089】Re:テキストの変換 たかし 09/6/21(日) 12:25 お礼

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