- ベストアンサー
CSVファイルの情報をテキストファイルに吐き出す方法
- VBもしくはエクセル付随のVBを使用して、CSVファイルの情報をテキストファイルに吐き出す方法を紹介します。
- 特定セルの文字列を雛形テキストファイルの内容で置換して吐き出すことができます。
- また、任意の名前でディレクトリを作成し、指定したディレクトリ内にファイルを保存することも可能です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Option Explicit Const DEF_雛形 As String = "C:\aaa\hinagata.txt" Const DEF_DATA As String = "C:\aaa\data.csv" Const DEF_OUT_NAME As String = "kyokumei.txt" Private m_fsoObj As FileSystemObject Sub Main() Set m_fsoObj = New FileSystemObject '雛形読込 Dim l_str雛形 As String l_str雛形 = Get雛形(DEF_雛形) 'データファイル Dim l_fsoFile As File Set l_fsoFile = m_fsoObj.GetFile(DEF_DATA) '接続する Dim l_adoCnn As Connection Set l_adoCnn = Get接続(l_fsoFile.ParentFolder.Path) Dim l_strSQL As String l_strSQL = "SELECT * FROM [" & l_fsoFile.Name & "]" Dim l_adoRec As Recordset Set l_adoRec = l_adoCnn.Execute(l_strSQL) Do Until l_adoRec.EOF Dim l_strBuff As String '雛形の文字を置換する l_strBuff = Replace(l_str雛形, "[アーティスト名]", l_adoRec("アーティスト名")) l_strBuff = Replace(l_strBuff, "[曲名]", l_adoRec("曲名")) 'フォルダ作成処理 Dim l_strDir As String l_strDir = l_adoRec("artistname") Dim l_fsoDir As Folder On Error Resume Next 'フォルダを作成 Set l_fsoDir = l_fsoFile.ParentFolder.SubFolders.Add(l_strDir) If (Err.Number <> 0&) Then Set l_fsoDir = l_fsoFile.ParentFolder.SubFolders(l_strDir) End If On Error GoTo 0 Debug.Print l_fsoDir.Path 'テキスト出力処理 Dim l_ts As TextStream Set l_ts = l_fsoDir.CreateTextFile(DEF_OUT_NAME, True) l_ts.WriteLine l_strBuff l_ts.Close l_adoRec.MoveNext Loop MsgBox "終了" End Sub '雛形の取得 Private Function Get雛形(ByVal p_strFile As String) As String Dim l_fsoFile As Scripting.File Set l_fsoFile = m_fsoObj.GetFile(p_strFile) Dim l_ts As TextStream Set l_ts = l_fsoFile.OpenAsTextStream(ForReading) Dim l_strBuff As String l_strBuff = l_ts.ReadLine l_ts.Close Get雛形 = l_strBuff End Function 'フォルダに接続 Function GetConnection(p_strPath As String) As Connection Dim l_strCnn As String l_strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & p_strPath & ";Extended Properties='text;HDR=YES;FMT=Delimited'" Dim l_adoCnn As Connection Set l_adoCnn = New Connection l_adoCnn.Open l_strCnn Set Get接続 = l_adoCnn End Function
その他の回答 (3)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
CSVファイルを一つのデータベースに見立てて、 「ADO」+「FileSystemObject」 でのサンプルを作って見ました。 入門書でできる作り方を、あえてしませんでした。 DBとして実現する方法は、まだ早いかもしれませんが、、、 でも ・ファイルの読み/書き/作成/削除 は基本中の基本です。 「Open」「FreeFile」で調べると、私の操作方法とは違いますが、VBでの標準的なファイル操作例が見つかります。 ↓以下サンプルについて ※※※※※※※※※※※※※※※ ※「hinagata.txt」の内容 ※※※※※※※※※※※※※※※ [アーティスト名]の[曲名]は良い曲ですね。 ※※※※※※※※※※※※※※※※※※※※ ※「data.csv」の内容(カンマ区切りです) ※※※※※※※※※※※※※※※※※※※※ アーティスト名,artistname,曲名 安室奈美恵,amuronamie,愛してマスカット 小室哲哉,komurotetsuya,get wild プログラムの実行には、参照設定を行う必要があります。 ※Microsoft Scripting Runtime ※Microsoft ActiveX Data Objects 2.X Library 文字制限の関係から、プログラムコードからコメントを減らしました。 次の回答に実際のプログラミングコードを載せます。
- chochobizo
- ベストアンサー率42% (30/70)
VB、VBAの知識を持ち合わせていないのに、 なぜ、プログラミングなのでしょうか? そこからの説明は不可能だと思います。 VBだと、フォームのデザインやコンパイル方法まで説明を求めているのですか? VBAだと、CSVファイルにマクロは保存できないため、Excelブックに保存し、 CSVファイルを指定してやる記述が必要ですが、その辺りは理解できますか? VBAは、まずこのurlを見て勉強した方がよろしいかと。 http://www.asahi-net.or.jp/~zn3y-ngi/ これが理解できないようなら 別手段を模索した上で、 簡略化したい部分を質問するような 方向に持っていく方がいいと思いますが。
補足
>CSVファイルを指定してやる記述が必要ですが、その辺りは理解できますか? CSVファイルでVBAが保存できないのが分かりましたので、拡張子を.xlsに変更しました。 今、変数の定義と変数に値を格納するところまで勉強しました。 格納した値をテキストファイル内の任意文字と置換して吐き出すというのは簡単かなと思ったんですが、難しいです。
- 33web
- ベストアンサー率50% (3/6)
よくわからないので、確認いたしますと、 まずCSVファイルがあります。 そこには A B C 1 アーティスト名 artistname 曲名 2 安室奈美恵 amuronamie 愛してマスカット 3 小室哲哉 komurotetsuya get wild のようにデータが書かれています。 このデータを読み込み、 「AのCは良い曲ですね」という文章を作る。 作った文章はBフォルダにテキストファイルとして保存する。 ということでしょうか? VBは良く知りませんが、 私ならAutoHotKeyというマイナーな無料プログラミングソフトで 作ることができます。 AutoHotKeyで検索するとわかると思います。
補足
>ということでしょうか? そういうことです。 AutoHotKeyですか。検索してみます。 ありがとうございます。
お礼
時間を割いて頂き有り難うございました。 ソースが理解できるよう勉強して行きたいと思います。