vbaで自動で打ち込まれるものに続いて計算を行いたい【初心者】
解決したいこと
データロガーを用いて計測を行い、計測データが自動でExcel上に打ち込まれます。
打ち込まれたデータから一定以上の値になったものを判別し、並べるというものを作製しています。
しかし、自動で打ち込まれるものの計算をvbaでどのように行えばよいかわからず質問をさせていただきます。
具体的な説明
図のようにABC列に一行ずつデータロガーで読み込んだものが記入されていきます。
下記のプログラムではすでに書き終わったものでしか、動作することができず読み込みながら計算を行えません。
行っている計算自体はとてもシンプルですので計算時間はそこまで必要しないと考えられます。
サンプリング周期によって空白と判断されているのだと考察していますが、どう解決すればよいか見当もつきません。
vba触りたての初心者ですのでご教授いただければと思います。
現状作製したソースコード
Option Explicit
Sub test()
Dim i, j
Dim samp_time, time_now, time_border '//時間関連
Dim over, over_bef, interval '// 基準よりも上関連
Dim volt, volt_bef '//電圧関連
Dim avr, std, avst '//平均値+標準偏差
volt_bef = over_bef = 0
i = 1
j = 5
samp_time = Cells(1, 6)
time_border = 5000
Dim ws As Worksheet
Set ws = ActiveSheet
Cells(1, 5) = "サンプリング周期(ms)"
Cells(2, 5) = "平均値+標準偏差"
Cells(4, 5) = "time(ms)"
Cells(4, 6) = "interval(ms)"
Cells(4, 7) = "volt(V)"
'//サンプリング周期の計算
Cells(1, 6) = (Cells(2, 2) - Cells(1, 2)) / 1000
Do
'// 値の取得
time_now = (i - 1) * Cells(1, 6) '//計測時間
volt = Cells(i, 3) '//電圧
'//取得する値の基準(平均値+標準偏差)
If time_now = time_border Then
avr = Application.WorksheetFunction.Average(Range(Cells(1, 3), Cells(i, 3)))
std = Application.WorksheetFunction.StDev(Range(Cells(1, 3), Cells(i, 3)))
avst = avr + std
Cells(2, 6) = avst
End If
'//基準より上の値を取得
If time_now > time_border And volt > avst And volt_bef < avst Then
over = time_now
interval = over - over_bef
over_bef = over
'//短すぎるものを除去
If interval > 400 / samp_time Then
Cells(j, 5) = time_now
Cells(j, 7) = volt
Cells(j, 6) = interval
j = j + 1
End If
End If
'//もし空白であればマクロ終了
If volt = "" Then
Exit Do
End If
DoEvents: DoEvents: DoEvents
i = i + 1
volt_bef = volt
Loop
End Sub