添付の図のようにExcleにて
A列にNo
B列に名前
C列に地域
D列に連絡
の情報が入っている場合で、5行のデータがあるとします。
1行づつをCSVファイルにするマクロを作りたいのですが、苦戦しています。
詳しい方にご指南いただきたく質問させていただきます。
CSVファイル 1.csv、2.CSV、3.CSV、4.CSV、5.CSV
のように1行1ファイルで
1.CSVであれば、1の行に記載されている 名前、地域、連絡がデータとして保存される。
です。
よろしくお願いいたします。
以下は、Excel VBA ではなく、VBScript での例ですがよろしいでしょうか?
表形式のデータを扱う場合、ADO というライブラリを使用すると、
Excel データを SQL のようにアクセスでき、便利です。
' File : ExcelToCsv.vbs ' Usage : CScript //Nologo ExcelToCsv.vbs Option Explicit ' Excelファイルを指定します Const g_strExcelFile = "C:\home\edu\hatena\kumakumakumakuma\1320812779\book1.xls" ' 出力先のフォルダを指定します Const g_strOutputPath = "C:\home\edu\hatena\kumakumakumakuma\1320812779\output" Call Main() Sub Main() ' Excel ファイルの内容を指定したフォルダに CSV 出力する Call ConvertExcelToCsvFile( g_strExcelFile, g_strOutputPath ) End Sub ' Excel ファイルの内容を指定したフォルダに CSV 出力する Sub ConvertExcelToCsvFile( strFileName, strOutputPath ) 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 = "," ' 出力ファイルの区切り文字として「,」を使用します。 ' レコード件数分、順次取得します While Not rs.BOF And Not rs.EOF ' 「NO」列をファイル名として取得 strBaseName = rs("NO") ' レコードセットにある 名前、地域、連絡を CSV データとして取得 strLine = GetLineFromRecordset( rs, strDelimiter ) ' CSV データをファイル出力 Call WriteLineToFile( strBaseName, strLine, strOutputPath ) ' 次のレコードに移動 rs.MoveNext Wend End Sub ' レコードセットの内容をデリミタ区切りの文字列として取得する Function GetLineFromRecordset( rs, strDelimiter ) Dim strResult Dim str Dim strValue Dim nFirst nFirst = 1 ' 2列目を取得開始位置とする Dim i For i = nFirst To rs.Fields.Count - 1 strValue = rs(i) If i = nFirst Then strResult = Chr(34) & strValue & Chr(34) Else strResult = strResult & strDelimiter & Chr(34) & strValue & Chr(34) End If Next GetLineFromRecordset = strResult End Function ' データをファイル出力する Function WriteLineToFile( strBaseName, strLine, strOutputPath ) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") Dim strFileName strFileName = strOutputPath & "\" & strBaseName & ".csv" Dim file Set file = fso.OpenTextFile(strFileName, 8, True) ' 追加書き込みモード ' デバッグ用 WScript.Echo "[" & strFileName & "]" WScript.Echo strLine WScript.Echo "" file.WriteLine strLine file.Close End Function
C:\home\edu\hatena\kumakumakumakuma\1320812779>cscript ExcelToCsv.vbs Microsoft (R) Windows Script Host Version 5.8 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. [C:\home\edu\hatena\kumakumakumakuma\1320812779\output\1.csv] "田中","千代田区","ああああああ" [C:\home\edu\hatena\kumakumakumakuma\1320812779\output\2.csv] "佐藤","港区","いいいいい" [C:\home\edu\hatena\kumakumakumakuma\1320812779\output\3.csv] "鈴木","港区","ううううう" [C:\home\edu\hatena\kumakumakumakuma\1320812779\output\4.csv] "吉田","品川区","えええええ" [C:\home\edu\hatena\kumakumakumakuma\1320812779\output\5.csv] "高橋","足立区","おおおおお"
■ ADO を使用して Excel ブックのデータの読み取りおよび書き込みを行う方法 (ExcelADO)
ありがとうございました。
問題なく実行できそうです。
助かりました。
2011/11/10 09:33:42