ACCESS TransferSpreadsheetの使い方

TransferSpreadsheetの使い方

ACCESSとExcelの間でデータをやり取りする時に使用するのが、TransferSpreadsheetメソッドです。

インポート、エクスポートの両方で利用でき、非常に利便性の高いものになります。

今回はTransferSpreadsheetの使い方をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSをもっと使いこなしたい方向けにACCESSの関数をご紹介していきます。

構文

TransferSpreadsheetは以下の構文で使用します。

TransferSpreadsheet (変換型, Excelファイル形式, ACCESSのテーブルの名称, Excelのファイル名, 最初の行をフィールド名として扱うか否か, Excelのセルの範囲)

引数が多いですが、一つずつ説明します。

変換型

ACCESSに対してExcelファイルをインポートするのか、エクスポートするのかを選択します。

引数内容
acImport (既定値)インポート
acExportエクスポート
acLinkリンク

Excelファイル形式

Excelのファイル形式を選択します。基本は数値が一番大きいものを選んでおけば最新のファイル形式になります。

引数内容
acSpreadsheetTypeExcel12XmlMicrosoft Excel 2010/2013/2016 XML 形式 (.xlsx、.xlsm、.xlsb)
acSpreadsheetTypeExcel12Microsoft Excel 2010 形式
acSpreadsheetTypeExcel9Microsoft Excel 2000 形式

ACCESSのテーブルの名称

ExcelからACCESSへのインポート先、もしくはACCESSからExcelへのエクスポート元のテーブル名を指定します。

Excelのファイル名

ACCESSへインポートするExcelのファイル名、もしくはACCESSからエクスポートするExcelのファイル名を指定します。

最初の行をフィールド名として扱うか否か

ExcelファイルをACCESSのテーブルにインポートする際、Excelファイルの最初の行をACCESSのフィールド名として扱うか否かを設定します。

引数内容
TrueExcelファイルの最初の行をフィールド名として扱う
FalseExcelファイルの最初の行を通常のデータとして扱う

Excelのセルの範囲

インポート時のみ利用します。Excelシートのセルの範囲または範囲の名前を文字列式で指定します。指定しないと、ワークシート全体がインポートされます。

TransferSpreadsheetの使用例

では、TransferSpreadsheetの使用例をいくつか示します。
TransferSpreadsheetはVBAで使用しますので、最も多いのはフォームに入力、出力のボタンを作成し、そのボタンのクリック時イベントに設定する場合でしょう。

ここではエクスポートの事例をご紹介します。例えば以下のようなフォームでボタンにイベントを設定します。

デザインビューで見るとこちらになります。

出力ボタンのクリック時イベントにイベントプロシージャを設定してあります。

ここで設定されているプロシージャは下記の通りです。


Dim FileName As String

Private Sub 売上明細出力ボタン_Click()

If vbOK = MsgBox("ACCESSファイルと同じ場所にEXCELデータで出力します。" & vbCrLf & "同名のファイルは上書きされますのでご注意ください。", vbExclamation + vbOKCancel, "売上明細出力") Then

    FileName = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\")) & "売上明細.xlsx"
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "EXP_売上明細", FileName, True

End If

End Sub

まず、TransferSpreadsheetだけを実行すると、ユーザーがファイル出力されたことに気づきにくいので、メッセージを出すことをお勧めします。

最初の


 vbOK = MsgBox("ACCESSファイルと同じ場所にEXCELデータで出力します。" & vbCrLf & "同名のファイルは上書きされますのでご注意ください。", vbExclamation + vbOKCancel, "売上明細出力")

の部分でメッセージを表示して、ファイル出力することをユーザーに理解させます。

そのうえで、


    FileName = Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\")) & "売上明細.xlsx"
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "EXP_売上明細", FileName, True

でTransferSpreadsheetを使ってファイルを出力します。

先に、FileName変数にファイル名を格納しています。
この場合は、ACCESSファイルが置いてあるディレクトリと同じ場所にファイルを出力するように、FileNameにディレクトリパスとファイル名を格納しています。

あとはDoCmd.TransferSpreadsheetで出力するだけです。

以上、TransferSpreadsheetの使い方をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。