↓SaveAsで保存すると書式が変更されてしまいます。
ActiveWorkbook.SaveAs FileFormat:=xlCSV, _
CreateBackup:=False
ActiveWorkbook.Close False
ネットで↓の回避策を見つけたのですがうまくいきません。
****************************************************************
Sub CSV_Save()
'Sheet1をCSV形式で保存します。
With ActiveWorkbook.Sheets(1)
'A1:A10まで日付あるいは通貨設定のデータが入っているとします。
For Each rng In Range("A1:A10")
'テキスト文字列に変更します。
rng.Value = "'" & rng.Text
Next rng
End With
ActiveWorkbook.SaveAs FileName:="C:\test.csv", FileFormat:=xlCSV
End Sub
****************************************************************
ご指導お願いします。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
う~ん?冗談で、質問なのでしょうか?
CSV形式は、ただのテキストです
書式は、保存できません
で、回避策って・・・
表示形式であって、書式ではないのは、見れば判ると思うけど・・・
CSV形式では、回避策は無いと思います
もう少し具体的に、何をどうしたいか?
記載ください
No.2
- 回答日時:
こんにちは。
もう少し具体的に聞かないと分かりませんが、考えている方針は分かります。(「具体的」というのは、出力した後のステップのことです。)
それは、「書式」ではなく、見た目そのものを出力したいとおっしゃっているわけですね。
簡単な方法としては、prn 出力した後に、スペースを、カンマ(,)に変えればよいのですが、ただ、スペースの長さが固定幅でないと、横の位置関係がめちゃくちゃになってしまいます。
もともと、CSV は、Excelのテキスト型の入出力ファイルではなく、原始データベースのデータの、ファイル形式ですから、そういった出力は、非常に変則的なものになります。
>'テキスト文字列に変更します。
>rng.Value = "'" & rng.Text '←Value値に入った時点で、型のキャスティングされてしまいます。
ということなら、そのコードは違います。
論理的な考え方は正しいのですが、受ける側が、rng.Value ではなく、CSV の場合は、直接、出力用のテキストバッファでないといけません。したがって、標準的な出力ではありません。
>ActiveWorkbook.SaveAs FileName:="C:\test.csv", FileFormat:=xlCSV
おそらく、これでは無理だと思います。
実際の問題として、そのような変則的な出力ではなく、Excel上なら、Excelに再インポートするときには、書式情報を付け加えるようにしてください。
ただし、エクスポートし、別のアプリケーションに使用する場合に、CSV 様のものは、いくつかのアプリケーション(半分近く)は、Unix 形式のファイルを要求されます。その場合、どうやっても、標準的な出力では無理です。
VBAの技術力に不足を感じているなら、あまり、この件を深追いしないで、別の加工するソフトウェアを探したほうがよいかもしれません(Excelからの出力は別)。この種のものは、VBAというよりも、VBのレベルの技術が必要になることが多いです。
ありがとうございます。
CSVでなくてxlsで保存したいんでした。。
(1)テキストファイルを取り込む(←この時点では正常)
(2)並び替え等の処理(←並び替えが終わった所で120000161120004が1.2E+14に)
(3)xlsで保存
(1)~(3)の繰り返し
テキストファイルを取り込む時に文字列にする処理を記述しています。
でも120000161120004は文字列になってくれません。違う列の00023は大丈夫なのに。。。これってどうしたらいいですか?
No.3
- 回答日時:
こんにちは。
>CSVでなくてxlsで保存したいんでした。。
そうすると、ご質問のコード自体が違っていますね。
だいぶ、ご質問が混乱されているようですが、少し、ポイントをまとめられたほうがよいかもしれませんね。
>(1)テキストファイルを取り込む(←この時点では正常)
そうすると、前のご質問の延長ですね。前のご質問と合わせてみないといけないようですが、前のものも、レスの内容からしても、解決していないようですね。
とりあえず、今回のご質問から、プロシージャを考えていかなくてはなりませんね。前のご質問は、次のステップだと思います。
しかし、
ActiveWorkbook.SaveAs FileName:="C:\test.csv", FileFormat:=xlCSV
は、いずれにしても違いますね。それは、5シートをCSVで保存できるわけではありません。それに関しては、xls 保存に書き換えればよいと思いますが、5シートを溜めるまで置いたほうが、VBAの場合は、ロスが少ないです。
それと、区切り文字が、コンマ(,)ではなくて、シャープ(#)なのですか?それは、CSV ではありませんね。
もしかしたら、#2で述べたように、見かけ、CSV 様のファイルというのは、単純な、テキスト・インポートではないことがあります。今までの経験で、見えない区切り文字が入っていたりしますから、やはり、ツールを探したほうがよいかもしれません。VBAでは、現物がないと出来ないことが多いのです。ツールの場合は、その見えない区切り文字を探してくれるものがあります。
以下では、区切り文字は、「コンマ(,)」になっています。必要に応じて書き換えてください。
以下では、現在は、すべての数値に対して、「接頭辞(')」が付くようになっています。とりあえず、試してみてください。
標準モジュール
'--------------------------------
Sub CsvTextImport()
Dim myArray() As String 'XL2000以上
Dim FileName As String
Dim lngCount As Long
Dim textLine As String
Dim FNum As Integer
'デリミタ(区切り文字)
Const nDELIM As String = ","
FileName = Application.GetOpenFilename("CSV ファイル(*.csv),*.csv")
' FileName = Application.GetOpenFilename("テキストファイル(*.txt),*.txt")
If FileName = "False" Then Exit Sub
FNum = FreeFile()
Open FileName For Input As #FNum
Application.ScreenUpdating = False
Do While Not EOF(FNum)
Line Input #FNum, textLine
lngCount = lngCount + 1
myArray = Split(textLine, nDELIM)
AddPrefix myArray
Cells(lngCount, 1).Resize(, UBound(myArray) + 1).Value = myArray
Loop
Close #FNum
Application.ScreenUpdating = True
End Sub
Private Function AddPrefix(ByRef Ar As Variant)
'数字に接頭辞をつける
Dim i As Long
For i = LBound(Ar) To UBound(Ar)
If IsNumeric(Ar(i)) Then
Ar(i) = "'" & Ar(i)
End If
Next i
End Function
>(3)xlsで保存
に関しては、ファイル名の基準とかあるでしょうし、前回の様子では、5ファイルごとの区分けだったはずですから、そういうことを加味したほうがよいかもしれません。
本当にありがとうございます。
↓この処理でフォルダの中のテキストファイルをとりこむことはできるのですが、ここにデータの並べ替えなどの記述を加えるとおかしくなってしまいます。(ファイルが10個あるのに3個を繰り返す)
記述を加える場所がおかしいのでしょうか?
Sub test()
With Application.FileSearch
.LookIn = "C:\aaaa"
.Filename = "*.txt"
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
Workbooks.OpenText Filename:=.FoundFiles(i), Origin:=932, StartRow:=1 _
, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, _
Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3 _
, 1), Array(4, 1)), TrailingMinusNumbers:=True
ActiveWorkbook.SaveAs FileFormat:=xlCSV, _
CreateBackup:=False
ActiveWorkbook.Close False
Next i
MsgBox "全て終わりました。"
Else
MsgBox "このフォルダに.txtファイルはありません。"
End If
End With
End Sub
No.4
- 回答日時:
こんにちは。
>この処理でフォルダの中のテキストファイルをとりこむことはできるのですが、
こちらには、こちらの考えの中での組み立てがありますから、こちらの書いたコードを無視して、そちらが作ったコードを持ち出されて、「データがおかしくなる」といわれても、私としては、お答えのしようがありません。単に、データが、不活性のままで、ワークシートに置いたところで、ワークシート内でデータをいじれば、活性化し適正な表示に変化します。そのコードでは、元の質問の書式の問題が解決するとは思えません。
もう一度言いますが、筋道を立てて、質問するべきポイントをよくまとめられたほうがよいかもしれません。
No.5
- 回答日時:
追伸:
Application.FileSearch
は、共有検索プログラムですから、OS (または、Outlookか、OSの依存性)のバージョンによって誤動作があります。OS とExcelのVersion によって、コードの内容は変えなくてはならないかもしれません。
.NewSearch メソッドは入れたほうがよいです。
ActiveWorkbook.SaveAs FileFormat:=xlCSV
で保存とするからには、インポートしたテキストファイルの加工があるはずです。その内容が出てきていません。
私の書いたCsvTextImportに関しては、
FileName = Application.GetOpenFilename("CSV ファイル(*.csv),*.csv")
を抜いて、Sub CsvTextImport(FileName As Variant) で、稼動します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelのマクロコードについて教えてください。 1 2022/03/27 10:47
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 1 2022/04/29 02:36
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル出力の場所を指定
-
fwprintf()について
-
UNIX & Linux の標準出力で得た...
-
Accessでのレポート印刷待機方法
-
VC++でUTF-8のファイルを出力し...
-
サウンド出力のデバイスを選択...
-
Acccess レポートをグループ別...
-
構造体のファイル出力
-
離散フーリエ変換をC言語でど...
-
Paiza Cloudです。 どうやれば...
-
C言語による10進数→16進数変換...
-
Visual Basic 6.0で 1行 読...
-
geany(puppy linux)のプログラ...
-
CSVに書き出すVBSとHTA
-
ファイル比較について
-
テキストファイルに改行コード...
-
スレッドセーフでないAPIをマル...
-
MATLABのCSV形式での書き込みに...
-
Paiza Cloudです。学籍番号と氏...
-
1行ずつではなくまとめてファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド(例えばls)の出力結果...
-
ファイル出力の場所を指定
-
VC++でUTF-8のファイルを出力し...
-
テキストファイルに改行コード...
-
シェルコマンドの 2>&1 とはど...
-
Acccess レポートをグループ別...
-
Wordマクロで指定したフォルダ...
-
二次元配列をクリップボードに...
-
ファイル形式またはファイル拡...
-
CreateProcess関数と実行後の戻...
-
fortranのtxtファイル出力書式...
-
サウンド出力のデバイスを選択...
-
VBA でメモ帳へ保存する際の保...
-
1行ずつではなくまとめてファイ...
-
VBSでEXCEL⇒CSV変換で日付の書...
-
C++ fprintf_sの使い方がわからん
-
ファイルの文字コードをUTF-8に...
-
pLaTeX の EPSファイル読み込み...
-
AccessVBA複数レポート条件毎に...
-
標準出力とファイルに効率的に...
おすすめ情報