所以我在工作表上遇到了一个问题,非常简单,非常简单,只是我以前没用过的东西。我已经做了一些研究,但是我无法使我的代码正确,而且我认为我已经碰到那堵墙了,我只是以不同的方式继续尝试同样的事情。
总之。我们从网站导入时间表,它被保存为excel。 'B'列具有我们需要复制到不同工作表的所有时间。 (我已经处理了部分代码)。时间显示如下:
~~~~~~~~~~~~~~~
30m
15m
1h 30m
1h
15m
30m
30m
15m
1h
1h 30m
~~~~~~~~~~~~~~~~
第一个问题是我们使用的程序不是1)像h / m字符,2)不喜欢15/30/45格式(它喜欢.25,.5 .75,十进制表示)。
所以我首先尝试划分,虽然在分钟部分有点成功,但在处理小时部分时,它只是将所有内容都吹过'h',I。我的1小时30分变成了1。
我需要帮助的是如何在B列上浏览这些行,拆分然后以我们需要的格式重新组合信息,这样看起来像
旧需要这种格式
~~~~~~~~~~~~~~~
30米-----> 0.5
15米-----> 0.25
1小时30分钟 - > 1.5
1h ------> 1.0
15米----> 0.25
30米----> 0.5
30米----> 0.5
15米----> 0.25
1h ------> 1.0
1小时30分钟 - > 1.5
~~~~~~~~~~~~~~~~
我有大部分其他我需要的东西,只是划界是我没有搞砸的东西,而且我没有任何好的简单例子可以帮助学习。
先谢谢你。这个论坛非常精彩,充满了知识渊博和知识渊博的人,并且极大地帮助了我和我的编码能力。
答案 0 :(得分:2)
以下函数将在空格处分割输入,然后计算值(如果后跟“h”)或值/ 60(如果后跟“m”):
Function HoursAndMins(inValue As String) As Double
Dim str
Dim part
Dim result As Double
str = Split(inValue, " ")
For Each part In str
Select Case LCase(Right(part, 1))
Case "h"
result = result + CDbl(Left(part, Len(part) - 1))
Case "m"
result = result + CDbl(Left(part, Len(part) - 1)) / 60
End Select
Next
HoursAndMins = result
End Function
可以从VBA调用它,例如:
Dim answer As Double
answer = HoursAndMins("1h 30m")
或作为:
Dim answer As Double
answer = HoursAndMins(Range("B1").Value)
或者可以在Excel中使用
=HoursAndMins(B1)
(假设单元格B1包含类似1h 30m
)
注意:如果 想要将其用作Excel公式,Scott将为您提供更好的公式,以便您不需要将其用作UDF。
答案 1 :(得分:1)
这取值是B列,并将它们的十进制等值放在C列的同一页上。
Sub convert()
Dim outarr As Variant
Dim arr As Variant
Dim i As Long
Dim splt() As String
With Worksheets("Sheet15") ' change to your sheet
arr = .Range("B1", .Cells(.Rows.Count, 2).End(xlUp)).Value
ReDim outarr(1 To UBound(arr), 1 To 1)
For i = LBound(arr) To UBound(arr)
arr(i, 1) = Replace(arr(i, 1), "m", "")
arr(i, 1) = Replace(arr(i, 1), "h", "|")
arr(i, 1) = Replace(arr(i, 1), " ", "")
splt = Split(arr(i, 1), "|")
If UBound(splt) > 0 Then
outarr(i, 1) = CDbl(splt(0)) + CDbl(IIf(splt(1) = "", 0, splt(1))) / 60
Else
outarr(i, 1) = CDbl(splt(0)) / 60
End If
Next i
.Range("C1").Resize(UBound(arr), 1).Value = outarr
End With
End Sub
在不使用vba的情况下执行所需操作的公式:
=IFERROR(--TRIM(SUBSTITUTE(LEFT(SUBSTITUTE(SUBSTITUTE("h" & B1,"h",REPT(" ",999),LEN("h" & B1)-LEN(SUBSTITUTE("h" & B1,"h",""))),"m",""),999),"h","")),0)+ IFERROR(--TRIM(RIGHT(SUBSTITUTE(SUBSTITUTE("h" & B1,"h",REPT(" ",999),LEN("h" & B1)-LEN(SUBSTITUTE("h" & B1,"h",""))),"m",""),999))/60,0)
列C是vba的输出,列D是公式的输出: