• ベストアンサー

マクロで分岐をさせる方法

下記の記録マクロでWith→End With 間にIFで分岐を試みたのですが エラーになります。どうすれば出来るのか伝授をお願いします。 マクロは初心者です。 Dim hensuh(2) As Integer Dim dekiru As Long Dim kinek As Long Dim uineu As Long Dim myTime As Date Dim flg As Boolean Sub OnTimeSamp1() Application.OnTime EarliestTime:=TimeValue("09:00:00"), Procedure:="Ontime_Set" '記録開始 Application.OnTime EarliestTime:=TimeValue("11:00:00"), Procedure:="Ontime_Reset" '記録終了 End Sub Sub Ontime_Set() 'トグルになっている If flg = False Then flg = True myTime = Now + TimeSerial(0, 0, 1) ElseIf flg = True Then flg = False Else Exit Sub End If If Range("A1").Value = "" Then Range("A1").Value = Format(Now, "hh:mm:ss") '時間記録(スタート) End If Application.OnTime EarliestTime:=myTime, _ Procedure:="my_Procedure", Schedule:=flg If flg = False Then myTime = 0 End If End Sub Sub my_Procedure() Worksheets("kirokuyou").Activate 'ワークシートをアクティブにする。(記録中別のワークシートを開けた場合そこに記録されてしまうのを防ぐ) With Range("A65536").End(xlUp).Offset(1) .Value = Format(Now, "yyyy:mm:dd:hh:mm:ss") '時間記録 .Offset(, 1).Value = Range("S3").Value 'S3 の値 .Offset(, 2).Value = Range("T3").Value 'T3 の値 .Offset(, 3).Value = Range("U3").Value 'U3 の値 .Offset(, 4).Value = Range("V3").Value 'V3 の値 dekiru = Range("V3").Value Range("V6").Value = dekiru kinek = Range("T22").Value Range("T18").Value = kinek uineu = Range("U22").Value Range("U18").Value = uineu 'IF S17 >= 120 Then 'hensuh(0) = Range("S17").Value ←変数に代入後、分岐させたいのですがエラーになる 'Elseif S17 >= 110 Then 'hensuh(1) = Range("S17").Value ←変数に代入後、分岐させたいのですがエラーになる 'Elseif S17 >= 100 Then 'hensuh(2) = Range("S17").Value ←変数に代入後、分岐させたいのですがエラーになる 'End If flg = False myTime = 0 End With Call Ontime_Set End Sub Sub Ontime_Reset() 'タイマーリセット On Error Resume Next Application.OnTime EarliestTime:=myTime, _ Procedure:="my_Procedure", Schedule:=False If Err.Number > 0 Then MsgBox "OnTime設定はされていません。", 64 Err.Clear flg = False Else MsgBox myTime & "の設定は解除されました。", 64 flg = False myTime = Empty End If End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 最初に、#2で書いた理由は、自分が書いたものでないと、その人の力を過大評価して、話が食い違ってしまうことがあるからです。それ以外のことは、あまり気にしないでください。ほとんどは、ここのサイト自体の管理上の問題ですから。 前回を確認しましたが、 http://oshiete1.goo.ne.jp/qa5069892.html 私は、補足とお礼の前後関係を読み落としていました。申し訳ないのですが、私は、勢いや流れの中で書いていますので、一旦、途切れると、それを取り戻すには、相当の時間が必要です。 画像を見てください。 同じように、入れて、シミュレートしてみてください。 最大値 C4 =MAX(INDEX(A:B,MATCH($C$2,A:A,1),2):INDEX(A:B,MATCH($D$2,A:A,1),2)) C2に時間値の始まり、D2 に時間値の終わり 最小値 D4 =MIN(INDEX(A:B,MATCH($C$2,A:A,1),2):INDEX(A:B,MATCH($D$2,A:A,1),2)) C2に時間値の始まり、D2 に時間値の終わり

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 最初に、そのコードは、変数やmy_Procedureの中身以外は、何か昔、私が書いたものに良く似いていますね。もし、誰かのコードを使ったら、その人の名前は出さなくても、借りた旨ぐらいは書いてくださいね。私は、そういうことを曖昧にすることを嫌います。以前、知人が私の文章を勝手に出版物に利用しようとして、トラブルになったことがあります。でも、まだ、その頃は救いがありましたね。 さて、 S17 は、変数ではないとしたら、#1さんと同じように以下のようになりますが、 hensuhという、配列変数を代入しても、この過程内で処理しないと意味がなくなってしまいます。どこで利用するのでしょうか? IF Range("S17").Value >= 120 Then hensuh(0) = Range("S17").Value

kj74hvjasi
質問者

補足

Wendy02 さん こんにちは。 このマクロは以前Wendy02さんから回答いただいたものです。 マクロの勉強を始めたばかりでまだ、よくわからない所があって そのマクロに自分なりに色々手を加えてその動きを見て勉強してます。 直接Wendy02さんに質問出来れば良かったのですがその方法が分からなくて、そのまま質問欄に投稿しました。 悪気でやったわけではありません。気を悪くなさらないで下さい。 すみません! ゆるしてください。 出版物とか何かに利用しようとしているわけではありません。 純真に 自分のやりたいことをVBAで組めたらいいなーと思い 勉強を始めたばかりです。 以前色々教えていただきありがとうございます。 あの時より今は、少しマクロのことが理解できます。 マクロの本も何冊か買って勉強してますが、なかなか基礎知識がない為 前に進みません。 以前答えてもらった、下記のマクロに解説をお願いできますか? 最大値 C4 =MAX(INDEX(A:B,MATCH($C$2,A:A,1),2):INDEX(A:B,MATCH($D$2,A:A,1),2)) 最小値 D4 =MIN(INDEX(A:B,MATCH($C$2,A:A,1),2):INDEX(A:B,MATCH($D$2,A:A,1),2)) よろしくお願いします。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

If S17 >= 120 Then の「S17」ってなんでしょうか?変数のつもり?それともS17のセルのこと? If Range("S17").Value >= 120 Then とすべきでは?

kj74hvjasi
質問者

お礼

kyboさん 回答ありがとうございます。 だいぶ参考になりました。 「S17」はセルです。 変数を使う場合の方法も教えてください。

関連するQ&A