こんにちわ。
いつも諸先輩方に教えて頂きありがとうございます。
感謝しております。
早速ですが以下のようなVBを教えてもらいまして、
C3のセルにリアルタイムで変化する数字があります。
それを、3秒おきに時間とともにC6から順に記録して
1分間溜まったら、
E6に時間、
F6その1分間の最初の値、
G6にその1分間での最高値
H6にその1分間での最低値
I6にその1分間での最後の値
が順番に記録されるようになっております。
このマクロを改正して、
(1)1秒感覚でC3から下へ順に記録。
(2)5分間隔でE6^I6に4種の値を下へ順に記録
(このデータはずっと起動している間は下へ記録し続けたいです)
というように変更したいのですがうまくいかず、四苦八苦しておりました。
お忙しいところ申し訳ありませんが、
ヒントなるものでも結構ですので教えて頂ければ幸いです。
以上宜しくお願いいたします。
UNO
=========================================================
Option Explicit
Public STOP_B As Boolean
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub ストップ()
STOP_B = False
End Sub
Sub スタート()
Dim i As Integer
Dim t As Integer
Dim n As Integer
Dim R As Range
Dim timenow As Variant
i = 6
n = 6
STOP_B = True
Do While True
t = 0
timenow = Format(Now(), "HH:mm")
While t < 300
Call Sleep(10)
DoEvents
t = t + 1
Wend
If timenow = Format(Now(), "HH:mm") Then
Sheet1.Cells(i, 3).Value = Sheet1.Range("C3").Value
i = i + 1
Else
Sheet1.Cells(n, 5).Value = timenow
Sheet1.Cells(n, 6).Value = Sheet1.Cells(6, 3).Value
Set R = Sheet1.Range(Sheet1.Cells(6, 3), Sheet1.Cells(i, 3))
Sheet1.Cells(n, 7).Value = WorksheetFunction.Max(R)
Sheet1.Cells(n, 8).Value = WorksheetFunction.Min(R)
Sheet1.Cells(n, 9).Value = Sheet1.Cells(i - 1, 3).Value
Sheet1.Range(Sheet1.Cells(6, 3), Sheet1.Cells(i, 3)).Clear
i = 6
Sheet1.Cells(i, 3).Value = Sheet1.Range("C3").Value
i = i + 1
n = n + 1
End If
If STOP_B = False Then
Exit Sub
End If
Loop
End Sub
Function xSleep(ByVal dwMilliseconds As Long)
Call Sleep(dwMilliseconds)
End Function
=====================================================
No.1ベストアンサー
- 回答日時:
Sub スタート()
Dim i As Integer
Dim t As Integer
Dim n As Integer
Dim R As Range
'Dim timenow As Variant
Dim timenow As Date
i = 6
n = 6
STOP_B = True
' 5分後の時刻を算出
timenow = DateAdd("n", 5, Now())
Do While True
t = 0
'timenow = Format(Now(), "HH:mm")
' 1秒間ウェイト
While t < 10
Call Sleep(100)
DoEvents
t = t + 1
Wend
'If timenow = Format(Now(), "HH:mm") Then
' 5分後の時刻に達していない場合
If DateDiff("s", timenow, Now) < 0 Then
Sheet1.Cells(i, 3).Value = Sheet1.Range("C3").Value
i = i + 1
Else
Sheet1.Cells(n, 5).Value = timenow
Sheet1.Cells(n, 6).Value = Sheet1.Cells(6, 3).Value
Set R = Sheet1.Range(Sheet1.Cells(6, 3), Sheet1.Cells(i, 3))
Sheet1.Cells(n, 7).Value = WorksheetFunction.Max(R)
Sheet1.Cells(n, 8).Value = WorksheetFunction.Min(R)
Sheet1.Cells(n, 9).Value = Sheet1.Cells(i - 1, 3).Value
Sheet1.Range(Sheet1.Cells(6, 3), Sheet1.Cells(i, 3)).Clear
i = 6
Sheet1.Cells(i, 3).Value = Sheet1.Range("C3").Value
i = i + 1
n = n + 1
' 5分後の時刻を算出
timenow = DateAdd("n", 5, Now())
End If
If STOP_B = False Then
Exit Sub
End If
Loop
End Sub
ウェイトはSleep(10)だと精度が甘いので、Sleep(100)にしました。
他の変更箇所はコメントにて。
これで合ってるかどうかは分かりませんが・・・。
Wizard_Zeroさま
早速のご回答ありがとうございます!
1秒、5分おきに記録できるようになりました^^
しかし、Eの列に日付と時間が記録されるようになっているのですが
1時間ほど起動させておくと止まってしまうようです・・・
大変申し訳ありませんが
起動させている間は永遠に記録できるようにすることは
可能なのでしょうか??
No.3
- 回答日時:
コードの中身はよく見ていないのですが
気になった点を。
While t < 300
Call Sleep(10)
DoEvents
t = t + 1
Wend
上の例だとおよそ4.8秒になると思います。
下記の例ではおよそ3秒になると思います。
(約16ミリ秒の倍数でしか取得できないため。)
While t < 30
Call Sleep(90) '80-95くらい
DoEvents
t = t + 1
Wend
詳細は省きますが、簡単に言うと高精度で取得するには
もうちょっと込み入ったことを追加しなければなりません。
Dream cat さま
返答が遅くなり申し訳ありません。
確かに若干秒数にずれがありました。
もっと勉強して改善していきたいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
VB.NETでコンボボックスの1行目...
-
マクロ 特定のセル値のみクリ...
-
【C++/CLI.NET】コンボボックス...
-
PL/SQLでのTO_DATEの時間取得に...
-
VB初心者。小数点以下の表示で...
-
IP Address Controlから値を取...
-
DataTableに対するLINQについて
-
変数に代入してある数値を表示...
-
fscanfでC言語の空欄を読んだ場...
-
ISDBNULLをスルーしてDBNULLが...
-
OracleでRecordCountが正しくな...
-
コンボボックスを読み取り専用...
-
RGB値をL*a*b*に変換したい
-
VB6.0でINIファイルからデータ...
-
エクセルユーザーフォームの日...
-
AccessVBA 帳票フォームの非連...
-
DATファイルが読めません(VB・...
-
[VB.net] DataGridViewのコンボ...
-
ユーザーフォームのテキストボ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
マクロ 特定のセル値のみクリ...
-
Geogebraの操作方法について
-
VB.NETでコンボボックスの1行目...
-
VB初心者。小数点以下の表示で...
-
変数名の取得
-
値を返さないコード パス
-
【C++/CLI.NET】コンボボックス...
-
Excel VBAのリストボックスの値...
-
PL/SQLでのTO_DATEの時間取得に...
-
Powershellのparamについて
-
vbaの繰り返しで求める最大値に...
-
C#の質問です
-
VBA ドロップダウンリストを残...
-
VBA(自然数)
-
シーケンサで最小値を保持する
-
[VBA]選択範囲の下から上に処理...
-
vbscriptを使いexcelを参照して...
-
[VB.net] DataGridViewのコンボ...
-
変数に代入してある数値を表示...
おすすめ情報