从字符串中提取数字和单词组合的Excel公式

从字符串中提取数字和单词组合的Excel公式,excel,string,excel-formula,Excel,String,Excel Formula,我正试图从包含字符串的单元格中增加“##秒”或“##分钟” 串 期望输出 快走30秒 30秒 慢跑9分钟 9分钟 快跑1分钟 1分钟 那么: 因此,您可以轻松粘贴它: IFERROR(TRIM(MID(A3,FIND("min",A3,1)-3,10)),TRIM(MID(A3,FIND("sec",A3,1)-3,10))) iferror先尝试分钟,然后尝试秒。 Trim根据数字是一位数还是两位数,去掉前导空格或尾随空格。 Mid()和find()

我正试图从包含字符串的单元格中增加“##秒”或“##分钟”

串 期望输出 快走30秒 30秒 慢跑9分钟 9分钟 快跑1分钟 1分钟 那么:

因此,您可以轻松粘贴它:

IFERROR(TRIM(MID(A3,FIND("min",A3,1)-3,10)),TRIM(MID(A3,FIND("sec",A3,1)-3,10)))
iferror先尝试分钟,然后尝试秒。 Trim根据数字是一位数还是两位数,去掉前导空格或尾随空格。 Mid()和find()切掉想要的部分。我只使用“分钟”和“秒”来代替“分钟”等,就好像有一个拼写错误“minites”,例如,它不会被找到

把它拆开,看看每一位……

怎么样:

因此,您可以轻松粘贴它:

IFERROR(TRIM(MID(A3,FIND("min",A3,1)-3,10)),TRIM(MID(A3,FIND("sec",A3,1)-3,10)))
iferror先尝试分钟,然后尝试秒。 Trim根据数字是一位数还是两位数,去掉前导空格或尾随空格。 Mid()和find()切掉想要的部分。我只使用“分钟”和“秒”来代替“分钟”等,就好像有一个拼写错误“minites”,例如,它不会被找到


将其拆开以查看每个位…

考虑以下用户定义的函数:

Option Explicit
Public Function durration(s As String) As String
    Dim t As String, arr, i As Long
    t = LCase(s)
    durration = ""
    
    If InStr(t, "minute") = 0 Then
        If InStr(t, "second") = 0 Then
            Exit Function
        End If
    End If
    
    arr = Split(s, " ")
    For i = LBound(arr) + 1 To UBound(arr)
        t = LCase(arr(i))
        If t = "minute" Or t = "minutes" Or t = "second" Or t = "seconds" Then
            durration = arr(i - 1) & " " & arr(i)
            Exit Function
        End If
    Next i
End Function

