質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1005閲覧

エクセルVBAで固定長CSVを作成したい

y_repres

総合スコア15

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2023/04/25 02:07

編集2023/04/25 02:16

エクセルVBAで固定長CSVを作成したい

各セルを順に操作し、文字列(半角のみ)の列は後ろにスペースを必要数埋め、数値の列はアポストロフィと0で埋めることで、シート上の見映えとしては固定長を実現できました。

困っているのは、それを保存するときにどうしてもコンマ区切りCSVになってしまうことです(数値の前のアポストロフィは消えている点はよかったです)。

ThisWorkbook.Activate SoukinSt.Visible = True SoukinSt.Select SoukinSt.Copy '名前を付け、ファイル形式も決めて特定の場所に保存する。 ActiveWorkbook.ActiveSheet.Range("A1").Select Application.DisplayAlerts = False ActiveWorkbook.SaveAs fileName:=fn, FileFormat:=xlCSV ActiveWorkbook.Close ThisWorkbook.Activate

このように保存しています。

現状は、手作業で、いったんコンマ区切りCSVで保存したそのファイルをメモ帳で開きコンマを""で置換して保存することで目的のファイルを得ていますが、ここまでも含めてVBAに任せたいです。

どのような方法がありえるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatsu99

2023/04/25 02:46

カンマ区切りをしたくないということでしょうか。 タブ区切りになりますが、 FileFormat:=xlCSV を FileFormat:=xlCurrentPlatformText にしてはいかがでしょうか。
y_repres

2023/04/25 02:58

ありがとうございます。 しかし、希望はカンマもタブでも区切らずただひたすら区切りのないデータが続き改行だけするテキストファイル(拡張しはcsv)なのです。
tatsu99

2023/04/25 03:06 編集

そうなると、saveasメソッドではなく、直接ファイルへ1行ずつ書き込むしかないですね。 考え方がガラッと変わります。
y_repres

2023/04/25 06:52

ありがとうごごいます。 できればシート上で作成し外部保存という流れでやりたいので、それが難しいようなら直接ファイルに書き込む、拡張子を変えて出力しあとで拡張子を変更、というのも考えてみたいと思います。 ありがとうございました。
guest

回答2

0

ベストアンサー

CSVはカンマ区切りテキストのことなので、列はカンマで区切られますね。

別シートに各列を1列に連結したデータを作成してそれをテキスト保存すればどうでしょう。

別シートに各列を連結する式を設定するとか、

各セルを順に操作し、文字列(半角のみ)の列は後ろにスペースを必要数埋め、数値の列はアポストロフィと0で埋めることで、シート上の見映えとしては固定長を実現できました。

これをVBAでしているなら、この操作をするときに各列を&で結合して別シートに代入するとか。

投稿2023/04/25 03:09

hatena19

総合スコア34362

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_repres

2023/04/25 06:48

ありがとうございました! すべてA列だけで作成し保存するとは、まったく考えてませんでした。 助かります。ありがとうございました。
guest

0

既に締め切ってますが、テキスト出力するサンプルです。
出力対象のシート名:Sheet1
出力ファイル名:data.csv
出力先のフォルダ:マクロのブックの格納フォルダと同じ個所
最大行はA列最終行で決定
最大列は1行最終列で決定
となっています。あなたの環境に合わせて、適切に変えてください。

VBA

1Public Sub テキスト出力() 2 Dim fn As String 3 Dim maxrow As Long 4 Dim maxcol As Long 5 Dim ws As Worksheet 6 Dim wrow As Long 7 Dim wcol As Long 8 Dim lstr As String 9 Set ws = Worksheets("Sheet1") 10 fn = ThisWorkbook.path & "\" & "data.csv" 11 maxrow = ws.Cells(Rows.Count, 1).End(xlUp).Row '1列目の最終行を求める 12 maxcol = ws.Cells(1, Columns.Count).End(xlToLeft).Column '1行目の最終列を求める 13 Open fn For Output As #1 14 For wrow = 1 To maxrow 15 lstr = "" 16 For wcol = 1 To maxcol 17 lstr = lstr & ws.Cells(wrow, wcol).Value 18 Next 19 Print #1, lstr 20 Next 21 Close #1 22 MsgBox ("完了") 23End Sub 24

投稿2023/04/25 07:41

tatsu99

総合スコア5540

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問