1320812779 Excelの特定のセルにある内容をCSVファイルに書き出す方法。


添付の図のように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の行に記載されている 名前、地域、連絡がデータとして保存される。

です。
よろしくお願いいたします。
 

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/11/10 09:33:53

ベストアンサー

id:cx20 No.1

回答回数607ベストアンサー獲得回数108

以下は、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)

http://support.microsoft.com/kb/278973/ja

id:kumakumakumakuma

ありがとうございました。

問題なく実行できそうです。

助かりました。

2011/11/10 09:33:42

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません