[[20180412144208]] 『access VBA インポート&エクスポート に時間ax(マクロン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『access VBA インポート&エクスポート に時間がかかる』(マクロン)

access VBAで 「Excel A」 と 「Excel B」をそれぞれインポートし

クエリーで多少加工し 、それぞれエクスポートする簡単なVBAを作成しまし

た。

20,000KB位のファイルですが処理時間が2時間近くかかってしまいます。

これを処理時間を時短化するなにかいい方法がありましたらご教示ください

< 使用 Excel:Excel2013、使用 OS:Windows8 >


とりあえず、

インポート
クエリでの加工
エクスポート

の3つの処理のそれぞれの処理時間を計測して、
何か一番時間がかかっているかを把握しましょう。

一番時間のかかっている処理から時短化を試みるようにしましょう。

(hatena) 2018/04/12(木) 15:39


更新には、SQL文を実行するコードを書いているのでしょうか? そうであれば、テーブル構造とか処理コードを見せてもらわないと、何ともできないです。 また、「外部データの取り込み」機能でのインポート時間と比較して、どれくらい違うのでしょう? 違いが大きければ、改善の余地がありそうです。

気になるのは、「クエリーで多少加工」という部分です。 シート上に全部持ってきてからマクロで加工しているのかと思うのですが、それだと「クエリー」とは言わないので、何をやっているのか気になります。
(タイトルでは「インポート&エクスポートに時間がかかる」と言っているし、そこは十分速いのですかね?)
(???) 2018/04/12(木) 15:47


何を説明すればいいのかわかっていないのですが、取り合えず・・・
(処理時間は2時間かかってしまうので今はご勘弁ください)

Aファイル 4500KB (Excel) データ数=55000行

	タイトル行の構成

	アカウント 分類 客番1	客番2 契約名義	単価1 単価2 単価3	開始日	終了日

Bファイル 5500KB  (Excel) データ数=92000行

	タイトル行の構成
    お客様番号 アカウント 契約名義 合計単価 開始日 終了日

構文

Function hubi() 'access 不備抽出

 MsgBox "処理中です。"

 Dim mypPath As String
 Dim mypPath2 As String

 myPath = CurrentProject.Path & "\Data\Aファイル.xlsx"
 DoCmd.TransferSpreadsheet acImport, , "T_aData", _
 myPath, True

 myPath2 = CurrentProject.Path & "\Data\Bファイル.xlsx"
 DoCmd.TransferSpreadsheet acImport, , "T_bData", _
 myPath2, True

 DoCmd.TransferSpreadsheet acExport, , "Q_3Aファイル不備data", CurrentProject.Path & "\" & Format(Now(), "yyyymmdd_hhnnss") & "_" & "Aファイル不備data.xlsx", True
 DoCmd.TransferSpreadsheet acExport, , "Q_4Bファイル", CurrentProject.Path & "\" & Format(Now(), "yyyymmdd_hhnnss") & "_" & "Bファイル不備.xlsx", True

   Kill myPath
   Kill myPath2

   MsgBox "処理完了しました。"

   Application.Quit    '閉じる

End Function

これをAutoExesで実行しています。

AファイルとBファイルにはお客様番号を基準にリレーションシップを設定しています。

Q_4Bファイルは「お客様番号 アカウント 契約名義 合計単価 開始日 終了日」のあとにAファイルの客番をもってきています。
         BにあってAにないデータを把握するため

Q_3Aファイル不備dataは「アカウント 分類 客番1 客番2 契約名義 単価1 単価2 単価3 開始日 終了日」の後に

   Bファイルの客番をもってきています。AにあってBにないデータを把握するため

 以上の右横に

 単価相違:[合計単価]ー[単価1]ー[単価2]ー[単価3]
 開始日比較: StrComp([開始日],[開始日_文字列])
 終了日比較: StrComp([終了日],[終了日_文字列])

の数式をいれています
そのほかはデザインビューで以下のような簡単な数式をいれています。
合計単価: Val(Nz([単価1],"0"))+Val(Nz([単価2],"0"))+Val(Nz([単価3],"0"))
月: Mid([終了日],5,2)
開始日_文字列: Left([開始日],4)+Mid([開始日],6,2)+Right([開始日],2)
終了日_文字列: Left([終了日],4)+Mid([終了日],6,2)+Right([終了日],2)

説明の仕方がわからなくて、こんな感じでよろしいでしょうか?
クエリーでやっていることはだいたいこんな感じのことです

(マクロン) 2018/04/12(木) 16:48


これは、AccessのVBAですね。 ここはExcelの掲示板なので、専門外ですよ。 Accessの掲示板で聞いてみるべきです。

とりあえず、これはサーバ上に置いて実行してはいませんか? もしサーバ上で動かしているならば、全てローカルPCにコピーしてから実行するとどうなりますか?

それと、Q始まりということは、対象はテーブル自身ではなく、クエリですね? テーブル本体をエクスポートしましょう。日付の加工なんて、Excelマクロにだってできます。
(???) 2018/04/12(木) 16:59


(???)様
ここはExcel専門なのですね。VBAなら可能かと勘違いしておりました。
ちなみにAccessの掲示板探したのですが見当たりません。
URLをおねがいできませんでしょうか?
(マクロン) 2018/04/12(木) 17:07

私自身は、どんな言語でも質問したことが無いので、掲示板は詳しくないのです。
例えば大きいところではteratailとか、VBA全般とAcccessのどちらでも該当するかと思いますよ。

まぁ、私の書いた事を試してからでも遅くないと思いますが。(同じような回答が付くように思います)
(???) 2018/04/12(木) 17:15


[[20180320131533]]
 参考に。
(ねむねむ) 2018/04/12(木) 17:16

下記が現在でも生きている掲示板です。

Accessのエラー・バグ・問題の解決方法|teratail
https://teratail.com/tags/Access

Excel VBA を学ぶなら moug モーグ|Access (VBA)
http://www.moug.net/faq/viewforum.php?f=4

Microsoft Access 回答受付中の質問 - Yahoo!知恵袋
https://chiebukuro.yahoo.co.jp/dir/list.php?dnum=2078297678&flg=0&sort=2

Microsoft Access Club
http://www.accessclub.jp/index.html

Office の結果 - マイクロソフト コミュニティ
https://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_access?auth=1

下記は私の運営する掲示板です。

hatena の Microsoft Access 掲示板
http://hatena-access.progoo.com/bbs/
(hatena) 2018/04/12(木) 17:22


ねむねむさん、hatenaさん、ありがとうございます。(残念ながら、hatenaさんのところはチャット系と判断されてフィルタされてしまって、私は見にいけない…)

ちなみに、テーブル本体をエクスポートしろというのは、例えば不備データを抽出して別のワークテーブルに書き出すクエリを動かしてから、できあがったワークテーブルをエクスポートする、という事です。 大元のテーブルはでっかいでしょうし。
(???) 2018/04/12(木) 17:31
(お名前のスペル間違えてる!修正 18:15)


(???)さま

確かにサーバー上でRUNすると遅いようです。ローカルでRUNするようにいたします。

ねむねむ様・hatena様

いろいろありがとうございました。
accessに関してはいただいたほうで投稿するようにいたします。
私も残念ながら、hatenaのところへはいけなくて非常に残念です。

(マクロン) 2018/04/13(金) 11:20


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.