メディア掲載: レバテックフリーランス様のサイトで当ブログが紹介されました

Accessのデータをスプレッドシートに自動連係する簡単な方法

AccessのデータをGoogleスプレッドシートに自動で連携するには様々な方法が考えられます。
その中で、私が実務で採用した、私的に最も単純で理解しやすい方法を紹介します。

(ちなみに、私はこの方法を活用して、毎日深夜に 1.基幹システムからデータを抽出し2.スプレッドシートに連携し3.Googleグループのメンバー登録・削除を行う という作業を自動化しました。)

なお、この記事で紹介する方法を使うには、AccessおよびGoogleドライブアプリがインストールされたWindows PCが必要です。

Accessクエリでデータ抽出

まず、目的のデータを抽出するためのAccessのクエリを作成してください。
(テーブルのデータを全く加工せずそのまま使いたい場合は、この工程は飛ばしてOKです)

Accessで作成したクエリ「Q_社員抽出」の実行結果。社員の情報が表として表示されている。
こんな感じのデータが抽出される、ごく普通の選択クエリを作成しました。

AccessマクロでCSV出力

次に、クエリの抽出結果をCSV出力するマクロを作成します。(ここでいう「マクロ」はVBAのことではありません。簡単なのでご心配なく)

以下を参考に、マクロを作成してください。

Accessのメニューにて、「作成」→「マクロ」を選択
Accessのメニューから「作成」→「マクロ」を選択
①「すべてのアクションを表示」を選択したうえで、②「テキストのインポート/エクスポート」をダブルクリック。③エクスポートの設定を行い、④最後にAccessが自動終了するよう設定する。
①「すべてのアクションを表示」を選択したうえで、②「テキストのインポート/エクスポート」をダブルクリック。③エクスポートの設定を行い、④最後にAccessが自動終了するよう設定する。

③テキストのインポート/エクスポートの設定は下記を参考にしてください。

変換の種類区切り記号付きエクスポート
テーブル名CSV出力するクエリ(またはテーブル)の名前
ファイル名CSVファイルの出力先。Googleドライブアプリで同期しているフォルダを選ぶ。
出力先フォルダパス\出力ファイル名 とする
フィールド名の設定CSVファイルの1行目を項目名にしたい場合は「はい」
コードページ65001: Unicode (UTF-8)
* SJISも可です。その場合、Google Apps ScriptのコードでSJISを指定する必要があります。(後述します)
Accessの左側ペインの中に作成したマクロ(M_社員情報CSVエクスポート)が表示されている
「M_社員情報CSVエクスポート」という名前を付けて保存した。

保存したマクロ(この例では、M_社員情報CSVエクスポート)をダブルクリックして実行してみると、CSVファイルが出力され、Accessは自動的に終了します。

WindowsのエクスプローラーでG:¥マイドライブ¥Accessから取り込み フォルダを確認すると、CSVファイルが作成されていた
指定したフォルダ内にCSVファイルが出力された
ブラウザでGoogleドライブのマイドライブ > Accessから取り込み フォルダを確認すると、CSVファイルが作成されていた
Googleドライブ側でもCSVファイルを確認できた。

取り込み先スプレッドシートにスクリプトを追加

続いて、データ取り込み先のスプレッドシートに、スクリプトを追加します。
取り込み先のスプレッドシートを開き、スクリプトエディタを起動してください。

拡張機能メニューより、Apps Scriptを起動します。

[ 拡張機能 ] > [ Apps Script ] をクリック

あらかじめ入力されているコード(myFunction)を削除し、当記事のコードを貼り付けます。
貼り付け後、保存してください。

スクリプトを貼り付けて保存する
不要なコードを削除し、当記事のコードを貼り付けて保存ボタンを押す

貼り付けるコードは、下記の記事のものをそのまま利用できます。

実際に、CSVファイルがスプレッドシートに取り込まれるかテストしてみましょう。
一旦、スプレッドシートを白紙にしたうえで、スクリプトエディタの▷実行ボタンを押してみてください。

「承認が必要です」というダイアログが表示されますので、権限を確認 をクリックします。
* この部分の解説画像は、他の記事から流用しているため、実際のものと若干異なる場合があります。

このスクリプトを使うGoogleアカウントを選択します。

(この画面が表示された場合のみ)左下の 詳細 をクリックします。

