|
たかし さん、おはようございます。
>しかし、今まで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 '対になる「;」がない場合は中断
'置換前の文字列「-」
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)ので、読み込む際のコードページを合わせたら最初から化けずにすむのではないかと。
ハイフンではないようなので、その後はやはり面倒そうですが。
|
|