我从表上花了一些时间在花格式。我想将它们添加到Excel工作表中并取它们的总和。
时间格式为
seperator
和
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="seperator"/>
<xsl:template match="node/text()[preceding-sibling::seperator or following-sibling::seperator]">
<xsl:element name="{name(..)}">
<xsl:copy-of select="../@*|."/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
我需要的总和是
1h 30m
默认情况下是否有任何公式?如果没有,有人可以帮我吗?
答案 0 :(得分:1)
尝试一下:
=TIMEVALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1," ",":"),"h",""),"m",""))
需要将时间解析为原始数字...这可以通过left()和mid()完成,但是我认为嵌套的Substitute()调用使其更具可读性。
由内而外,
1.将“”更改为冒号,然后将结果传递到下一级
2.将“ h”更改为“”(即删除“ h”),将结果传递到下一级
3.将“ m”更改为“”(即删除“ m”),将结果传递到下一级
4.结果是一个文本值,需要将其转换为TIMEVALUE。
您需要将时间单元格的格式设置为hh:mm,
总数是上面单元格的sum()。
祝你好运。
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以使用用户定义的函数轻松地执行此操作。下图显示了顶部两个单元格中最接近您的示例,底部单元格中的公式为=sumhm(a1:a2)
:
执行此操作的代码相对简单:
Option Explicit
Function sumhm(rng As Range)
Dim pos As Integer
Dim cell As Range
Dim str As String
Dim minutes As Long
' Process each cell in the range '
minutes = 0
For Each cell In rng
' Get string from cell, work out minutes, add to tally '
str = cell.Text
pos = InStr(1, str, "h")
If pos > 0 Then
minutes = minutes + 60 * CInt(Left(str, pos - 1))
str = Mid(str, pos + 1)
End If
pos = InStr(1, str, "m")
If pos > 0 Then
minutes = minutes + CInt(Left(str, pos - 1))
End If
Next
' All done, revert to XhYm format '
sumhm = CStr(Int(minutes / 60)) & "h" & CStr(minutes Mod 60) & "m"
End Function
使用UDF的好处是,您可以获取任意复杂的范围(例如C5:D9,G9:H16,B14:D18
),并且可以正常工作。
它也集中了它,因此在一个地方可以修复诸如用户通过在字符串中放置空格来使自己的生活陷入困境之类的问题。或您在实现中可能发现的任何错误(或可能需要的增强功能,例如处理3y7w2d9h33m
之类的错误)。