dポイントプレゼントキャンペーン実施中!

例えば

監視.xls(外部参照でprivate_culculateを実行,具体的には楽天のRSS)
発注.xls(買い,売り時に出動)

があったとしますよね。

とうぜん,発注VBA実行中にも監視VBAのcaluculateの更新は必須ですよね。

しかし,これって同時に走るのでしょうか?

同時に走らせるために,
(1)エクセルを分ける___新規エクセルを起動して,監視読み込み。 また新規エクセル起動して発注読み込み。
これなら,Winがマルチタスクである以上,相当CPUに負荷がかからないかぎり
問題なく動くと思うのですが,この場合のVBAのやりとり(コード)は難しいですか?

(2)エクセルの中で,両方のファイルを別々に立ち上げる。この場合はVBAが
共用されますが,VBAは同時に動くのでしょうか?

やればわかるじゃないかと言われそうですが(^^;)
どなたか経験のある方,みえますか?

A 回答 (1件)

こんにちは。



私が、ここの掲示板を書いてから約1年、私の知っている範疇では、その件は根本的な解決ついていないです。

理由はふたつ。

・今回のように最初に、質問者が、それを言ってくださらなかったので、回答者が、あれこれやっている間に、時間が掛かりすぎ、質問者も良く分からないので放り出したままになっている。

・少なくとも私は、RSS の仕組みが良く分かっていないし、そのために手に入れることが出来ないので、想像の範囲でしかない、ということ。アドイン・スタイルであるので、いずれにしても、VBAが、それとバッティングする可能性がある、ということだけしか分からない。

ということです。

たぶん、これに詳しい人は、どこか別にいるのではないか、と思います。かなりの達人で、古くからVBAで開発していた人がVBA専用掲示板にいたような気がします。

>発注VBA実行中にも監視VBAのcaluculateの更新は必須ですよね。
>しかし,これって同時に走るのでしょうか?

「caluculateの更新は必須ですよね。」-いいえ、それは違います。

通常、以下の三つが、VBAマクロでは、オフになりますが、内部的には計算はされても、表示は出ないようにする、別の働きはさせない、介入はさせない、というのが基本スタイルです。

Application.ScreenUpdating
Application.EnableEvents
Application.Interactive 'まれに

マルチタスクは関係なく、Excelの場合は、擬似的に起こるだけです。両方を立てようとすると、両方が犠牲になってしまいます。他のものが加わると、性能的に割り引いて動かそうとします。ただ、VBAは、基本的には、10m ~100ms の世界ですから、VBA自体をインターバルに用いることによって解決させる、というのがテクニックです。

>エクセルの中で,両方のファイルを別々に立ち上げる。この場合はVBAが共用されますが,VBAは同時に動くのでしょうか?

たぶん、VBAでなくても、本来、不可能だと思います。擬似的に、そう見えるだけだと思います。(前回の同様のご質問者は、そうは見えない、とおっしゃっていましたが)VBAは、ひじょうに遅いのですが、仮に、他の言語でも、原理的には変わらないと思っています。

それと、別件ですが、今の状況だとしますと、時刻あわせの件は、VBA側からはやめたほうがよいです。そのプロセス上のロスが大きいように思います。直接、ソフトウェア・ツールと電波時計とのチェックのほうがよいと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>>私が、ここの掲示板を書いてから約1年、私の知っている範疇では、その件は根本的な解決ついていないです。

なるほどなるほど。

>>「caluculateの更新は必須ですよね。」-いいえ、それは違います。

これの意味は,自分にとってプッシュの株価データの取得が必須という意味です。
混乱を招きましてすいません。


>>通常、以下の三つが、VBAマクロでは、オフになりますが、内部的には計算はされても、表示は出ないようにする、別の働きはさせない、介入はさせない、というのが基本スタイルです。
>>Application.ScreenUpdating
>>Application.EnableEvents
>>Application.Interactive 'まれに

なるほど,勉強になります。私が知りたかったのは,1つのエクセルの中に2つのファイルが同居すると優先される実行コードはどちらか一方に2者択一になるのではないかと思ったからです。
だったら,2つのエクセルを立ち上げた方がCPUやWINが限られた時間の中でバランスよく処理を割り振ってくれるのではないかと考えたからです。

>>マルチタスクは関係なく、Excelの場合は、擬似的に起こるだけです。両方を立てようとすると、両方が犠牲になってしまいます。他のものが加わると、性能的に割り引いて動かそうとします。ただ、VBAは、基本的には、10m ~100ms の世界ですから、VBA自体をインターバルに用いることによって解決させる、というのがテクニックです。

何はともあれ,やってみました(すいません,最初からやれって怒らないで)。
エクセルが1つでファイル2個同居とエクセル自体を2個立ち上げた場合と。
結果は,変わりありませんでした。見てる感じでは違いはありませんでした。
一応マルチタスク(当然擬似ですが,この場合でいう擬似はCPUまたはパソコンが2台ないかぎり完全なマルチはありえないという意味です)
で動きます。低負荷の場合は問題ありませんが,高付加がかかると。取得データが飛び飛びになります。
おっしゃる通りです。
やはり,これもおっしゃる通り,自分でタイミングやらなにやらに相当知恵を絞る必要がありそうです。

本当にありがとうございました。

ちなみに時計の合わせの件は朝の一回だけの予定ですので,高負荷下ではありません。
一度試させていただきます。ありがとうございました。

お礼日時:2006/08/24 13:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!