我在作为更大练习工作簿的一部分的 Excel 工作表中保留了运行日志。我正在尝试设置工作表,因此每次进入新运行时我都不必手动进行数学运算。我输入并希望工作表为我计算未完成的圈数(我的跑步者观看的最后一英里之后的跑步部分不会给我一圈时间,比如 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
如果有更简单的解决方案或者任何人都可以指出我做错了什么,我将不胜感激。