[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『access VBA インポート&エクスポート に時間がかかる』(マクロン)
access VBAで 「Excel A」 と 「Excel B」をそれぞれインポートし
クエリーで多少加工し 、それぞれエクスポートする簡単なVBAを作成しまし
た。
20,000KB位のファイルですが処理時間が2時間近くかかってしまいます。
これを処理時間を時短化するなにかいい方法がありましたらご教示ください
< 使用 Excel:Excel2013、使用 OS:Windows8 >
インポート
クエリでの加工
エクスポート
の3つの処理のそれぞれの処理時間を計測して、
何か一番時間がかかっているかを把握しましょう。
一番時間のかかっている処理から時短化を試みるようにしましょう。
(hatena) 2018/04/12(木) 15:39
気になるのは、「クエリーで多少加工」という部分です。 シート上に全部持ってきてからマクロで加工しているのかと思うのですが、それだと「クエリー」とは言わないので、何をやっているのか気になります。
(タイトルでは「インポート&エクスポートに時間がかかる」と言っているし、そこは十分速いのですかね?)
(???) 2018/04/12(木) 15:47
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
とりあえず、これはサーバ上に置いて実行してはいませんか? もしサーバ上で動かしているならば、全てローカルPCにコピーしてから実行するとどうなりますか?
それと、Q始まりということは、対象はテーブル自身ではなく、クエリですね? テーブル本体をエクスポートしましょう。日付の加工なんて、Excelマクロにだってできます。
(???) 2018/04/12(木) 16:59
まぁ、私の書いた事を試してからでも遅くないと思いますが。(同じような回答が付くように思います)
(???) 2018/04/12(木) 17:15
参考に。 (ねむねむ) 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
ちなみに、テーブル本体をエクスポートしろというのは、例えば不備データを抽出して別のワークテーブルに書き出すクエリを動かしてから、できあがったワークテーブルをエクスポートする、という事です。 大元のテーブルはでっかいでしょうし。
(???) 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.