Excel 関連情報

サンプルコード

ADO を使ってシートを連結する方法

  • 複数シート/複数ファイルをマージするサンプル(merge_sheet.vbs)
    Option Explicit
    Dim g_strDIR
    Dim g_strMergeData  ' マージ対象のデータフォルダ
    Dim g_strNewFile    ' マージ先のファイル名
    Dim g_strNewSheet   ' マージ先のシート名
    
    Main
    
    ' メイン プロシージャ
    Sub Main()
        g_strDIR = "D:\home\edu\hatena\merge_sheet\"      ' このマクロがある場所
        g_strMergeData = g_strDIR & ".\data"              ' マージ対象のデータフォルダ
        g_strNewFile = g_strDIR & ".\merge.xls"           ' マージ先のファイル名
        g_strNewSheet = "[Sheet1$]"                       ' マージ先のシート名
        ' 各シートをマージする
        MergeSheets
    End Sub
    
    ' 各シートをマージする
    Sub MergeSheets()
        Dim cn
        Dim rs
        Set cn = CreateObject("ADODB.Connection")
        cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & g_strNewFile & ";Extended Properties=Excel 8.0"
        Dim fs
        Set fs = CreateObject("Scripting.FileSystemObject")
        Dim folder
        Set folder = fs.GetFolder(g_strMergeData)
        Dim file
        Dim sheet
        Dim sheets()
        ' ファイルの数だけ処理を行う
        For Each file In folder.Files
            GetSheetNames file, sheets
            ' ファイル内の各シートを新しいシートに挿入する
            For Each sheet In sheets
                Dim strSQL
                strSQL = "INSERT INTO " & g_strNewSheet & " SELECT * FROM " & sheet
                ' INSERT 文を実行
                cn.Execute strSQL
            Next
        Next
    End Sub
    
    ' 指定したファイルのシート名(複数シート名)を取得する
    Function GetSheetNames(ByVal file, ByRef sheets())
        Dim app
        Set app = CreateObject("Excel.Application")
        app.Workbooks.Open file
        Dim i
        Dim nSheets
        nSheets = app.Worksheets.Count
        ReDim sheets(nSheets - 1)
        For i = 0 To nSheets - 1
            ' "シート名"+"$" を配列に格納
            sheets(i) = "[Excel 8.0;database=" & file & "].[" & app.Worksheets(i + 1).Name & "$]"
        Next
        app.Workbooks.Close
        Set app = Nothing
    End Function
  • ダウンロード
    ■ フォルダ構成
    
    D:\HOME\EDU\HATENA\MERGE_SHEET
    │  macro.vbs  … XLSマージスクリプト(VBScriptバージョン)
    │  macro.xls  … XLSマージスクリプト(Excel/VBAバージョン)
    │  merge.xls  … マージ先のファイル
    │  readme.txt … このファイル
    │  
    └─data       … マージ対象ファイル
            aaa.xls
            bbb.xls
            ccc.xls
  • 制限事項
    • マージ対象の Excel ファイルは、すべてのシートにデータが入っている必要があります。
    • 空のシートがあるとエラーになります。ご注意下さい。

添付ファイル: filemerge_sheet.zip 906件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-02-27 (土) 14:19:02 (5170d)