• ベストアンサー

1秒毎にセルの値を1ずつ増やしたいのですが

いつも難しいマクロでgooの皆さんには大変お世話になっています。 よろしくお願いします。 エクセルで、シート上でクリックを一回したらセルの値が1秒ごとに1ずつ増えるようにしたいのです。再度クリックしたらカウントを中断して0に戻りまた1秒ごとに1ずつセルの値を増やしたいです。数値の最高値は別のセルに書いてある数値です。 ちょっと難問ですがどうかよろしくお願いします。

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

  • ベストアンサー
回答No.1

要件に一番近そうなマクロを作ってみました。ただし数点制約があります。 ・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)
回答No.3

あんまり、パッとしない案です。 シート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)
回答No.2

マクロは、次の通りです。(数値の最高値には未対応) 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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • [マクロ]値に変換しても、空白のセルがカウントされてしまいます。

    式が入っているセルを値に変換し、値が入ってるセルだけをカウントさせたいのですが、もともと式が入っていた空白になっているセルもカウントしてしまいます。 値の変換の仕方が間違っているのでしょうか? それともカウントの仕方が良くないのでしょうか。 値に変換するのは自動記録のマクロを作成しました。 カウントは、COUNTA関数をVBAで使用しています。 空白のセルをカウントさせない方法を教えてください。 マクロ・VBA初心者なので、値に変換するVBAも合わせて教えていただけると勉強になります。 よろしくお願いいたします。

  • 【エクセル2003】セルの値を0→1→2→3→0と変えるボタンを作りたい。

    いつもお世話になってます。 シート上にボタンを設置し、以下のようなマクロを登録したいのですが、 どのように記述しればよいのでしょうか? ボタンを押すと、セルA1の値がゼロから1に変わる。 もう一度押すと、同セルの値が1から2に変わる。 さらにもう一度押すと、同セルの値が2から3に変わる。 もう一度押すと、3から0に戻る。 ご教示のほどよろしくお願いします。

  • 計算した値のセルを参照する

    いつもお世話になっています。 EXCELで計算して出た値のセルを参照することはできますか? たとえば、計算によって「21」という数値が出たなら「A21」のセルを参照するということです。 よろしくお願いします。

  • エクセルで数式のセルの値を引用する方法は?

    エクセルで、別シートの数式のセルの現在の値を引用する時、数式が引用されるため、別シートの値が変わると連動して変わります。 引用した時点の数値そのもの(数値が変化しないように)を引用したいのですが、どうすればよいのでしょうか。 引用としては、セルの値として引用する場合とセル内の関数の中の数値に引用したい場合があります。

  • 値の入っているセルをカウントするマクロの作成

    マクロ初心者です。 アクティブセルから一つ上の列に、値が入っているセルが何個あるのかカウントするマクロを作成したいのですが、うまくいかずに困っております。 すみませんが、よろしくお願いします。 参考用画像の解説 【ActiveCell】セルから上の列を範囲指定。 1、2、3と数字が入っているセルが何個あるのかカウント。

  • Excelで複数シートの同一セルをカウントしたいのですが・・・。

    Excelで複数シートの同一セルをカウントしたいのですが・・・。 1bookに対して100sheetほどあります。 カウントするセルはA1。 数値は1~10のみで、それぞれ1が10個、2が15個・・・ とカウントしたいのです。 方法はありますでしょうか? 初心者ですので分かり易くご教授願います。。

  • エクセルで隣のセルに○をつける

    エクセルのシートにおいて, 一つのセルに一つの数値(0~80)を入力します. 一列に複数の数値を入れたとき, 10~20の数値ならその隣のセルに○(丸) 最高値ならその隣のセルに◎(二重丸) をつける方法はありますか? よろしくお願いします.

  • Excelのマクロを使ってワークシート1にワークシート2のセルの値をコ

    Excelのマクロを使ってワークシート1にワークシート2のセルの値をコピーするマクロを作りたいと思っています。 例えば、ワークシート2のA1~A30のセルには1~30の値が順に入っているとします。 それをA1から3の倍数分、つまりA1,A3,A6,A9,・・・,A27,A30の値を ワークシート1のA1~A11のセルに自動で挿入してくれるマクロってどう作ればいいのでしょうか? わかりにくいかもしれませんが、よろしくお願いします。

  • EXCELのすべてのシートから特定セルの値だけを別のシートに書き出すには

    excelのマクロで別のEXCELファイルを選択して、たとえば、A3、E4、F10のセルの値だけをそのファイル内のシートすべて(シート数は変化)に対して別のEXCELファイルの1シートに各項目としてまとめて書き出すマクロを教えて下さい。 宜しくお願いします。

  • エクセルでセルの値が0になってしまいます

    エクセル2010を97互換モードで使っていますが以下の状況が起こっており原因がわかりません。 シート1のセルの式:='見積書(一般)'!E35:G35 その値:107,700 シート2のセルの式:='見積書(一般)'!E35:G35 その値:0 つまり、見積書(一般)というシートの同じセルの値をシート1、シート2に引いてくるだけなのにシート2の方はなぜか0になってしまうのです。どちらも表示形式は通貨です。 試しに見積書(一般)の別のセルに値を入れ、そのセルを参照させるとシート2でも正常に値が表示されます。 参照元(見積書(一般))のセルは連結されています。 原因と解決方法を教えてください。

専門家に質問してみよう