我在excel工作表中保存一个正在运行的日志,该工作表是更大的练习工作簿的一部分。我正在尝试设置工作表,所以每次进入新运行时我都不必手动进行数学运算。我进入并希望工作表为我计算未完成的一圈(我跑步者观看的最后一英里之后的跑步部分不会给我一圈时间,比如说.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
如果有一个更简单的解决方案,或者任何人都可以指出我做错了什么,我将非常感激。
答案 0 :(得分:0)
你根本不需要VBA。
Excel公式,可以从m'ss"
(A1
)转换为Excel时间:
=TIMEVALUE("0:"&SUBSTITUTE(SUBSTITUTE(A1;"'";":");"""";""))
Excel公式,用于将Excel时间(B1
)转换为m'ss"
:
=TEXT(B1;"[m]'ss")&""""
使用这些功能,您可以使用Excel进行算术运算。