- ベストアンサー
1秒毎にセルの値を1ずつ増やしたいのですが
いつも難しいマクロでgooの皆さんには大変お世話になっています。 よろしくお願いします。 エクセルで、シート上でクリックを一回したらセルの値が1秒ごとに1ずつ増えるようにしたいのです。再度クリックしたらカウントを中断して0に戻りまた1秒ごとに1ずつセルの値を増やしたいです。数値の最高値は別のセルに書いてある数値です。 ちょっと難問ですがどうかよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
要件に一番近そうなマクロを作ってみました。ただし数点制約があります。 ・ExcelVBAではマルチスレッドが実現できないので1セル毎でしかカウントできません。 ・クリックイベントは無いので、ボタン(CommandButton1)のクリックイベントで カウントのON/OFFを行っています。 Option Explicit Private Declare Function GetTickCount Lib "kernel32" () As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public blCountFlg As Boolean Private Sub CommandButton1_Click() blCountFlg = Not blCountFlg Call prc_Count(ActiveCell, Cells(1, 1)) End Sub Private Sub prc_Count(ByVal Target As Range, MaxCount As Long) Dim lnStart As Long Dim lnCount As Long lnStart = GetTickCount Do While (blCountFlg And lnCount < MaxCount) Sleep (100) lnCount = (GetTickCount - lnStart) / 1000 Target.Value = lnCount DoEvents Loop End Sub
その他の回答 (2)
- nicotinism
- ベストアンサー率70% (1019/1452)
あんまり、パッとしない案です。 シート1のイベントに Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'A1 微調整用 'B1 設定秒数 'C1 開始 'C2 停止 'D1 経過秒表示 'E1 開始時間 'F1 終了時間 Dim i As Long Dim tt As Single Dim tA As Single If Target.Address <> "$C$1" Then Exit Sub Range("c1").Value = "Start" Range("c2").Value = "Stop" Range("d1") = 0 Range("F1") = "" Range("G1") = "" tA = Range("A1").Value Range("E1") = Timer Do Until i > Range("B1").Value - 1 If ActiveCell.Address = "$C$2" Then Exit Do Exit Sub End If tt = Timer Do While Timer < tt + tA DoEvents ' 他のプロセスに制御を渡します。 Loop i = i + 1 Range("D1") = i Loop Range("F1") = Timer Range("G1") = "誤差 " & Range("F1") - Range("E1") - Range("B1").Value End Sub んで セル A1 に 1 セル B1 に 10 を入れてセルC1を選択してみてください。停止ははC2を選択。
- toshi_2000
- ベストアンサー率30% (306/1002)
マクロは、次の通りです。(数値の最高値には未対応) Sub Test() If Cells(1, 1) <> 0 Then Cells(1, 1) = 0 Application.OnTime Now + TimeValue("00:00:01"), "test2", SCHEDULE:=False End If Test2 End Sub Sub Test2() Cells(1, 1) = Cells(1, 1) + 1 Application.OnTime Now + TimeValue("00:00:01"), "test2" End Sub