0

大きなエクササイズ ワークブックの一部である Excel ワークシートに実行ログを記録しています。新しい実行に入るたびに手動で計算する必要がないように、ワークシートを設定しようとしています。を入力し、ワークシートで未完のラップを計算するようにします (ランナーが見ている最後の 1 マイルの後のランの部分は、たとえば 0.25 マイルのラップ タイムを提供しません)。必要に応じて変更しても構わないと思っている時間ですが、読みやすさに最も関心があるので、Excel の作業を容易にするものに変更したくありませんが、実行を見ているときに気になります。これは次のようになります。

Date  Distance  TotTime  Avg Time  1      2      3  4  5  6  7  8  9  10  UnfinLap
10/2  2.3 mi    19'35"   8'31"     8'28"  8'53"                           2'14"

私がやりたいのは、UnfinLap 列の各セルに対して、合計時間を値に変換し、各ラップ時間を変換して減算し、最後に選択した形式の文字列に変換することです。また、ランの長さはさまざまであるため、5.2 マイルのランには値を含む 5 つの列があります。私は Excel や VBA の経験はあまりありませんが、プログラミングの経験があり、学ぶのはかなり早いので、このためのマクロを作成しようとしましたが、あまり成功しませんでした。

Sub Lap_Time_Function()
'
' Lap_Time_Function Macro
' This converts the times to value, does the math then converts back
'
    ' Variable Declarations
    Dim TotMins As Integer
    Dim TotSecs As Integer
    Dim LapMins As Integer
    Dim LapSecs As Integer
    Dim LoopCounter As Integer
    Dim UnfinishedLap As String
    Dim wb As Workbook
    Dim ws As Worksheet

    ' Initial values set
    LoopCounter = 7
    TotMins = WorksheetFunction.Value(WorksheetFunction.Left(Cells(ActiveCell.Row, 2), 2))
    TotSecs = WorksheetFunction.Value(WorksheetFunction.Mid(Cells(ActiveCell.Row, 2), 4, 2))
    wb = ActiveWorkbook
    ws = wb.Sheets("Run Log")

    ' Calculate time of unfinished lap by subtracting current finished lap from total time
    Do While Not IsEmpty(Cells(ActiveCell.Row, LoopCounter))
        LapMins = WorksheetFunction.Value(WorksheetFunction.Left(Cells(ActiveCell.Row, LoopCounter), 2))
        LapSecs = WorksheetFunction.Value(WorksheetFunction.Mid(Cells(ActiveCell.Row, LoopCounter), 4, 2))
        TotMins = TotMins - LapMins
        TotSecs = TotSecs - LapSecs
        LoopCounter = LoopCounter + 1
    Loop

    UnfinishedLap = CStr(TotMins) & CStr(Chr(39)) & CStr(TotSecs) & CStr(Chr(34))
    Cells(ActiveCell.Row, 17) = UnfinishedLap

End Sub

より簡単な解決策がある場合、または誰かが私が間違っていることを指摘できる場合は、大いに感謝します。

4

1 に答える 1