• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CSVファイルの情報をテキストファイルに吐き出したいのです。)

CSVファイルの情報をテキストファイルに吐き出す方法

このQ&Aのポイント
  • VBもしくはエクセル付随のVBを使用して、CSVファイルの情報をテキストファイルに吐き出す方法を紹介します。
  • 特定セルの文字列を雛形テキストファイルの内容で置換して吐き出すことができます。
  • また、任意の名前でディレクトリを作成し、指定したディレクトリ内にファイルを保存することも可能です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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

toshipoon
質問者

お礼

時間を割いて頂き有り難うございました。 ソースが理解できるよう勉強して行きたいと思います。

その他の回答 (3)

回答No.3

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 文字制限の関係から、プログラムコードからコメントを減らしました。 次の回答に実際のプログラミングコードを載せます。

回答No.2

VB、VBAの知識を持ち合わせていないのに、 なぜ、プログラミングなのでしょうか? そこからの説明は不可能だと思います。 VBだと、フォームのデザインやコンパイル方法まで説明を求めているのですか? VBAだと、CSVファイルにマクロは保存できないため、Excelブックに保存し、 CSVファイルを指定してやる記述が必要ですが、その辺りは理解できますか? VBAは、まずこのurlを見て勉強した方がよろしいかと。 http://www.asahi-net.or.jp/~zn3y-ngi/ これが理解できないようなら 別手段を模索した上で、 簡略化したい部分を質問するような 方向に持っていく方がいいと思いますが。

toshipoon
質問者

補足

>CSVファイルを指定してやる記述が必要ですが、その辺りは理解できますか? CSVファイルでVBAが保存できないのが分かりましたので、拡張子を.xlsに変更しました。 今、変数の定義と変数に値を格納するところまで勉強しました。 格納した値をテキストファイル内の任意文字と置換して吐き出すというのは簡単かなと思ったんですが、難しいです。

  • 33web
  • ベストアンサー率50% (3/6)
回答No.1

よくわからないので、確認いたしますと、 まずCSVファイルがあります。 そこには    A             B            C         1 アーティスト名   artistname        曲名      2 安室奈美恵    amuronamie    愛してマスカット 3 小室哲哉      komurotetsuya      get wild のようにデータが書かれています。 このデータを読み込み、 「AのCは良い曲ですね」という文章を作る。 作った文章はBフォルダにテキストファイルとして保存する。 ということでしょうか? VBは良く知りませんが、 私ならAutoHotKeyというマイナーな無料プログラミングソフトで 作ることができます。 AutoHotKeyで検索するとわかると思います。

toshipoon
質問者

補足

>ということでしょうか? そういうことです。 AutoHotKeyですか。検索してみます。 ありがとうございます。

関連するQ&A