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

标签 vba excel time

我有一列包含不同的时间量,即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

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

顺便说一句,这是针对您在此处发布的所有不同格式运行上述宏的结果的屏幕截图。它似乎确实有效,但也许我在你的真实数据中遗漏了一些东西。

enter image description here

关于vba - 仅使用 VBA 将存储为文本的小时和分钟转换为分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25623482/

相关文章:

vba - 在多个 Excel 文件上运行相同的 Excel 宏

Excel VBA 自动筛选 > 删除空行

java - Apache POI 移行

vba - Excel VBA 尝试编辑组内形状的可见性

mysql - 在 SQL 中以分钟为单位动态生成时间间隔之间的时间序列

java - 在Java中如何确保当前本地时间是正确的?

excel - 将内容从单元格移动到带有空格的 msgbox?

vba - 当子表单绑定(bind)到表时,是否可以在子表单的表单上引发事件?

excel - 用于在多个多行单元格中搜索 A 列中的项目并替换为其旁边的列中具有值的项目的公式

r - 用R将时间格式转换为数字