用户定义函数(UDF)非常易于安装和使用:

  • ALT-F11将显示VBE窗口
  • ALT-I ALT-M打开一个新模块
  • 粘贴内容并关闭VBE窗口
  • 如果保存工作簿,则自定义项将与工作簿一起保存。 如果在2003年以后使用Excel版本,则必须保存 文件的格式为.xlsm而不是.xlsx

    要删除自定义项,请执行以下操作:

  • 如上所述打开VBE窗口
  • 清除代码
  • 关闭VBE窗口
  • 使用Excel中的自定义项,请执行以下操作:

    =durration(a1)
    
    要了解有关宏的更多信息,请参阅:

    有关自定义项的详细信息,请参见:


    必须启用宏才能工作

    考虑以下用户定义的函数:

    Option Explicit
    Public Function durration(s As String) As String
        Dim t As String, arr, i As Long
        t = LCase(s)
        durration = ""
        
        If InStr(t, "minute") = 0 Then
            If InStr(t, "second") = 0 Then
                Exit Function
            End If
        End If
        
        arr = Split(s, " ")
        For i = LBound(arr) + 1 To UBound(arr)
            t = LCase(arr(i))
            If t = "minute" Or t = "minutes" Or t = "second" Or t = "seconds" Then
                durration = arr(i - 1) & " " & arr(i)
                Exit Function
            End If
        Next i
    End Function
    

    用户定义函数(UDF)非常易于安装和使用:

  • ALT-F11将显示VBE窗口
  • ALT-I ALT-M打开一个新模块
  • 粘贴内容并关闭VBE窗口
  • 如果保存工作簿,则自定义项将与工作簿一起保存。 如果在2003年以后使用Excel版本,则必须保存 文件的格式为.xlsm而不是.xlsx

    要删除自定义项,请执行以下操作:

  • 如上所述打开VBE窗口
  • 清除代码
  • 关闭VBE窗口
  • 使用Excel中的自定义项,请执行以下操作:

    =durration(a1)
    
    要了解有关宏的更多信息,请参阅:

    有关自定义项的详细信息,请参见:


    必须启用宏才能工作

    -获取字符串中第一个数字的位置:

        AGGREGATE(15,6,FIND(ROW($1:$9),A1 & " "),1)
    
        AGGREGATE(15,6,FIND(" ",A1&" ",SEARCH({"second","minute"}, A1&" ")),1)
    
    -获取字符串中
    分[s]或秒[s]
    后的空格索引:

        AGGREGATE(15,6,FIND(ROW($1:$9),A1 & " "),1)
    
        AGGREGATE(15,6,FIND(" ",A1&" ",SEARCH({"second","minute"}, A1&" ")),1)
    
    使用MID函数,此公式适用于我:

        =MID(A1 & " ",AGGREGATE(15,6,FIND(ROW($1:$9),A1 & " "),1),
                      AGGREGATE(15,6,FIND(" ",A1&" ",SEARCH({"second","minute"}, A1&" ")),1)- 
                      AGGREGATE(15,6,FIND(ROW($1:$9),A1 & " "),1)
            )
    


    -使用
    A1&“
    的原因是为了避免在
    分[s]或秒[s]后不存在空格

    -获取字符串中第一个数字的位置:

        AGGREGATE(15,6,FIND(ROW($1:$9),A1 & " "),1)
    
        AGGREGATE(15,6,FIND(" ",A1&" ",SEARCH({"second","minute"}, A1&" ")),1)
    
    -获取字符串中
    分[s]或秒[s]
    后的空格索引:

        AGGREGATE(15,6,FIND(ROW($1:$9),A1 & " "),1)
    
        AGGREGATE(15,6,FIND(" ",A1&" ",SEARCH({"second","minute"}, A1&" ")),1)
    
    使用MID函数,此公式适用于我:

        =MID(A1 & " ",AGGREGATE(15,6,FIND(ROW($1:$9),A1 & " "),1),
                      AGGREGATE(15,6,FIND(" ",A1&" ",SEARCH({"second","minute"}, A1&" ")),1)- 
                      AGGREGATE(15,6,FIND(ROW($1:$9),A1 & " "),1)
            )
    


    -使用
    A1&“
    的原因是为了避免在
    分钟或秒之后出现不存在的空格。

    嗯,在功能上与我的类似,但似乎需要更多的键入…嗨@SolarMike,你是对的,看起来我把它复杂化了=)尽管聚合非常灵活,但必须更多地使用它。嗯,在功能上与我的类似,但似乎更多的是打字……您好@SolarMike,您是对的,看起来我把它复杂化了=)虽然聚合是如此灵活,但必须更多地使用它。@Gary的学生好吧,我想说这是一个“暴力”方法,但无论如何谢谢:)就像您的UDF一样,我假设“持续时间”是保留的,所以您使用了它“durration”?我真的很喜欢你的公式。你是对的
    duration()
    是一个标准的Excel函数。Solar Mike:你搞定了。我修改了公式,以便查找术语(秒、分钟、小时等)这是一个修改过的公式,列表是一系列要查找的单词:=IFERROR(TRIM(MID(A1,FIND)(INDEX(list,MATCH(1,COUNTIF(A1,“&list&”),0)),A127,1)-3,10)),“@Gary的学生好吧,我想说这是一个“暴力”方法,但无论如何还是要感谢:)就像你的UDF一样,我假设”“duration”是保留的,所以你使用了“duration”?我真的很喜欢你的公式。你是正确的
    duration()
    是一个标准的Excel函数。Solar Mike:你搞定了。我修改了公式,以便我可以查找术语(秒、分钟、小时等)这是一个修改过的公式,列表是要查找的单词范围:=IFERROR(TRIM(MID(A1,FIND)(INDEX(list,MATCH(1,COUNTIF(A1,“&list&”),0)),A127,1)-3,10)),“”)