人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルで入力したデータを指定の形でcsvファイルとして吐き出したい。

添付画像?のように
列Cは「サイズ」列Dは「状態」
などの項目を作りそれぞれの行にデータを入力します。

そして画像?のようなテンプレ.txtを作ります。

そして何らかの方法で、多分エクセル、マクロ?で何とかすれば
?のようなCSVファイルを吐き出せるのでは無いかと思っています。
可能でしょうか?
もしエクセルで、できるのであればどうやればよいでしょうか。

また
?で入力した列Eの「販売価格」は?のCSVでは列Cに何も加工を加えずに
吐き出すようにしたいです。

今回質問させていただくためにシンプルになデータを作りましたが
項目はもっとたくさんあります。


今使用しているエクセルのバージョンは2003です。
以上どうかよろしくお願いします。

1368499599
●拡大する

●質問者: orekojinn
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ラフティング
●10ポイント

■テキスト(タブ区切り)
http://webpersons.jp/tips/2008/05/excelxls.html

こういうことでしょうか?


orekojinnさんのコメント
ご回答ありがとうございます。 質問が分かりにくいようですね。。申し訳ありません。 添付の画像?で入力したエクセルのデータを 画像?で入力したテキストファイルの文字列の<>の中に埋め込み、 その結果?の形のCSVファイルを得る。 という事をしたいんですが、 この補足も分かりにくいですよね。。。すみません。 どうぞよろしくお願いします。

2 ● cx20
●200ポイント ベストアンサー

テンプレートファイルを使用して CSV データを作成するスクリプトを作成してみました。

事前に以下のパスを修正の上、実行願います。

' Excelデータファイルファイルを指定します
Const g_strExcelFile = "C:\home\edu\hatena\orekojinn\1368499599\book1.xls"
' テンプレートファイルを指定します
Const g_strTemplateFile = "C:\home\edu\hatena\orekojinn\1368499599\template.txt"
' 出力先のCSVファイル名を指定します
Const g_strCsvFile = "C:\home\edu\hatena\orekojinn\1368499599\out.csv"

なお、Excel VBA ではなく、VBScript でのサンプルとなっております。
(少し修正すれば、VBA で動作させることも可能です。必要であれば修正します。)

実行するには、エクスプローラより「ExcelToCsv.vbs」をダブルクリックするか、コマンドライン(cmd.exe)より、「CScript ExcelToCsv.vbs [Enter]」を行ってください。
実行すると出力先の CSV ファイルが作成されます。

' File : ExcelToCsv.vbs
' Usage : CScript //Nologo ExcelToCsv.vbs
Option Explicit

' Excelデータファイルファイルを指定します
Const g_strExcelFile = "C:\home\edu\hatena\orekojinn\1368499599\book1.xls"
' テンプレートファイルを指定します
Const g_strTemplateFile = "C:\home\edu\hatena\orekojinn\1368499599\template.txt"
' 出力先のCSVファイル名を指定します
Const g_strCsvFile = "C:\home\edu\hatena\orekojinn\1368499599\out.csv"

Call Main()

Sub Main()
 Dim strTemplate
  ' テンプレートファイルのテキストの内容を変数に読み込む
 strTemplate = GetTextFromFile( g_strTemplateFile )
 
  ' Excel ファイルの内容をテンプレートの内容に基づき CSV 出力する
 Call ConvertExcelToCsvFile( g_strExcelFile, strTemplate, g_strCsvFile )
End Sub

' Excel ファイルの内容をテンプレートの内容に基づき CSV 出力する
Sub ConvertExcelToCsvFile( strFileName, strTemplate, g_strCsvFile )
 Dim cn
 Set cn = CreateObject("ADODB.Connection")
 
  ' Excel 97-2003 であれば、以下を有効化します。
 cn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFileName & ";Extended Properties=""Excel 8.0;HDR=Yes;"""
  ' Excel 2007/2010 の場合は、以下を有効化します。
  'cn.Open "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFileName & ";Extended Properties=""Excel 12.0;HDR=Yes;"""
 
 Dim rs
  ' Excel のシート名が「Sheet1」でない場合、下記の名称を変更してください。
 Set rs = cn.Execute("SELECT * FROM [Sheet1$]")
 
 Dim strLine
 Dim strBaseName
 
 Dim strDelimiter
 strDelimiter = "," ' 出力ファイルの区切り文字として「,」を使用します。
 
 Dim strNo  ' 管理番号
 Dim strTitle ' タイトル
 Dim strSize  ' サイズ
 Dim strState ' 状態
 Dim nPrice  ' 販売金額
 
 Dim strItemInfo ' 商品説明
 strItemInfo = strTemplate

 strLine = Join( Array("管理番号","商品説明文","販売価格"), strDelimiter )
  ' 項目行をファイル出力
 Call WriteLineToFile( strLine, g_strCsvFile )
 
  ' レコード件数分、順次取得します
 While Not rs.BOF And Not rs.EOF
  ' 各項目の値を取得
 strNo = rs("管理番号")
 strTitle = rs("タイトル")
 strSize = rs("サイズ")
 strState = rs("状態")
 nPrice = rs("販売価格")
 
  ' テンプレートの内容に基づき置換
 strItemInfo = Replace( strItemInfo, "<タイトル>", strTitle ) ' <タイトル> を置換
 strItemInfo = Replace( strItemInfo, "<サイズ>", strSize ) ' <サイズ> を置換
 strItemInfo = Replace( strItemInfo, "<状態>", strState ) ' <状態> を置換
 
  ' 「管理番号,商品説明文,販売価格」の CSV データを作成する
 strLine = _
 Chr(34) & strNo & Chr(34) & strDelimiter & _
 Chr(34) & strItemInfo & Chr(34) & strDelimiter & _
 CStr( nPrice )
 
  ' CSV データをファイル出力
 Call WriteLineToFile( strLine, g_strCsvFile )
  ' 次のレコードに移動
 rs.MoveNext
 Wend

End Sub

' データをファイル出力する
Function WriteLineToFile( strLine, strFileName )
 Dim fso
 Set fso = CreateObject("Scripting.FileSystemObject")
 
 Dim file
 Set file = fso.OpenTextFile(strFileName, 8, True) ' 追加書き込みモード
 
 file.WriteLine strLine
 file.Close
End Function

' テキストファイルを読み込む
Function GetTextFromFile( strFileName )
 Dim strResult
 
 Dim fso
 Set fso = CreateObject("Scripting.FileSystemObject")

 Dim file
 Set file = fso.OpenTextFile(strFileName, 1) ' ForReading = 1
 
 strResult = file.ReadAll
 
 GetTextFromFile = strResult
End Function

orekojinnさんのコメント
ご回答ありがとうございます。 エクセルの機能でなんとかなるものだと勝手に思い込んでいました。 スクリプトでやるのですね。 早速、取り組みます。 またご報告させていただきます。 本当にありがとうございます。

orekojinnさんのコメント
cx20様 ご回答ありがとうございました。 今日一日初めてのVBScriptに取り組み少しだけ、VBScript、プログラミングというものが分かりました。 実際に作りたいものはこの質問のもの程シンプルではなく、ここ何日かで自分で作るのは難しいと判断しました。 ご回答いただけましたのに申し訳ありません。 そして数日中にこの仕組みができると今取り組もうとしている事がとても前進するので 詳しく、正確に希望の仕様を書きました。 このご返答のあとすぐに、改めてこちらで投稿をさせ直させていただきます。 もしよろしければご確認いただけると幸いです。 この度は誠にありがとうございました。感謝します。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