
第3者にExcel記入頂いた「データレコード(固定列数・変動行数)」を用いて、
・ヘッダレコード(1行:固定値) → 1列目(図のX)
・データレコード(記入された列数=r列とする) → 2~r列目(図のY)
・トレーラレコード(1行:固定値) → r+1列目(図のZ)
とサンドイッチ式に結合し、CSVファイルにて出力する作業をExcelマクロにて自動化しようと思っています。
3種類のレコードはどれも固定の列数ですが、それぞれデータ数が違います。
そのためそもそも「ExcelファイルをCSVファイルとして保存」した際の機能制限上、
もっとも列数の多い行に合わせ、列数の少ないレコードの後ろに勝手にカンマが複数個足されてしまいます。
(※ここの認識合ってますでしょうか。念のため確認です。)
そのため一旦ExcelデータをCSVファイルとして保存したのち、
それをTXTファイルとして開き直し内部データの置換(カンマ個数の調整)をしたいと思っています。
'「Workbooks.Add」で新規生成し、内容編集したファイルを「作業日付」でCSV保存する
'特にパスは指定していないため「カレントフォルダ」に保存
ActiveWorkbook.SaveAs Filename:=Format(Now, "yyyymmddHHMMSS"), FileFormat:=xlCSV
この後の作業について、どういった手順で進めれば良いかご存知の方はいらっしゃいますでしょうか。
※指定パスにあるTXTファイルの読み込み→内容編集・置換
といった作業であれば以下のURLのような事例が参照可能ですが、「生成したばかりのCSVファイルをTXTとして読み返す」ことはそもそも可能なのか解らず。。
http://detail.chiebukuro.yahoo.co.jp/qa/question …
どうぞ宜しくお願いします。

No.1ベストアンサー
- 回答日時:
>もっとも列数の多い行に合わせ、列数の少ないレコードの後ろに勝手にカンマが複数個足されてしまいます。
そういう解釈もあるのでしょうが、四角形に範囲を取っているからだと思います。
>CSVファイルにて出力する作業をExcelマクロ
Excel VBAでするなら、
>それをTXTファイルとして開き直し内部データの置換(カンマ個数の調整)をしたいと思っています。
これは不要でしょう。最初から、そう出力すれば済む話ですから。
それとも、既存のCSVを直す方法もありますが、それは、また補足にでも加えてください。
マウスで範囲を選択します。だから、画像には出てきませんが、空行を選択範囲に入れると、それも入ってしまいます。
なお、このマクロは、Excel 97~2000 によく見かけられた、懐かしい古典的なものです。
'//
'Option Explicit
Sub CSVExportMacro()
Dim Rng As Range
Dim Fname As String
Dim i As Long, j As Long
Dim buf As String
Dim FNo As Integer
Dim mPath As String
mPath = ThisWorkbook.Path & "\"
If TypeName(Selection) <> "Range" Then
Exit Sub
End If
Set Rng = Selection
If WorksheetFunction.CountA(Rng) < 2 Then
MsgBox "データが不足しています。", vbExclamation
Exit Sub
End If
Fname = Format$(Now(), "yyyymmddHHMMSS")
Fname = mPath & Fname & ".csv"
FNo = FreeFile
Open Fname For Output As #FNo
With Rng
For i = 1 To .Rows.Count
For j = 1 To .Columns.Count
If Trim(.Cells(i, j).Value) <> "" Then
buf = buf & "," & Trim(.Cells(i, j).Value)
End If
Next j
Print #FNo, Mid$(buf, 2)
buf = ""
Next i
Close #FNo
Beep
End With
End Sub
'///

ありがとうございます!
> そういう解釈もあるのでしょうが、四角形に範囲を取っているからだと思います。
色々コードを試していたのですがうまく行かず、
たまたま見かけた記事でもそう書かれていたので勝手に
「行ごとにデータ個数が異なるファイルをそのままCSV出力することは出来ない」と思い込んでいました。
ですが記載頂いた例を見て解りました。
元データをRange().Copyで取得し形式を指定して貼り付けていたのですが、
そこを「各セルごとに」転記を行っていた点が差分だったようです。
元々の問題は何とか解決しそうです。ありがとうございましたm(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
エクセルVBA 大容量CSVファイル...
-
【エクセルVBA】お願いします。...
-
複数のCSVファイルのAccessテー...
-
データ解析ソフトRでのファイル...
-
特定ファイルの一括削除
-
csvファイルでの日付設定「yyyy...
-
「,」区切りのcsvファイルを...
-
fgetsでcsvファイルを読み込め...
-
VBAでcsvファイルを読み込んで...
-
バッチでCSVを処理する時、空の...
-
csvファイル 項目数取得
-
複数のcsvファイルをフォルダご...
-
csvファイルのデータの一部を取...
-
ExcelマクロにてCSV出力したデ...
-
エクセルvbaでdocuworksprinter...
-
エクセルのプロパティーでセキ...
-
ファイル名と同名のフォルダを...
-
エクセルVBAで一つ上の階層...
-
同じファイル名 上書きしないフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
バッチでCSVを処理する時、空の...
-
csvファイルでの日付設定「yyyy...
-
【C#】パス名で無効な文字
-
CSV形式での保存時に”文字列...
-
csvファイル 項目数取得
-
マクロから出力されるcsvのダブ...
-
csvファイルを列数ごとに分割す...
-
VBAでcsvファイルを読み込んで...
-
データ解析ソフトRでのファイル...
-
【エクセルVBA】お願いします。...
-
エクセルVBA 大容量CSVファイル...
-
csvファイルのデータの一部を取...
-
CSVファイル作成
-
CSV出力して、MS/EXCELで開くと...
-
CSVファイルの項目行を削除...
-
エクセル形式のファイルの読み込み
-
複数のcsvファイルをExcelに一...
-
【エクセル マクロ】読み込ん...
-
複数のCSVファイルのAccessテー...
おすすめ情報