- 締切済み
全CSVファイルに一行だけ追加したいのですが
突然のご質問失礼いたします。 現在CSVファイルが400程あるのですが、その全ファイルの一行目(A列)に項目を追加したいのですが、なんせ数が多いもので一括で出来る方法がございましたらお教え頂きたく思い書き込みさせていただきました。 教えていただけましたら幸いでございます。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
>全ファイルの一行目(A列)に項目を追加したいのですが 全ファイルの全レコードのことだろう。質問には、正確に表現を書くこと。 結果として a,b,c・・ を ,a,b,c・・・ に(全レコード)すればよい。 ーー 質問には第1項に入れる値は書いてないが、 空白か 決まった値か 変化する値か(ファイルまたはレコード単位で) これも書いてない。 ーーー (1)エディタを使い、読み込んで、先頭に,を挿入すればよい。 こういう機能のあるテキストエディタはあるかもしれない。 (2)これが面倒な数だというなら、プログラムの力を借りないとならない。プログラムを組んだことがあるのかな。多分質問の表現振りから未経験かな。 VB以外の言語 VB6 VB.NET VBSCRIPTなど色んな言語等でできる 「CSVファイル 読み書き」でWEB照会すると沢山例が出る。 (3)エクセルに読み込んで、左端に列挿入する方法もありそう。 もちろんVBAででもできる。 ーー そうすると課題丸投げになる。 それとシーケンシャルファイルは、元のデータに直接増やす、変更することはできないの知ってますか。今のファイルは読むだけのデータで、別途新しいファイルを書き出さないといけない。 ーー Sub test02() Open "C:\Documents and Settings\xxxx\My Documents\test01.csv" For Input As #1 Open "C:\Documents and Settings\xxxx\My Documents\test0B.csv" For Output As #2 While Not EOF(1) Line Input #1, a ' MsgBox a o = "," & a ' MsgBox o Print #2, o Wend Close #1 Close #2 End Sub 上記は旧Basic時代からのコードです。 これに400回繰り返しのステートメントをかぶせ (1)インプットファイル名を都度どう変えるか (2)アウトプットファイル名をどう変えるか (3)対象のCSVファイルを1フォルダに集め、そのフォルダ内の 各ファイルを順次捕まえて、インプットファイルにする。 これだとプログラムでファイル名は割り出せるので、名前は伏せた形にできる。 WEBに実例は沢山載っているが、VBなど未経験者にはむつかしい。 WEB照会では「フォルダ内 ファイル」などで照会。 http://itpro.nikkeibp.co.jp/article/COLUMN/20060120/227645/
- merlionXX
- ベストアンサー率48% (1930/4007)
#1です。 お試しになる場合、いきなり本番ではなく、かならずコピーをとってからにしてくださいね。VBAはやり直しがききませんから、念のため。
- merlionXX
- ベストアンサー率48% (1930/4007)
> その全ファイルの一行目(A列)に項目を追加したいのですが、 A列の前に一列挿入し、その1行目が項目名という理解でいいでしょうか? > なんせ数が多いもので一括で出来る方法 VBAでやるしかないと思います。 CSVファイルが400程ある同じフォルダーにエクセルファイルをひとつ作り、標準モジュールに以下のマクロを書いて実行してみてください。 Sub TEST01() Application.ScreenUpdating = False '画面更新を一時停止 myfdr = ThisWorkbook.Path 'フォルダー名取得 fname = Dir(myfdr & "\*.csv") 'フォルダ内のCSVファイルを検索 Do Until fname = Empty '全て検索 Set wb = Workbooks.Open(myfdr & "\" & fname) 'そのファイルを開きwbとする。 n = n + 1 'カウントしnとする wb.ActiveSheet.Columns("A:A").Insert Shift:=xlToRight 'A列挿入 wb.ActiveSheet.Range("A1") = "新項目名" 'A1に新項目名 wb.Close (True) '開いたファイルを保存して閉じる fname = Dir 'フォルダ内の次のCSVファイルを検索 Loop '繰り返す Application.ScreenUpdating = True '画面更新一時停止を解除 MsgBox n & "件を処理しましました。" End Sub
お礼
ご回答頂きましてありがとうございます。 丁寧なご回答を頂きまして無事に解決できました。 本当にありがとうございます。