(この画面が表示された場合のみ)左下の プロジェクト名(安全ではないページ)に移動 をクリックします。

右下の 許可 をクリックします。

スプレッドシートを見ると、ちゃんとCSVからデータが取り込まれていることが確認できると思います。

AccessのCSV出力を自動化する

ここまでの作業で、AccessのデータをCSV出力し、スプレッドシートに取り込む処理を手動で実施できるようになりました。

続いて、これが毎日夜間に行われるように自動化していきます。
まずは、Accessからのデータ出力を、Windowsのタスクスケジューラを使って自動化します。

Windowsの検索バーに「たすく」と入力されている。検索結果として「タスクスケジューラ(アプリ)」が表示されている
タスクスケジューラを起動します。見つけられない場合は、検索ボタンから「たすく」と検索。
タスクスケジューラのメニューの操作 > タスクの作成 が選択されている
「操作」→「タスクの作成」
「タスクの作成」画面の「全般」タブ。「名前」と「セキュリティオプション」に設定をしている。
[全般]タブでは、任意の名前を付けて、「ユーザーがログオンしているかどうかにかかわらず実行する」を選択した。
「タスクの作成」画面の「トリガー」タブ。「新規」クリック後の「新しいトリガー」画面で「毎日」が選択され、「開始」に2023/05/23 1:00:00」が設定されている。
[トリガー]タブで、毎日1:00に処理が行われるよう設定した。
「タスクの作成」画面の「トリガー」タブ。作成したトリガーが表示されている。
トリガーが追加されたことを確認。
「タスクの作成」画面の「操作」タブ。「新規」クリック後の「新しい操作」画面で、「プログラム/スクリプト」および「引数の追加」に設定がなされている。
[操作]タブでは、Accessを起動しマクロを実行するように設定する。

操作タブの設定内容は下表を参考にしてください。

プログラム/スクリプト"MSACCESS.EXEのパス(後述)"
例: "C:\Program Files\Microsoft Office\root\Office16\MSACCESS.EXE"
引数の追加"アクセスファイルのパス" /x "マクロの名前"
例: "C:\Users\taro\Documents\社員データ.accdb" /x "M_社員情報CSVエクスポート"

Accessの実行ファイルの場所がわからない場合、以下のように調べることができます。

まず、Accessを起動している状態で、タスクマネージャーを起動します。(キーボードのctrlshiftescを同時に押す)

タスクマネージャー内でMicrosoft Accessを探し、右クリックプロパティ

「タスクマネージャー」内の「Microsoft Access」を右クリックして表示されるメニューから「プロパティ」を選択している
筆者のPCには32ビット版のAccessが入っていたため、(32ビット)が付記されている。
MSACCESS.EXEのプロパティ画面。場所: 欄に、実行ファイルのフルパスが記載されている。
場所: の欄で実行ファイルのフルパスを確認できる
「タスクの作成」画面の「操作」タブ。設定した操作が表示されている。
「操作」が追加されたことを確認できた。

以上で、AccessでのCSVファイル出力を自動化することができました。

なお、タスクの作成画面では、全般トリガー操作の3つのタブの設定を行いましたが、条件設定タブでも詳細な設定を行うことができますので、必要に応じて確認・設定してみてください。

スプレッドシートのCSV取り込みを自動化する

スプレッドシートにCSVを取り込むスクリプトも、トリガー機能を使うことで、時間を指定して自動実行させることが可能です。

スクリプトエディタ左側の「トリガー」を選択し、「トリガーを追加」ボタンを押下している。
スクリプトエディタ左側の「トリガー」を選択し、[+トリガーを追加]を押す
トリガーの設定画面。「実行する関数を選択」に「importCsv」、「イベントのソースを選択」に「時間主導型」、「時間ベースのトリガーのタイプを選択」に「日付ベースのタイマー」、「時刻を選択」に、「午前2時〜3時」を設定している。
この画像を参考にトリガーを設定してください。

Google Apps Scriptの日付ベースのタイマーによる時間起動は、細かい時間を指定することができませんので、多少ズレても問題ない時刻を選択してください。

スクリプトエディタの「トリガー」画面。設定したトリガーが表示されている。
トリガーが追加された

これで、スプレッドシートへの取り込みも自動化することができました。

以上で、1.AccessからのCSV出力2.Googleドライブへのアップロード3.スプレッドシートへの取り込みが自動化できました。

コメント

タイトルとURLをコピーしました