【連載】#23 バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する

【連載】#23 バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する

 

【連載】#22 Accessの選択クエリでテーブルの フィールド間計算をしよう

本記事では バッチファイル を使ってインターネットから CSV ファイルをダウンロードし、ダウンロードした CSV ファイルを Access でデータ整形して Excel ブックを作成し、最終的にこのExcel で2軸グラフの描画するまでを一気に実行する方法を紹介します。 

【連載】#23 バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する
しらかば堂

いつも記事を読んで頂きありがとうございます~
今日の調子はいかがですか?

 

バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する

【連載】#23 バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する

 

本記事では  東京都_新型コロナウイルス陽性患者発表詳細 に掲載された
URL: https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv

を用いて Excel による「 東京都コロナ 入院数と退院数比率推移」という2軸グラフを自動描画するための以下のような機能を持ったバッチファイルを紹介します。

 

  1. ダウンロード フォルダ配下に移動し、以前ダウンロードした 130001_tokyo_covid19_patients.csv の有無をチェックし、もし残っていたらそれを削除する

  2. Edge ブラウザ を起動し、東京都_新型コロナウイルス陽性患者発表詳細 のサイトから 130001_tokyo_covid19_patients.csv をユーザーの ダウンロード フォルダ配下ダウンロードし、ダウンロードが終わったらユーザーにキーの入力を促す

  3. デスクトップ配下に移動し、以下の Access ファイル、Excel ファイルを順番に起動する
    1. 16_01.accdb
    2. 18_02.accdb
    3. 23_01.accdb
    4. T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx

この 23_01.accdb は VBAコードを含む新しいファイルです。
このファイルの作り方は 次の #24の記事で紹介します。

これらの Access ファイル、Excel ファイルはここまでの記事で作成したもので以下のような機能を持ったものです。

ファイルの紹介記事 ファイル名 機能

【連載】#16 Accessのマクロを細かく調整し、おしゃれに自動化する方法を説明します
16_01.accdb ダウンロードフォルダ配下に保存された 130001_tokyo_covid19_patients.csv
をもとに 16_01.accdb 内に T0000_東京都コロナ発症状況_マスタ テーブルを作成します

【連載】#22 Accessの選択クエリでテーブルの フィールド間計算をしよう

18_02.accdb

16_01.accdb 内の T0000_東京都コロナ発症状況_マスタ テーブルを参照し
デスクトップ上に T1040_日付_退院者数_入院者数_退院率.xlsx を作成します

T1040_日付_退院者数_入院者数_退院率.xlsx

18_02.accdb によって作成されたグラフ描画用元データです。

T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx

T1040_日付_退院者数_入院者数_退院率 シートのデータをもとに
グラフ シートに
東京都コロナ 入院数と退院数比率推移 を再描画します

【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう
23_01.accdb

デスクトップ上にある
T1040_日付_退院者数_入院者数_退院率.xlsx ブック
T1040_日付_退院者数_入院者数_退院率 シートレンジ $A$1:$D$401  セル範囲を

T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx ブックの 
T1040_日付_退院者数_入院者数_退院率 シート の レンジ $A$1:$D$401  セル範囲へ
そのままコピーします

バッチファイルの概要

バッチファイル を使ってインターネットから CSV ファイルをダウンロードし、ダウンロードした CSV ファイルを Access でデータ整形して Excel ブックを作成し、最終的にこのExcel で2軸グラフの描画するまでを一気に実行するバッチファイル 23_01.bat の概要は以下のようになっています。


@echo off

setlocal

rem スリープタイマ値を設定する
set wait_time=1

echo 01.ダウンロードフォルダに移動
timeout /t %wait_time% > nul
cd %HOMEPATH%\Downloads

if exist 130001_tokyo_covid19_patients.csv (
  echo 02.旧CSVファイルを削除
  timeout /t %wait_time% > nul
  del 130001_tokyo_covid19_patients*.*
)

echo 03.新CSVファイルをダウンロード
timeout /t %wait_time% > nul
"C:Program Files (x86)MicrosoftEdgeApplicationmsedge.exe" https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv

set /P a="04.新CSVファイルのダウンロードが終わったら何かキーを押してください . . ."

echo 05.デスクトップに移動
timeout /t %wait_time% > nul
cd %HOMEPATH%\Documents\Desktop

echo 06.130001_tokyo_covid19_patients.csv から T0000_東京都コロナ発症状況_マスタ を作成
timeout /t %wait_time% > nul
16_01.accdb

echo 07.T0000_東京都コロナ発症状況_マスタ から T1040_日付_退院者数_入院者数_退院率.xlsx を作成
timeout /t %wait_time% > nul
18_02.accdb

echo 08.T1040_日付_退院者数_入院者数_退院率.xlsx を T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx ヘコピー
timeout /t %wait_time% > nul
23_01.accdb

echo 09.ExcelT1040_日付_退院者数_入院者数_退院率_グラフ.xlsxを起動
timeout /t %wait_time% > nul
T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx

endlocal
pause
【連載】#23 バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する
みなみ

え~ほとんど呪文なんですけどぉ~

このバッチファイル 23_01.bat は以下のようにデスクトップ上に保存されています。

【連載】#23 バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する

このバッチファイルは

【Windows業務効率化】バッチファイルを使って業務を効率化する方法

で紹介したエディタ Terapad を使って作成し、デスクトップ上に保存したものです。

バッチファイルの実行

さて、この 23_01.bat バッチファイルをダブルクリックするとどうなるかは動画を見たほうが早いので、次の動画を何回かご覧くださいね。

画面をフルスクリーンにしたり、再生スピードを変更して何回か見て頂くことをお勧めします。

【連載】#23 バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する
しらかば堂

いかがですか?
それではここまでを詳しく説明しますね。

バッチファイルの詳細

このバッチファイルの中には

  • バッチファイルとして共通的に使用される基本テクニック部分
  • この処理のために個別に定義されている部分

がありますが、この基本テクニック部分については

【Windows業務効率化】バッチファイルの基本テクニックを知ろう

で詳しく紹介してますので、こちらをまず参照してくださいね。

この記事ではこの基本テクニック部分を必要に応じて参照頂いているという前提で、このバッチファイルの目的にそった個別部分について紹介します。

 

タイマー付メッセージを出力する

このバッチファイルには

6行目で変数 %wait_time%1 に設定(=待ち時間を1秒に設定)したうえで



echo 01.ダウンロードフォルダに移動
timeout /t %wait_time% > nul

 

といった記述が多数出てきていますが、これは何のためだと思われますか?

実は、これらの echo コマンド、timeout コマンドはこのバッチファイル 23_01.bat のそもそもの目的上は不要なものですが

  • 動画で処理がどこまで実行されたかを確認しやすくする
  • バッチファイルの実行を適度に遅くして動画で確認しやすくする

という目的で意識的に入れています。

【連載】#23 バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する
しらかば堂

実はこれらの記述がないと、動画があっという間に終わってしまい、何が何だか全くわからないので、あとから付け足しました。

興味のある方はこれらのコマンドを全て削除し、このバッチファイルを実行してみてくださいね。

ダウンロードフォルダ配下を初期化する

このバッチファイルの以下の部分


cd %HOMEPATH%\Downloads
if exist 130001_tokyo_covid19_patients.csv (
  del 130001_tokyo_covid19_patients*.*
)

はこのバッチファイルの実行フォルダをダウンロード フォルダ配下に変更し、以前ダウンロードした 130001_tokyo_covid19_patients.csv の有無をチェックし、もし残っていたらそれを削除するためのものです。

何故このようなことをしていると思われますか?

実際に 東京都_新型コロナウイルス陽性患者発表詳細 にのURL: https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv

から何度か連続してこの csv のダウンロードを実行したときのダウンロードフォルダ配下の状況をみてみると

【連載】#23 バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する
ダウンロードフォルダ配下

のようになっていますね。

つまり一度
130001_tokyo_covid19_patients.csv

がダウンロードされた後に連続して同じファイルをダウンロードすると、ファイル名が

130001_tokyo_covid19_patients(1).csv
130001_tokyo_covid19_patients(2).csv  
        :

というようにファイル名の後ろに (1),(2),… というようなおまけがついてしまうんですね。

しかも都合の悪いことに Access ツール 16_01.accdb はダウンロードフォルダ配下の
130001_tokyo_covid19_patients.csv

をインポート対象としているにも関わらず、連続してダウンロードした場合に最新の csv ファイルは
130001_tokyo_covid19_patients(2).csv

なので、このままだと最新の csv ファイルが取り込めないという事態となってしまいます。

従ってこのような事態を回避するためにバッチファイルの実行フォルダをダウンロード フォルダ配下に変更し、以前ダウンロードした 130001_tokyo_covid19_patients.csv の有無をチェックし、もし残っていたらそれを削除するという処理をしているわけです。

ちなみに


del 130001_tokyo_covid19_patients*.*

というファイルを削除するコマンド del コマンドのパラメータ
130001_tokyo_covid19_patients*.*

の * は0文字以上の文字列にマッチするワイルドカードなので

130001_tokyo_covid19_patients.csv
130001_tokyo_covid19_patients(1).csv
130001_tokyo_covid19_patients(2).csv  

の全てにマッチするので関連する全てのファイルが削除できるというわけです。

ブラウザを使って CSV ファイルをダウンロードする

このバッチファイルの最初の行


"C:Program Files (x86)MicrosoftEdgeApplicationmsedge.exe" https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv
set /P a="04.新CSVファイルのダウンロードが終わったら何かキーを押してください . . ."

Edge ブラウザ を起動し、東京都_新型コロナウイルス陽性患者発表詳細 のサイトから 130001_tokyo_covid19_patients.csv を直接ユーザーの ダウンロード フォルダ配下ダウンロードし、ダウンロードが終わったら2番目の行でユーザーにキーの入力を促しています

この1行目のコマンドの最初の部分
“C:Program Files (x86)MicrosoftEdgeApplicationmsedge.exe”
は Microsoft Edge の実行絶対パス(=PC内でコマンドの実体がある場所)です。

そして、そのパラメータ
https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv
は言うまでもなくダウンロード対象となっているcsv ファイルのURL です。

つまり、Edge の絶対パスと対象 csv のURL をバッチファイルの中に直接記載するだけで、世の中的に Python を使わないとできないと喧伝されているインターネットからの csv ファイルのダウンロードがいとも簡単にできてしまうんです。

ところでここで疑問がわいてきたと思います。

  • Microsoft Edgeでできるなら、Google Crome でもいけるのでは?
  • Microsoft Edge の実行パスはどうやって調べるの?

ブラウザの同期処理 / 非同期処理 を確認する

確認のためこのバッチファイルの Edge の実行パスを以下のように Crome の実行パスにして同様の操作しましたが期待どうりの動きとはなりませんでした。


"C:\Program Files\Google\Chrome\Application\chrome.exe" https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv

以下に両者の結果の比較をします。

利用ブラウザ 結果 理由
Google Crome 失敗 バッチから、起動するとCromeが非同期処理として実行され、バッチからの制御が効かなくなる
Microsoft Edge 成功 バッチからの起動するとEdgeは同期処理として実行されるため、Edgeの処理が終了するまで、バッチ処理が停止し、Edgeが終了したら制御がバッチファイルに戻ってくる

同期処理…複数の処理を実行する際に一つずつ順番に処理が実行される方式です。同期処理では、必ず処理に記載した順番で処理が処理されます。

非同期処理…ある処理を実行中に、その処理を止めることなく別の処理を実行です。非同期処理では、呼び出し側の処理は呼び出された側の処理の終了を待たないため、同時並行的に処理を実行することができます。しかしその反面呼び出し側が呼び出された側の処理終了後に処理を再開するといったことはできません。特にJavaScriptのAjax(Asynchronous JavaScript and XML)という非同期処理が有名です。

【連載】#23 バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する
しらかば堂

誤解の無いように言っておきますが
自分 Python も大好きですよ。

アプリケーションの実行パスを確認する

Microsoft Edge 、Google Crome に限りませんが、バッチファイルに組み込みたいけど、その実行パスがわからないってことありますよね。

この調べ方については

【Windows業務効率化】バッチファイルを使って業務を効率化する方法

を参考にしてくださいね。

Access / Excel ツールを順次実行する 

このバッチファイルの次の部分


cd %HOMEPATH%\Documents\Desktop
16_01.accdb
18_02.accdb
23_01.accdb
T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx

はバッジファイルの実行フォルダをデスクトップに移動し、以下の Access ファイル、Excel ファイルを順番に起動します。

    1. 16_01.accdb
    2. 18_02.accdb
    3. 23_01.accdb
    4. T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx

ここはこの記事全体としては主要な部分なのですが、バッチファイルの実装という観点では実に単純な記述となっています。

先ほどの Microsoft Edge や Googe Crome についてはバッチ中で実行にするためにはコマンドの実行パスをまず書く必要がありましたが、Microsoft Office のアプリケ―ション ‘

office365lineup

のようにファイルの拡張子に実行アプリケーションが紐づいているアプリケーションについてはバッチファイルの中に対象となるファイル名を記述するだけでそのアプリケーションを実行することができます。

この連載記事

【特集】Accessのマクロや各種クエリを使いビッグデータをクレンジング、可視化しよう【東京都_新型コロナウイルス陽性患者発表詳細の CSV ビッグデータをAccessでクレンジング、可視化する】

全体としては成果物として出来上がった全てのファイルはデスクトップ上においているので最初に


cd %HOMEPATH%\Documents\Desktop

でデスクトップ上に移動し、続いて


16_01.accdb
18_02.accdb
23_01.accdb
T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx

で順番にそれぞれのツールを起動しているわけです。

ここに Access ツール 16_01.accdb, 18_02.accdb, 23_01.accdb はそれぞれ autoexec マクロにより処理を自動起動し、最終的にそのツールを終了しますので、結果として一連の処理が統合されて実行されるというわけです。

また Excel ファイル  T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx は内部で「 東京都コロナ 入院数と退院数比率推移」という2軸グラフを描く普通のファイルですが、その直前の Access ツール 23_01.accdb でグラフ描画の為のデータが差し替えられるので、以下のように起動の都度新しいデータによるグラフが再描画されます。

【連載】#23 バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する

まとめ

いかがでしたか?

本記事では バッチファイル を使ってインターネットから CSV ファイルをダウンロードし、ダウンロードした CSV ファイルを Access でデータ整形して Excel ブックを作成し、最終的にこのExcel で2軸グラフの描画するまでを一気に実行する方法を紹介しました。

具体的には

  • タイマー付きメッセージを出力する
  • ダウンロードフォルダ配下を初期化する
  • ブラウザを使ってCSVファイルをダウンロードする
  • ブラウザの同期処理/非同期処理を確認する
  • アプリケーションの実行パスを確認する
  • Access / Excel ツールを順次実行する 

について駆け足で紹介しました。

    さてこの記事全体の目標は

    •  今の状況から抜け出してもっと前向きな仕事に取り組みたい
    • さっさと仕事を切り上げて充実したアフターファイブを過ごしたい

    でしたよね。

    あなたの解決したい問題は何ですか?
    次回はまた

    【連載】#24 Access VBA の関数ライブラリを使いExcel のブック間で 指定セル領域をコピーしよう

    で Access VBA の新しい窓を開きましょう。


    Microsoft Access 関連教材は次のリンクからどうぞ。

    Access VBA 関連教材の紹介


    (有償)本記事中で参照している 16_01.accdb から個人のPC環境に依存する部分を削除した 16_02.zip のダウンロードは次のリンクからどうぞ。

    (有償) 16_02.zip をダウンロードする


    (有償)本記事中で参照している 18_02.accdb から個人のPC環境に依存する部分を削除した 18_03.zip のダウンロードは次のリンクからどうぞ。

    (有償) 18_03.zip をダウンロードする