第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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Excel(エクセル) csvに別のExcelの文章を差し込む 2 2023/04/01 16:06
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
マクロから出力されるcsvのダブ...
-
バッチでCSVを処理する時、空の...
-
エクセルVBA 大容量CSVファイル...
-
VBScriptでcsvファイルの編集は...
-
CSV形式での保存時に”文字列...
-
csvファイルのデータの一部を取...
-
複数のCSVファイルのAccessテー...
-
<csv>複数条件で検索・抽出し、...
-
【エクセル マクロ】読み込ん...
-
ACCESS VBAで、CSVにデータを吐...
-
【ExcelVBA】UTF-8の文字コード...
-
複数のcsvファイルをExcelに一...
-
VBAでcsvファイルを読み込んで...
-
CSVファイル作成
-
エクセル形式のファイルの読み込み
-
C#でのcsv保存
-
【VAB】 エクセルファイルから...
-
CSVファイルの項目行を削除...
-
VBA一覧取得 再投稿
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カンマ区切りのCSVファイルから...
-
CSV形式での保存時に”文字列...
-
複数のcsvファイルをExcelに一...
-
csvファイル 項目数取得
-
csvファイルでの日付設定「yyyy...
-
バッチでCSVを処理する時、空の...
-
マクロから出力されるcsvのダブ...
-
csvファイルを列数ごとに分割す...
-
csvファイルのデータの一部を取...
-
エクセル形式のファイルの読み込み
-
エクセルVBA 大容量CSVファイル...
-
CSVファイル作成
-
EXCEL|csvで保存→開くcsvを閉じる
-
CSVファイルの項目行を削除...
-
巨大なCSVの加工(指定列のみの...
-
データ解析ソフトRでのファイル...
-
VBAでCSVファイルのデータを集...
-
【ExcelVBA】UTF-8の文字コード...
-
【C#】パス名で無効な文字
-
【エクセル マクロ】読み込ん...
おすすめ情報