[[20161116132131]] 『ExecuteExcel4Macroの代用品』(生徒E) ページの最後に飛ぶ

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

 

『ExecuteExcel4Macroの代用品』(生徒E)

ExecuteExcel4Macroの代用品を探しています。

テンプレートにそって作られたxlsmファイルが1200個ほどありその中の
A10 D10 C20 ...20個ほど
のセル内のデータをエクセルファイル1つに収めたいと思っています
しかしExecuteExcel4Macroだとシート名が違う場合は動かないとのこと
目的のデータがsheet(1)にあるときにブックを開かずにセル内のデータを取得する方法はありますでしょうか?

Dim Fol As String
Dim buf As String, cnt As Long, Path As String
Dim bufb(10000) As String
Dim Co As Long
Dim Ro As Long

    '選択
    ThisWorkbook.Activate

    'フォルダの決定
    'フォルダ内ブック名の取得(bufb内)
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = True Then
        Fol = .SelectedItems(1)
        End If
    End With
    Path = Fol & "\"
    buf = Dir(Path & "*.xls?")
    cnt = 0

    Do While buf <> ""
        bufb(cnt) = buf
        buf = Dir()
        cnt = cnt + 1
    Loop

    '処理
    'ExecuteExcel4Macro?

< 使用 Excel:Excel2010、使用 OS:Windows7 >


肝心のExecuteExcel4Macroを利用した部分も書いてください。
シート名も指定できたと思いますよ?('フォルダ[ファイル名]シート名'!セル位置)

駄目なようならば、普通にブックを開いて、シートとセル位置を指定して代入するだけかと。
(???) 2016/11/16(水) 13:55


ExecuteExcel4Macroはオブジェクト名で動くのでしょうか?やってみます。
また1200ブックを開いて閉じてを繰り返すのは時間がかかると思い質問してみたのですが、とりあえず試してみます
???さん回答有り難うございます。
(生徒E) 2016/11/16(水) 14:04

>また1200ブックを開いて閉じてを繰り返すのは時間がかかると思い質問してみたのですが、
>とりあえず試してみます
画面の更新を止めたら、開いて閉じてをしてもそんなに変わらないんじゃないかなぁ。。。

(まっつわん) 2016/11/16(水) 14:30


 回答ということではありません。

 ブックを扱う場合、どういう方法がいいだろうかということの議論が、かってありました。
 元トピは [[20151023213330]]? 『別Bookからのデータ転記について』(エイチ・アイ) だったんですが
 なぜか、このトピが消えているんですが。
 このトピを参照した関連トピとしては

[[20160409181200]] 『bookを開かずにデータを貼付け』(sa)
[[20160308184916]] 『ブックを開かずにデータを取得する方法』(せな)
[[20160209092836]] 『以下コードの処理速度を高速化したいです』(さびさび)

 比較は,ADO方式、外部参照数式埋め込み方式、Excel4方式、ブックを開く方式 で行われ、結果は

 対象ブックが膨大なサイズだった場合(何メガもあるブック)

 ◎ADO方式
 ◎外部参照数式埋め込み方式
 ▲ExecuteExcel4 方式(遅い!)
 ✕ブックを開く方式(遅くて使い物にならない)

 対象ブックが通常(何をもって通常というのかは??ですけど)のサイズの場合

 ◎ADO方式
 ◎外部参照数式埋め込み方式
 ○ブックを開く方式(まずまず。悪くない効率)
 ▲ExecuteExcel4 方式(遅い!)

 いずれにしても、どういった場合でも遅い ExcecuteExcel4方式の出番はないんだろうなということでしたね。

 ところで、ExcecuteExcel4 でも 外部参照数式 でも、書いておられる通り、シート名を記述しなければいけませんね。
 なので、シート名がわからないということになると、効率の良い外部参照数式埋め込み方式もNGということになります。

 どんな方式をとるということとは離れて、ブックを集約しなければいけない、そういったテーマであれば、それらブックを
 作成する時点でのルール、シート名は必ずこれこれでないとだめ! という縛りをいれたらいかがでしょうか。
 1200ものブックって、どこかから集めて、どこかに入っているんでしょうけど、今回のテーマとは別に、それらブックに
 指定のシートがあるかどうかのチェックマクロをつくり、なければ、リストアップして、ブックの作成者を厳しく指導するとか
 そういうことをやったほうがいいと思いますね。

 それと、1200!!!!
 仮に 1つ 0.1秒で処理しても 2分もかかるわけですねぇ。
 すごいですね。

 別板なんですが、最近、大量の処理を連続すると、エクセルが固まる とか エクセルがダウンする といった質問を
 よく目にします。
 また、最近はお目にかからないのですが、かって、シートを連続して新規に1000枚ほど追加していくとエクセルが落ちるとか
 エラーになってしまう というのもありました。
 MS公式サイトでは、【同じ処理を何回も行うとこのようなことになるということはMSとして認識しています】なんて
 常套句によるいいわけが掲載されていましたね。

 何を言いたいかというと、エクセルって、コードとしては、繰り返しの大量処理も書くことができますが、はたして、それが
 機嫌よく動く構造になっているのか? そういう処理での信頼性をエクセルとして保証しているのか?
 しょせんが(?)操作者の入力を受けて、何かをして、表示するという、単発、インタラクティブなツールですから、1200ブック処理のような
 エンタープライズな処理には向いていないような気がします。

 やるなら、たとえば 100ブックずつ、別フォルダに格納しておいて、フォルダ毎に 100個処理して終わり。
 こういった構成にしたほうが安全かもしれません。

(β) 2016/11/16(水) 14:44


βさんのリンクで、私の書き込みが消えているのがあるのは何故だろう…? 謎。

対象ブックが多い場合、私ならファイルの更新日時をチェックし、前回集計から更新しているブックだけ開いて値を拾いますね。たまにシートに列追加、行追加して使う人とか居て、データ位置を可変対応したりするもので。

ExecuteExcel4Macroは今後も継続して使えるか判らない命令ではありますが、1セルだけ抜き出すなら普通にブックを開くよりも速い、と言っている方も居るし、アリかな、と思います。ディスクキャッシュの効き具合で変わるのですかねぇ? ADOが速いといっても、DBとして開くまでの時間がかかるので、小さな抜き出しだと遅かったりしますし。
(???) 2016/11/16(水) 14:55


あまり時間がかからないと良いのですが…
まっつわんさん回答ありがとうございます。

確かに1200あるブックを一度に処理しようとするのは危険かもしれません、上司に許可を頂けたらまるごと複製して小分けにして処理するように致します。
また外部参照数式埋め込み方式というのは盲点でした、こっちのほうがマクロより後々弄りやすそうなのでこれも検討してみます。
ADO方式というのは初めて聞きましたので過去ログ等を見て勉強させて頂きます。
βさん回答ありがとうございます。

上司に許可を頂けたらシート名を全部変えてExecuteExcel4Macroも使用してみようと思います。
???さん回答ありがとうございます。

皆さんの回答をいただけてどうにかなりそうな気がしてきました、ありがとうございます。
(生徒E) 2016/11/16(水) 15:29


コメント返信:

[ 一覧(最新更新順) ]


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