Microsoft Access 掲示板

エクセルの複数シートのインポート

5 コメント
views
4 フォロー

access 2021 exsel 2021

エクセルファイル(book1.xlsm)の中に複数シート(例:data、aaa,bbbなど)があります。
各々のシートのフォーマットは同一となっています。
各シートの A7 から I 列 のデータを アクセスのテーブル T_2022 に取り込みたい。
一つのシート(data)から(A7:I)のデータを取り込む構文は下記の通りで取得できましたが
複数シートを取り込む場合に「変数」を使っての構文はどのように書けばよいか教授お願いいたします。

**** エクセルファイル(book1.xlsm)シート名dataのA7からI列 の取り込み *****

   Dim strac As String
    Dim varxls As Variant
    Dim Range As String
    Dim myDir As String, myPath As String
    Dim excelDir As String
    Dim temp As String
    Dim exclのパス As String

    temp = "Book1.xlsm"
    Range = "data!A7:I"

    myPath = CurrentDb.Name
    myDir = Left(myPath, Len(myPath) - Len(Dir(myPath)))
    excelDir = myDir
    exclのパス = excelDir & temp

    varxls = exclのパス                  'エクセルファイルを指定します。

        DoCmd.TransferSpreadsheet acImport, _
                    acSpreadsheetTypeExcel12Xml, "T_2022", varxls, , Range

初老の人
作成: 2023/05/05 (金) 08:45:42
通報 ...
1

シート名は固定ですか、それとも、その時々で変わりますか。変わる場合は全シートが対象ですか。

2

例えば、data、aaa、bbb の固定なら、

     DoCmd.TransferSpreadsheet acImport, _
                    acSpreadsheetTypeExcel12Xml, "T_2022", varxls, ,"data!A7:I"
     DoCmd.TransferSpreadsheet acImport, _
                    acSpreadsheetTypeExcel12Xml, "T_2022", varxls, ,"aaa!A7:I"
     DoCmd.TransferSpreadsheet acImport, _
                    acSpreadsheetTypeExcel12Xml, "T_2022", varxls, ,"bbb!A7:I"

とシート数分記述すればいいでしょう。

シート数が多い場合は、シート名を配列に格納して、Fprループで繰り返すようにすれば短くできます。

シート名か固定でなく、事前にシート名か分からないなら、TransferSpreadsheet では無理なので、VBAでExcelアプリケーションを開いて処理することになります。

AccessからExcelを操作する 《CreateObject》|Access|ヘルプの森

3
初老の人 2023/05/05 (金) 11:26:37 68b80@3d6cc

早速のご指導、ありがとうございます。
シート数分記述 はできたのですが、「シート名を配列に格納して、Fprループで繰り返す」方法ができません。
シート名は固定されています。上記の構文を教授お願いできませんか?
よろしくお願いいたします。

4

こんな感じでどうですか。

Public Sub test()
    
    Dim excelBookName As String
    Dim Sheets As String
    Dim strRange As String
    excelBookName = "Book1.xlsm"
    Sheets = "data,aaa,bbb,ccc" 'カンマ区切りで対象シート名を記述
    strRange = "!A7:I"

    Dim myDir As String, excelPath As String
    myDir = Application.CurrentProject.Path 'データベースファイルのパス
    excelPath = myDir & "\" & excelBookName

    Dim sheet
    For Each sheet In Split(Sheets, ",")
        DoCmd.TransferSpreadsheet acImport, _
                              acSpreadsheetTypeExcel12Xml, "T_2022", excelPath, , sheet & strRange
    Next

End Sub
5
初老の人 2023/05/06 (土) 08:00:35 96de1@3d6cc

早速のご指導ありがとうございます。小生、配列は全く理解(?)できていません。いろいろな達人からの助言・指導を受けて応用しながら使っています。助言いただいた構文、大切に使わせていただきます。改めておれいもうしあげます。