Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7383 / 13645 ツリー ←次へ | 前へ→

【39449】OnTme メソッドについて 勉強中 06/6/24(土) 10:10 質問[未読]
【39451】Re:OnTme メソッドについて Blue 06/6/24(土) 12:51 発言[未読]
【39463】Re:OnTme メソッドについて 勉強中 06/6/24(土) 15:34 発言[未読]
【39465】Re:OnTme メソッドについて Blue 06/6/24(土) 15:37 発言[未読]
【39472】Re:OnTme メソッドについて 勉強中 06/6/24(土) 17:40 お礼[未読]
【39466】Re:OnTme メソッドについて Kein 06/6/24(土) 15:40 発言[未読]
【39471】Re:OnTme メソッドについて 勉強中 06/6/24(土) 17:37 お礼[未読]
【39478】Re:OnTme メソッドについて 漂流民 06/6/24(土) 22:24 発言[未読]

【39449】OnTme メソッドについて
質問  勉強中  - 06/6/24(土) 10:10 -

引用なし
パスワード
   OnTimeメソッドを使って、毎正時から15分まで5分ごとに、"sub 計算" の演算をしようと下記のようなマクロを作りましたが、型が一致しないとのメッセージが出ます。解決策をお願いします。


'1時間毎の計算
 n = 0
 Do Until n = 24

'5分ごとの計算     
  k = 0
  Do Until k = 15
    Application.OnTime TimeValue("n:k:00"), "計算"

(中略)

  k=k+5
  Loop
 n=n+1
 Loop


【39451】Re:OnTme メソッドについて
発言  Blue  - 06/6/24(土) 12:51 -

引用なし
パスワード
   ▼勉強中 さん:
>    Application.OnTime TimeValue("n:k:00"), "計算"
MsgBox "n:k:00"
でどんな文字列になっているのか確認してみましたか?

"で囲えばその中は文字列のままです。
いくら変数名を書いてもそれは文字列です。

【39463】Re:OnTme メソッドについて
発言  勉強中  - 06/6/24(土) 15:34 -

引用なし
パスワード
   ▼Blue さん:
>▼勉強中 さん:
>>    Application.OnTime TimeValue("n:k:00"), "計算"
>MsgBox "n:k:00"
>でどんな文字列になっているのか確認してみましたか?
>
>"で囲えばその中は文字列のままです。
>いくら変数名を書いてもそれは文字列です。


そうですよね。。。
いい方法ないですかねえ。

【39465】Re:OnTme メソッドについて
発言  Blue  - 06/6/24(土) 15:37 -

引用なし
パスワード
   ヒント

Dim i As Integer

i = 10

MsgBox "iは" & i & "です"

【39466】Re:OnTme メソッドについて
発言  Kein  - 06/6/24(土) 15:40 -

引用なし
パスワード
   基本的なループの作り方に問題があります。

n = 0
 Do Until n = 24

'5分ごとの計算     
  k = 0
  Do Until k = 15
    Application.OnTime TimeValue("n:k:00"), "計算"

これでは外側も内側も、一度も回らずに抜けてしまうことに気がつきませんか ?

Do
  処理
  カウンタ変数をインクリメント
Loop Until(While) カウンタ変数のチェック

という構文にしないとダメです。

【39471】Re:OnTme メソッドについて
お礼  勉強中  - 06/6/24(土) 17:37 -

引用なし
パスワード
   ▼Kein さん:
>基本的なループの作り方に問題があります。
>
>n = 0
> Do Until n = 24
>
>'5分ごとの計算     
>  k = 0
>  Do Until k = 15
>    Application.OnTime TimeValue("n:k:00"), "計算"
>
>これでは外側も内側も、一度も回らずに抜けてしまうことに気がつきませんか ?
>
>Do
>  処理
>  カウンタ変数をインクリメント
>Loop Until(While) カウンタ変数のチェック
>
>という構文にしないとダメです。

お恥ずかしい限りです。

【39472】Re:OnTme メソッドについて
お礼  勉強中  - 06/6/24(土) 17:40 -

引用なし
パスワード
   ▼Blue さん:
>ヒント
>
>Dim i As Integer
>
>i = 10
>
>MsgBox "iは" & i & "です"

ありがとうございます。

【39478】Re:OnTme メソッドについて
発言  漂流民  - 06/6/24(土) 22:24 -

引用なし
パスワード
   ▼勉強中 さん:

もう解決されているようですが、
老婆心から少し・・・

変数の扱いで困っているレベルで、とかく無限ループに陥りやすいDo〜Loop文を
使用されるのはあまりお奨めできません。
基本的にFor〜Next文を使用し、Do〜Loop文は条件式でしか抜けれない場合に
使うようにした方が良いと思います。

 For n = 0 To 23
'5分ごとの計算
  For k = 0 To 10 Step 5   '15分も含めるなら k = 0 To 15
    Application.OnTime TimeValue(n & ":" & k & ":00"), "計算"

'(中略)

  Next k
 Next n


>OnTimeメソッドを使って、毎正時から15分まで5分ごとに、"sub 計算" の演算をしようと下記のようなマクロを作りましたが、型が一致しないとのメッセージが出ます。解決策をお願いします。
”15分”は含めるのですか?勉強中 さんのコードだと含まれませんが・・・

もし含めるのであれば
>  Do Until k = 15
  Do Until k = 20
または
  Do Until k > 15
となります。

ついでに、Do〜Loop文を使用するのであれば
例えば
>  k=k+5
を7分ごとに
  k = k + 7
と変更し、
>  Do Until k = 15
を変更し忘れた場合TimeValueでエラーになるまでループしてしまうので、Do〜Loop文では
  Do Until k >= 15
のように範囲で指定するようにしたほうが無限ループに陥りにくくなります。


<以下は頭の片隅にでも入れておいて下さい^^>
ちなみに、私もテストコードでは便利に使用している宣言の省略と自動型変換ですが、
実使用では、変数宣言・キャストは行うようにした方が良いです。
余計なトラブル、メモリの浪費を回避できます。
 Dim n As Integer
 Dim k As Integer
    Application.OnTime TimeValue(CStr(n) & ":" & CStr(k) & ":00"), "計算"

7383 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free