>最初にVBA経由でテキストファイルから読み込みを行っているのですが、
>そのときに、下記を実行しております。
>application.DecimalSeparator=","
中略
ということは、インポートするときに、VBA経由で処理して読み込んでいるわけですね。
本来なら、出力の際に、逆にして挙げればできるはずなのですが……ただし、オプションの設定をマクロに換えても、Excelはキャッシュを使っていますから、そのまま保存すると、うまくいっていないような気がします。また、ファイル保存する方法には、少しコツが必要です。
以上は想像の範囲ですから、とりあえず、現状案からリクエストの内容を表現してみました。
(A)>いったんテキストに出力する途中、つまり一括か1行単位で変数に読み込んだ時にreplaceしていくという事でしょうか?
(B)>エクセルVBAとは別で別途VBAを準備する必要があるということでしょうか?
(この意味はテキスト・ファイルを選んで、数字を探し出して、フォーマットを替えるというプログラムです。こちらのほうが上です。)
結局、想像するのに、すでに、Textファイルとして存在するものと、出力時に加工する場合と、両方があると想像するわけです。汎用性があるなら、(B)ではないのか、と思った次第なのです。今回は、Aの形式のものです。
ただ、問題点があります。
数字と数値は違うということです。例えば、12.12.12 は、本来、置換してはならないはずです。12.345,01 という数値が、置換させて良いものですが、以下は区分けはされていません。文章の中にある、コンマとドットは置換させてしまいます。それを対処する方法はありますが、スピードが遅くなります。
'// 標準モジュール
Sub ExportTSVFile()
Dim fn As Variant
Dim rng As Range
Dim TextLine As String
Dim fNum As Integer
fn = Application.GetSaveAsFilename("", "テキスト ファイル (*.txt), *.txt")
If VarType(fn) = vbBoolean Then Exit Sub
fNum = FreeFile()
Open fn For Output As #fNum
Set rng = ActiveSheet.UsedRange
For i = 1 To rng.Rows.Count
TextLine = ConvertDecimal(rng.Rows(i))
Print #fNum, TextLine
Next
Close #fNum
End Sub
Private Function ConvertDecimal(arg As Variant) As String
Const SEP As String = vbTab
Dim ret As String
Dim buf As String
If TypeName(arg) = "Range" Then
For Each c In arg.Cells
If c.Value Like "*#[,.]*" Then
buf = Replace(c.Text, ",", "\", , , 1)
buf = Replace(buf, ".", ",", , , 1)
buf = Replace(buf, "\", ".", , , 1)
Else
buf = c.Text
End If
If ret = "" Then
ret = buf
Else
ret = ret & SEP & buf
End If
Next
ElseIf VarType(arg) = vbArray Then
For Each v In arg
If arg Like "*#[,.]*" Then
buf = Replace(v, ",", "\", , , 1)
buf = Replace(buf, ".", ",", , , 1)
buf = Replace(buf, "\", ".", , , 1)
Else
buf = v
End If
If ret = "" Then
ret = buf
Else
ret = ret & SEP & buf
End If
Next
End If
ConvertDecimal = ret
End Function
お礼
ありがとうございます。 ご指摘されている問題点については、元のデーターには変換していいものしか乗らないことを確認しました。 提示いただきましたVBAをそのまま使うことはできませんが、置換についてはとても参考になりました。 手を加えさせていただき、利用させて頂きたいと思います。 分かり難い説明の中、詳細なご説明ありがとうございました。 更なる精進をしていきたいと思います。 お忙しい中、ありがとうございました。