String 存储为字符串的运行时表,该字符串被转换为被操纵并转换回的值

String 存储为字符串的运行时表,该字符串被转换为被操纵并转换回的值,string,vba,excel,type-conversion,String,Vba,Excel,Type Conversion,我在excel工作表中保存运行日志,该工作表是较大练习工作簿的一部分。我正在尝试设置工作表,这样我就不必在每次进入新跑步时都手动计算。我输入并希望工作表为我计算未完成的圈数(我的跑步者观看的最后一英里后的跑步部分不会给我一圈时间,比如说.25英里)我使用了一个奇怪的时间符号,如果必要的话,我愿意更改,但我最关心的是它的可读性,所以我不想将它更改为使excel工作更容易的东西,但当我查看我的跑步记录时,它会困扰我。下面是它的外观: Date Distance TotTime Avg Time

我在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"
我要做的是,对于UnfNLAP列中的每个单元格,我希望它将总时间转换为一个值,转换并减去每个圈时间,然后最终将其转换回我选择的格式的字符串。而且跑步的长度不同,因此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

如果有更简单的解决方案,或者有人能指出我做错了什么,我会非常感激。

您根本不需要VBA

要从
m'ss”
(在
A1
中)转换为Excel时间的Excel公式:

=TIMEVALUE("0:"&SUBSTITUTE(SUBSTITUTE(A1;"'";":");"""";""))
从Excel时间(在
B1
中)转换为
m'ss“
的Excel公式:


使用这些函数,您可以对Excel时间进行算术运算。

我必须对此进行处理,以说明我的跑步长度不同(即,一次跑步可能有6.2英里,信息分为6列;另一次跑步可能有2.3英里,只有两列信息),但这无疑为我指明了正确的方向。这是一个简单得多的解决方案,谢谢。不幸的是,我对如何使用excel知之甚少,我一直在尝试用它做一些我知道可以做的事情,但我拒绝放弃寻找解决方案的尝试。再次感谢!
=TEXT(B1;"[m]'ss")&""""