トップページtech
1002コメント383KB

Excel VBA 質問スレ Part39 [転載禁止]©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2015/11/27(金) 20:36:45.35ID:9HV+ag/s
ExcelのVBAに関する質問スレです

                   ___
       ___      /____ヽ      ____
      /____\    | |´・ω・`| |    /___ヽ
      .l |´・ω・`|  ニX二 . ̄ ̄ ̄  二X二  |´・ω・`| l 俺たちに任せろ
      !、 ̄ ̄ ̄  ヽ   |       |    /    ̄ ̄ ̄/
       ヽ_/ヽ、  ヽ__)  \__/\_/.   /_/  ノヽ_/
             ̄                ̄ ̄

このスレはコード書き込みOKです。
作成依頼もOKですが、作成依頼限定ではありません。

コードが嫌な人・作成依頼が嫌な人は別スレ建ててください。

※前スレ
Excel VBA 質問スレ Part38 [転載禁止]2ch.net
http://peace.2ch.net/test/read.cgi/tech/1441619979/
0967デフォルトの名無しさん2016/02/17(水) 18:14:40.64ID:Z4Qv/wn8
>>966
じゃあ他の多くのマクロは
コード中にDoEventsを入れてないのに
固まることなく動くのですか?

Windowsイベントについてもっと具体的に詳しくゼロから教えていただけると
0968デフォルトの名無しさん2016/02/17(水) 18:15:11.97ID:Z4Qv/wn8
超うれしいのですが。
0969デフォルトの名無しさん2016/02/17(水) 18:48:59.35ID:P44GJ7CR
http://okwave.jp/qa/q2008316.html
ググるとすぐに出ますよ
0970デフォルトの名無しさん2016/02/17(水) 20:58:21.62ID:63D/Eew4
>>962
やる意味は無いけど、やっても害も無い

まぁ不要な命令が増えてるんだから
厳密には何マイクロ秒とかの無駄な時間を消費してるのかもしれないが
そんなの害とは言わんでしょ
0971デフォルトの名無しさん2016/02/17(水) 22:10:15.48ID:JpNSKx+3
>>964
大変助かりました!ありがとうございます!
0972デフォルトの名無しさん2016/02/18(木) 08:47:39.44ID:IWN3hz7k
>>879
エラー処理で手抜きするな
0973デフォルトの名無しさん2016/02/18(木) 10:27:00.74ID:0J6cOFMi
CALLを多用して、プロシージャを細かく分けているのですが、一定時間を境目に、
参照プロシージャが無限ループしてしまい、
呼び出し元のプロシージャに戻らない問題が起きています。
ステップで確認すると、参照元のEND SUBを通過後、何故かFORの中にあるDOeventsに行った後に頭のsubに戻っていました。この原因が何か分かる方はおりますでしょうか?
0974デフォルトの名無しさん2016/02/18(木) 10:55:35.59ID:l36zGYPb
なんかのイベントでそのプロシージャが呼ばれてるんでないの?
DoEventsの入ったコードではApplication.EnableEventsをFalseにしとかないと
そういう事も起こりえるって死んだじいちゃんがよくいってた
0975デフォルトの名無しさん2016/02/18(木) 11:44:30.07ID:0J6cOFMi
>>974
試してみます。ありがとうございます
0976デフォルトの名無しさん2016/02/18(木) 12:12:27.57ID:eqQ9uyZX
今帰ったばあちゃんが聞いているのですが
Sleep関数ってなんのために存在するのですか?
DoEventsとの違いは?
0977デフォルトの名無しさん2016/02/18(木) 13:23:51.48ID:7/4guD7j
>>976
スリープは、ハチ公前広場で指定時刻まで待機(恋人有り)
DoEventsは、ハチ公前広場で何もしないでボーッと突っ立ってる状態(寂しい独り者)

前者は待機していなければならないので、何があっても待機する。
後者はボーッと突っ立ってるだけなので、他に命令が来ればそれに従う。
0978デフォルトの名無しさん2016/02/18(木) 15:24:56.76ID:niHzXDQD
「SleepとDoEventsはどう違うの?」はレス乞食のコピペ
相手しなくていいよ >>965 >>976
「Subと値を返さないFunctionは以下同文」のパターンもある

「わからないならレスしなくていい」までがワンセット
0979デフォルトの名無しさん2016/02/18(木) 15:46:18.90ID:7/4guD7j
>>978
OK

NGワードにぶっこんだわ
0980デフォルトの名無しさん2016/02/18(木) 19:25:02.56ID:nQtvKuWd
>>978
わからないならレスしなくていい
0981デフォルトの名無しさん2016/02/18(木) 19:36:47.16ID:l9x3v9SX
まぁでも>>977の説明はなかなかに秀逸。
0982デフォルトの名無しさん2016/02/18(木) 21:27:57.74ID:Rl3zK8VE
>>977のDoEventsの説明はさすがに間違いだろ。
「仕事しながら突っ立ってる」ならいいけど。
0983デフォルトの名無しさん2016/02/18(木) 21:53:34.83ID:l9x3v9SX
>>982
もしかして君は、たとえばIfからEnd Ifの間に書かれた複数の命令は、
「命令の優先順位こそあれ、可能であれば全て同時に実行される」と考えていたりしない?
0984デフォルトの名無しさん2016/02/18(木) 22:00:05.61ID:Rl3zK8VE
>>983

>>977には「ボーッと突っ立っている。他に命令が来ればそれに従う」とあるのだぞ?
じゃあ他の命令が来ないときは何をやっていると?
0985デフォルトの名無しさん2016/02/18(木) 22:13:00.56ID:42G1e3Su
そもそもDoEventsがやるのはメッセージの処理であって
ぼーと突っ立てるんじゃなくて、たまってる別の仕事をチェックする事なわけだが
0986デフォルトの名無しさん2016/02/18(木) 22:14:17.77ID:1Ki47seW
ボーッと突っ立ってると言うより
恋人とデート(メインの仕事)中にたまに他のねーちゃんの相手(GUI の処理)する様なもんかな w
0987デフォルトの名無しさん2016/02/18(木) 22:25:41.37ID:Rl3zK8VE
もしかして、「DoEvents関数そのもの」のことを言っているなら、たしかにそれ自体がメインの仕事を持って働いているわけではない。
でもDoEventsは待ったりはしないから「突っ立っている」と表現は当たらない。
0988デフォルトの名無しさん2016/02/18(木) 22:25:55.12ID:l9x3v9SX
>>984
命令が来ない時は命令が来るのを監視するんだよ。

もしC++でウィンドウ付きのWindowsアプリケーションソフトを作った経験がなければ、
閉じるボタンで閉じるだけのウィンドウアプリケーションを作ってみれば感覚がつかめると思うよ。
0989デフォルトの名無しさん2016/02/18(木) 22:27:21.71ID:Rl3zK8VE
>>988
入れ違いになったが>>987
0990デフォルトの名無しさん2016/02/18(木) 22:30:01.18ID:l9x3v9SX
>>987
そもそもがSleep命令との対比だよ?

DoEvents命令でウィンドウプロシージャに制御を戻す行為を(その時に発生する1Tick以上の遅延を)「待つ」と表現しないなら、
そもそもパソコン全体の処理が「待つ」のは電源落ちた時だけって事になるんじゃない?
0991デフォルトの名無しさん2016/02/18(木) 22:36:30.17ID:Rl3zK8VE
>>990
その説自体は否定しないが、>>977
「DoEventsは、ハチ公前広場で何もしないでボーッと突っ立ってる状態(寂しい独り者)」
を擁護するのは厳しいだろ。
0992デフォルトの名無しさん2016/02/18(木) 22:41:25.18ID:l9x3v9SX
>>991
そう? だってDoEvents命令は仮にメッセージキューに何の命令も無かったらすぐに戻ってくるのに対して、
Sleep命令は他にタスクが無くても指定した時間まではOSから呼び出されないから、振る舞いを表現するには適切じゃないかなぁ。
0993デフォルトの名無しさん2016/02/18(木) 23:06:08.58ID:Rl3zK8VE
>>992
適切かねえ...
以下のプログラムのコメントに違和感はない?

Sub test1(ByVal t As Long)
'指定秒数待機
Sleep 1000 * t
End Sub

Sub test2()
'何もしないでボーッと待機
DoEvents
End Sub
0994デフォルトの名無しさん2016/02/18(木) 23:08:06.79ID:XVu7nbkc
入力データ(Excel)のデータを判断し、データを出力するvbaを組んでいます。

入力データを
INとして
出力データは3帳票あるんどえ
OUT(1 to 3)
と仮定します。

INデータは30列で1万行あります。

うち5列目の判定でOUT(1)とOUT(3)を出力します
うち6列目の判定でOUT(3)を出力します

この際一番はやい出力方法はどちらになるのでしょうか?


@INもOUTもcellsで判定し、cellsで出力

AINを配列化し、OUTはcellsで出力

またOUTを配列化して出力する場合
OUTの帳票で一部セルが結合されております
これの対処方法などを教えていただきたいです
0995デフォルトの名無しさん2016/02/18(木) 23:13:01.65ID:l9x3v9SX
>>993
やっぱり君は一度、ウィンドウアプリケーションの作成を経験して考えてみるべきだと思うよ。
Sleep命令とDoEvents命令が同列の機能だと勘違いしている気がしてならない。

>>994
配列で扱ってセルに出力する。
結合に関しては結合されていないテンプレートに、配列を出力した後に結合を行うようにするか、
真っ新なシートに出力した後で、装飾全般をマクロで行うようにする。
0996デフォルトの名無しさん2016/02/18(木) 23:19:16.27ID:Rl3zK8VE
>>995
ん、君こそ>>997の「DoEventsはボーッと突っ立っているだけ」を支持してるんだから、SleepとDoEventsを同等に見てると言うに相応しいのでは?
0997デフォルトの名無しさん2016/02/18(木) 23:27:28.28ID:jiQGl0+C
>>992
何の命令も無かったら「すぐに」戻ってくる  (←これは正しい)
を「ボーッと」と表現してる限り話はかみ合わないと思うの
0998デフォルトの名無しさん2016/02/18(木) 23:29:20.75ID:HG4Fn1co
外部のデバッガからDoEventで何してるか確認できるよね
なんで確認しないの
0999デフォルトの名無しさん2016/02/18(木) 23:31:31.34ID:l9x3v9SX
>>996
while(1){
functionA;
sleep 1; //←Sleep命令
}

void functionA(){
int f = 1;
while(f){
f = 0; //←DoEvents命令
}
}

実際の中身が同等とは思わないけど、おおよそこういう処理の違いだよ?
1000デフォルトの名無しさん2016/02/18(木) 23:46:03.83ID:jiQGl0+C
>>994
INもOUTも配列にして>>995が言ってるようにすればいいと思うけど、
「5列目の判定でOUT(1)とOUT(3)を出力します」の「5列目の判定」ってどういう意味?
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。