AA列:ラップタイムが入力されてから何秒経過したか
以下、AA2での例です。
=$AD$1-AH2
仕組みは後述しますが、AD1セルには現在時刻が10秒おきに更新されるタイマーがあります。
そのAD1から、ラップタイムを入力した時刻が記録されているAH列を引くことで、入力されてからどれだけの時間が経過したかを算出しています。これ大事。
AB列:現在の予想周回数
さていよいよシステムの肝部分登場です。
以下、AB2での例。
=L2+(X2+AA2)/Z2
L2は手入力した周回数が記録されているセルです。
X2+AA2で、見た時点でコース上を進んでいた秒数と、さらにそれから進んだであろう(AA2)秒を足します。
それを1周の基準タイム(Z2)で割ることで、◯周進んだだろう、と仮説が立ちます。
これに今まで走った周回数(L2)を足すことで、現在の予想周回数が出るわけです。
これのおかげで、毎LAP周回数を更新できなくても、今おおよそ何周走ったかが自動で出せるわけですね。
AC列:レーススタート時刻
それ以上でもそれ以下でもありません。
AD列:現在時刻(10秒おきに更新)
AB列の周回数を自動で更新させるためには、このタイマーが自動で更新されなければいけません。
というわけで、以下VBAのコード。Moduleに記述。
Private ResTime As Date
Sub RegularInterval()
ResTime = Now + TimeValue("00:00:10")
Application.OnTime EarliestTime:=ResTime, _
Procedure:="RegularInterval"
DoEvents
test01
End Sub
Sub test01()
Dim A
A = Format(Time, "hh:mm:ss")
Worksheets("集計用").Cells(1, 30) = A
End Sub
これは他の方が紹介されていたコードを参考にさせていただいたので細かいことはわかりません。
これでなんかうまくいってます。
AH列:ラップタイム入力時の時刻を記録
先述の通り。
AI~AJ列:配信、ドライバーネーム管理用
配信に使うために必要なデータを記録しただけで、集計システムには関係ありません。
お気になさらず。
以上が集計シートの解説です。
配信に使う部分はVLOOKUPなどをうまく使い、好きな形にすればいいかと思います。
その他、このシステムを使うにあたって便利なVBAコードを載せておきます。
20秒おきに保存してくれるシステム
配信上でリアルタイムに順位を反映させるためには、適宜保存をしてHTMLを更新しなければいけません。
いちいち手動で保存をしてもいいのですが、自動化させておくと便利です。
ただしデメリットとしては、保存後に「元に戻す」機能を使うことはできません。
万が一間違えて消してしまったりするともう一度手入力になってしまうので、保存の間隔には注意が必要ですし、本番以外ではオフにしておくことをおすすめします。
Moduleに記載。私は20秒間隔にしてますが、タイムをいじれば好きな間隔にできます。
Sub hozon()
ActiveWorkbook.Save
Application.OnTime Now + TimeValue("00:00:20"), "Hozon"
End Sub
起動時にマクロを自動で動かし始める
「ThisWorkbook」に、自動で動かしたいマクロの名前を書けばOKです。私はこうしてます。
Private Sub workbook_open()
Call RegularInterval2
Call RegularInterval
Call RegularInterval3
Call hozon
End Sub
RegularInterval2と3は登場していませんが、これは配信画面に載せるオーバーオールの順位表において、チーム名の長さに合わせてセルの幅を自動で調整させるモジュールです。
予めセルの幅を決め打ちできればこれは必要ないんですが、順位変動があるとそうもいかないので、見栄えのために(本家IMSAに近づけるために)使ってます。
本家IMSAの順位表は、チーム名の長さに合わせて幅が変わってるんですよねー