Excel VBA 質問スレ Part39at TECH
Excel VBA 質問スレ Part39 - 暇つぶし2ch991:デフォルトの名無しさん
16/02/18 21:27:57.74 Rl3zK8VE.net
>>979のDoEventsの説明はさすがに間違いだろ。
「仕事しながら突っ立ってる」ならいいけど。

992:デフォルトの名無しさん
16/02/18 21:53:34.83 l9x3v9SX.net
>>984
もしかして君は、たとえばIfからEnd Ifの間に書かれた複数の命令は、
「命令の優先順位こそあれ、可能であれば全て同時に実行される」と考えていたりしない?

993:デフォルトの名無しさん
16/02/18 22:00:05.61 Rl3zK8VE.net
>>985

>>979には「ボーッと突っ立っている。他に命令が来ればそれに従う」とあるのだぞ?
じゃあ他の命令が来ないときは何をやっていると?

994:デフォルトの名無しさん
16/02/18 22:13:00.56 42G1e3Su.net
そもそもDoEventsがやるのはメッセージの処理であって
ぼーと突っ立てるんじゃなくて、たまってる別の仕事をチェックする事なわけだが

995:デフォルトの名無しさん
16/02/18 22:14:17.77 1Ki47seW.net
ボーッと突っ立ってると言うより
恋人とデート(メインの仕事)中にたまに他のねーちゃんの相手(GUI の処理)する様なもんかな w

996:デフォルトの名無しさん
16/02/18 22:25:41.37 Rl3zK8VE.net
もしかして、「DoEvents関数そのもの」のことを言っているなら、たしかにそれ自体がメインの仕事を持って働いているわけではない。
でもDoEventsは待ったりはしないから「突っ立っている」と表現は当たらない。

997:デフォルトの名無しさん
16/02/18 22:25:55.12 l9x3v9SX.net
>>986
命令が来ない時は命令が来るのを監視するんだよ。

もしC++でウィンドウ付きのWindowsアプリケーションソフトを作った経験がなければ、
閉じるボタンで閉じるだけのウィンドウアプリケーションを作ってみれば感覚がつかめると思うよ。

998:デフォルトの名無しさん
16/02/18 22:27:21.71 Rl3zK8VE.net
>>990
入れ違いになったが>>989

999:デフォルトの名無しさん
16/02/18 22:30:01.18 l9x3v9SX.net
>>989
そもそもがSleep命令との対比だよ?

DoEvents命令でウィンドウプロシージャに制御を戻す行為を(その時に発生する1Tick以上の遅延を)「待つ」と表現しないなら、
そもそもパソコン全体の処理が「待つ」のは電源落ちた時だけって事になるんじゃない?

1000:デフォルトの名無しさん
16/02/18 22:36:30.17 Rl3zK8VE.net
>>992
その説自体は否定しないが、>>979
「DoEventsは、ハチ公前広場で何もしないでボーッと突っ立ってる状態(寂しい独り者)」
を擁護するのは厳しいだろ。

1001:デフォルトの名無しさん
16/02/18 22:41:25.18 l9x3v9SX.net
>>993
そう? だってDoEvents命令は仮にメッセージキューに何の命令も無かったらすぐに戻ってくるのに対して、
Sleep命令は他にタスクが無くても指定した時間まではOSから呼び出されないから、振る舞いを表現するには適切じゃないかなぁ。

1002:デフォルトの名無しさん
16/02/18 23:06:08.58 Rl3zK8VE.net
>>994
適切かねえ...
以下のプログラムのコメントに違和感はない?

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

Sub test2()
'何もしないでボーッと待機
DoEvents
End Sub

1003:デフォルトの名無しさん
16/02/18 23:08:06.79 XVu7nbkc.net
入力データ(Excel)のデータを判断し、データを出力するvbaを組んでいます。

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

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

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

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


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

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

またOUTを配列化して出力する場合
OUTの帳票で一部セルが結合されております
これの対処方法などを教えていただきたいです

1004:デフォルトの名無しさん
16/02/18 23:13:01.65 l9x3v9SX.net
>>995
やっぱり君は一度、ウィンドウアプリケーションの作成を経験して考えてみるべきだと思うよ。
Sleep命令とDoEvents命令が同列の機能だと勘違いしている気がしてならない。

>>996
配列で扱ってセルに出力する。
結合に関しては結合されていないテンプレートに、配列を出力した後に結合を行うようにするか、
真っ新なシートに出力した後で、装飾全般をマクロで行うようにする。

1005:デフォルトの名無しさん
16/02/18 23:19:16.27 Rl3zK8VE.net
>>997
ん、君こそ>>997の「DoEventsはボーッと突っ立っているだけ」を支持してるんだから、SleepとDoEventsを同等に見てると言うに相応しいのでは?

1006:デフォルトの名無しさん
16/02/18 23:27:28.28 jiQGl0+C.net
>>994
何の命令も無かったら「すぐに」戻ってくる  (←これは正しい)
を「ボーッと」と表現してる限り話はかみ合わないと思うの

1007:デフォルトの名無しさん
16/02/18 23:29:20.75 HG4Fn1co.net
外部のデバッガからDoEventで何してるか確認できるよね
なんで確認しないの

1008:デフォルトの名無しさん
16/02/18 23:31:31.34 l9x3v9SX.net
>>998
while(1){
functionA;
sleep 1; //←Sleep命令
}

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

実際の中身が同等とは思わないけど、おおよそこういう処理の違いだよ?

1009:デフォルトの名無しさん
16/02/18 23:46:03.83 jiQGl0+C.net
>>996
INもOUTも配列にして>>997が言ってるようにすればいいと思うけど、
「5列目の判定でOUT(1)とOUT(3)を出力します」の「5列目の判定」ってどういう意味?

1010:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

1011:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch