仅使用VBA将以文本forms存储的小时和分钟转换为分钟

我有一个列包含不同的时间,即1小时,2小时30分钟,30分钟等我需要将这些转换成分钟。 我的想法是检查字符的数量,然后做一个删除。

例如1小时是3个字符,所以如果检查发现3个字符删除最后的字符,* 60,这将使我转换到分钟。

我已经研究了这个问题,这是我的代码。 在这一刻,我只是试图让它改变细胞的颜色取决于它里面的字符的数量。 这看起来对我来说是正确的,但显然缺less一些东西。

提前致谢!

Sub lenCheck() Dim rng As Range Dim x As Integer Dim sht As Worksheet Set sht = Worksheets("Sheet2") x = sht.Cells(Rows.Count, "G").End(xlUp).Row For Each rng In sht.Range("G200:G" & x).Cells If Len(rng.Value) = 3 Then rng.EntireRow.Cells(1).Interior.Color = vbYellow ElseIf Len(rng.Value) = 4 Then rng.EntireRow.Cells(1).Interior.Color = vbGreen ElseIf Len(rng.Value) = 5 Then rng.EntireRow.Cells(1).Interior.Color = vbRed ElseIf Len(rng.Value) = 6 Then rng.EntireRow.Cells(1).Interior.Color = vbBlue End If End Sub 

如果要将这些string转换为分钟,并且它们将采用上面显示的各种格式,则build议使用正则expression式来提取组件,然后进行适当的加法/乘法运算。

下面的VBAmacros对于以下任何一个标签来看:小时分钟(任何复数是不相关的); (可以添加其他标签),然后返回分钟数:它search列A,但很容易更改

如果你有不同的模式比你列出的,他们可能也可以纳入正则expression式以最小的努力(和最小的代码更改)

要使用这个algorithm作为一个macros,它将转换列A的内容包含小时,分钟或两者,试试这个:(注意,“工作”是在一个数组中完成,如果你有一个大的数据集,将比多次调用范围来回工作表更快)

====================================

 Option Explicit Sub ConvertToMinutes() Dim RE As Object, MC As Object Dim MN As Long Dim S As String Dim vSrc As Variant, rSrc As Range Dim I As Long 'Many ways to set the source data depending on your real setup Set rSrc = Range("a1", Cells(Rows.Count, "A").End(xlUp)) vSrc = rSrc Set RE = CreateObject("vbscript.regexp") With RE .Pattern = "(?:(\d+(?:\.\d+)?(?=\s*(?:hr|hour))))\D*(\d+(?=\s*min))?|(\d+(?=\s*min))" .Global = True .ignorecase = True For I = 1 To UBound(vSrc, 1) S = vSrc(I, 1) If .test(S) = True Then Set MC = .Execute(S) With MC(0) MN = .submatches(0) * 60 + .submatches(1) + .submatches(2) End With vSrc(I, 1) = MN End If Next I End With rSrc = vSrc End Sub 

==================================

顺便说一句,这里是一个屏幕截图的结果运行上面的macros反对你在这里发布的所有不同的格式。 它似乎工作,但也许有一些我错过了你的真实数据。

在这里输入图像说明