本記事では バッチファイル を使ってインターネットから CSV ファイルをダウンロードし、ダウンロードした CSV ファイルを Access でデータ整形して Excel ブックを作成し、最終的にこのExcel で2軸グラフの描画するまでを一気に実行する方法を紹介します。
目次
バッチファイル で CSVダウンロード Access データ処理 Excel グラフ描画 を統合する
本記事では 東京都_新型コロナウイルス陽性患者発表詳細 に掲載された
URL: https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv
を用いて Excel による「 東京都コロナ 入院数と退院数比率推移」という2軸グラフを自動描画するための以下のような機能を持ったバッチファイルを紹介します。
- ダウンロード フォルダ配下に移動し、以前ダウンロードした 130001_tokyo_covid19_patients.csv の有無をチェックし、もし残っていたらそれを削除する
- Edge ブラウザ を起動し、東京都_新型コロナウイルス陽性患者発表詳細 のサイトから 130001_tokyo_covid19_patients.csv をユーザーの ダウンロード フォルダ配下ダウンロードし、ダウンロードが終わったらユーザーにキーの入力を促す
- デスクトップ配下に移動し、以下の Access ファイル、Excel ファイルを順番に起動する
- 16_01.accdb
- 18_02.accdb
- 23_01.accdb
- T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx
この 23_01.accdb は VBAコードを含む新しいファイルです。
このファイルの作り方は 次の #24の記事で紹介します。
これらの Access ファイル、Excel ファイルはここまでの記事で作成したもので以下のような機能を持ったものです。
ファイルの紹介記事 | ファイル名 | 機能 |
---|---|---|
16_01.accdb | ダウンロードフォルダ配下に保存された 130001_tokyo_covid19_patients.csv をもとに 16_01.accdb 内に T0000_東京都コロナ発症状況_マスタ テーブルを作成します |
|
18_02.accdb |
16_01.accdb 内の T0000_東京都コロナ発症状況_マスタ テーブルを参照し |
|
T1040_日付_退院者数_入院者数_退院率.xlsx |
18_02.accdb によって作成されたグラフ描画用元データです。 |
|
T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx |
T1040_日付_退院者数_入院者数_退院率 シートのデータをもとに |
|
23_01.accdb |
デスクトップ上にある |
バッチファイルの概要
バッチファイル を使ってインターネットから 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_01.bat は以下のようにデスクトップ上に保存されています。
このバッチファイルは
で紹介したエディタ Terapad を使って作成し、デスクトップ上に保存したものです。
バッチファイルの実行
さて、この 23_01.bat バッチファイルをダブルクリックするとどうなるかは動画を見たほうが早いので、次の動画を何回かご覧くださいね。
画面をフルスクリーンにしたり、再生スピードを変更して何回か見て頂くことをお勧めします。
|
いかがですか?
それではここまでを詳しく説明しますね。
バッチファイルの詳細
このバッチファイルの中には
- バッチファイルとして共通的に使用される基本テクニック部分
- この処理のために個別に定義されている部分
がありますが、この基本テクニック部分については
で詳しく紹介してますので、こちらをまず参照してくださいね。
この記事ではこの基本テクニック部分を必要に応じて参照頂いているという前提で、このバッチファイルの目的にそった個別部分について紹介します。
タイマー付メッセージを出力する
このバッチファイルには
6行目で変数 %wait_time% に 1 に設定(=待ち時間を1秒に設定)したうえで
echo 01.ダウンロードフォルダに移動
timeout /t %wait_time% > nul
といった記述が多数出てきていますが、これは何のためだと思われますか?
実は、これらの echo コマンド、timeout コマンドはこのバッチファイル 23_01.bat のそもそもの目的上は不要なものですが
- 動画で処理がどこまで実行されたかを確認しやすくする
- バッチファイルの実行を適度に遅くして動画で確認しやすくする
という目的で意識的に入れています。
実はこれらの記述がないと、動画があっという間に終わってしまい、何が何だか全くわからないので、あとから付け足しました。
興味のある方はこれらのコマンドを全て削除し、このバッチファイルを実行してみてくださいね。
ダウンロードフォルダ配下を初期化する
このバッチファイルの以下の部分
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 のダウンロードを実行したときのダウンロードフォルダ配下の状況をみてみると
のようになっていますね。
つまり一度
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)という非同期処理が有名です。
誤解の無いように言っておきますが
自分 Python も大好きですよ。
アプリケーションの実行パスを確認する
Microsoft Edge 、Google Crome に限りませんが、バッチファイルに組み込みたいけど、その実行パスがわからないってことありますよね。
この調べ方については
を参考にしてくださいね。
Access / Excel ツールを順次実行する
このバッチファイルの次の部分
cd %HOMEPATH%\Documents\Desktop
16_01.accdb
18_02.accdb
23_01.accdb
T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx
はバッジファイルの実行フォルダをデスクトップに移動し、以下の Access ファイル、Excel ファイルを順番に起動します。
-
- 16_01.accdb
- 18_02.accdb
- 23_01.accdb
- T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx
ここはこの記事全体としては主要な部分なのですが、バッチファイルの実装という観点では実に単純な記述となっています。
先ほどの Microsoft Edge や Googe Crome についてはバッチ中で実行にするためにはコマンドの実行パスをまず書く必要がありましたが、Microsoft Office のアプリケ―ション ‘
のようにファイルの拡張子に実行アプリケーションが紐づいているアプリケーションについてはバッチファイルの中に対象となるファイル名を記述するだけでそのアプリケーションを実行することができます。
この連載記事
全体としては成果物として出来上がった全てのファイルはデスクトップ上においているので最初に
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 でグラフ描画の為のデータが差し替えられるので、以下のように起動の都度新しいデータによるグラフが再描画されます。
まとめ
いかがでしたか?
本記事では バッチファイル を使ってインターネットから CSV ファイルをダウンロードし、ダウンロードした CSV ファイルを Access でデータ整形して Excel ブックを作成し、最終的にこのExcel で2軸グラフの描画するまでを一気に実行する方法を紹介しました。
具体的には
- タイマー付きメッセージを出力する
- ダウンロードフォルダ配下を初期化する
- ブラウザを使ってCSVファイルをダウンロードする
- ブラウザの同期処理/非同期処理を確認する
- アプリケーションの実行パスを確認する
- Access / Excel ツールを順次実行する
について駆け足で紹介しました。
さてこの記事全体の目標は
- 今の状況から抜け出してもっと前向きな仕事に取り組みたい
- さっさと仕事を切り上げて充実したアフターファイブを過ごしたい
でしたよね。
あなたの解決したい問題は何ですか?
次回はまた
で Access VBA の新しい窓を開きましょう。
Microsoft Access 関連教材は次のリンクからどうぞ。
(有償)本記事中で参照している 16_01.accdb から個人のPC環境に依存する部分を削除した 16_02.zip のダウンロードは次のリンクからどうぞ。
(有償)本記事中で参照している 18_02.accdb から個人のPC環境に依存する部分を削除した 18_03.zip のダウンロードは次のリンクからどうぞ。
いつも記事を読んで頂きありがとうございます~
今日の調子はいかがですか?