我有一列包含不同的时间量,即1小时、2小时30分钟、30分钟等。我需要将它们转换为分钟。我的想法是检查字符数,然后进行删除。
例如 1 小时是 3 个字符,因此如果检查发现 3 个字符,请删除最后一个字符 * 60,这会将我转换为分钟。
我已经研究了这个问题,这是我的代码。目前我只是想让它根据其中的字符数量来改变单元格颜色。这对我来说看起来很正确,但显然缺少一些东西。
提前致谢!
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
最佳答案
如果您想将这些字符串转换为分钟,并且它们将采用上面所示的各种格式,我建议使用正则表达式来提取组件,然后进行适当的加法/乘法。
以下 VBA 宏查找标签、以下任何一项: hr hour min (任何复数 s 都不相关); (可以添加其他标签),然后返回分钟数:它搜索 A 列,但很容易更改
如果您的模式与所列出的模式不同,它们也可以通过最少的努力(和最少的代码更改)合并到正则表达式中
要将此算法用作宏,它将转换包含小时、分钟或两者的 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
====================================
顺便说一句,这是针对您在此处发布的所有不同格式运行上述宏的结果的屏幕截图。它似乎确实有效,但也许我在你的真实数据中遗漏了一些东西。
关于vba - 仅使用 VBA 将存储为文本的小时和分钟转换为分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25623482/