VBA搜索D列为“PM”,然后如果找到则向B列添加12小时

时间:2017-09-26 18:47:56

标签: excel vba excel-vba

我有一个不幸的具体问题,我的谷歌/拼凑VBA代码的能力只能到目前为止。

我正在从文本文件导入报告,该文件文件的列间隔为30分钟(参见屏幕截图)。出于某种原因,在12PM之后的任何时间都将在列B中显示为AM但不在列D中显示。我正在尝试创建一个代码,该代码将在D列中搜索PM并向B列添加12小时,因此它最终为PM。我的尝试不起作用,我相信这是因为范围。

Screenshot of Data

Sub AM2PM()    
Dim rngC As Range
Dim rngT As Range
Set rngT = Range("B2", Cells(Rows.Count, "B").End(xlUp))

rngT.NumberFormat = "mm/dd/yyyy hh:mm:ss AM/PM"

For Each rngC In rngT
    If InStr(1, (Range("D")), "PM") > 0 Then
        rngC.Value = DateValue(rngC.Value) + TimeValue(rngC.Value) + 0.5
    Else
        rngC.Value = DateValue(rngC.Value) + TimeValue(rngC.Value)
    End If
Next rngC

End Sub

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您可能想尝试不循环:

Sub Minus30M()
    With Columns("D:D")
        .Replace What:="A", Replacement:=" A", LookAt:=xlPart
        .Replace What:="P", Replacement:=" P", LookAt:=xlPart
    End With
    Range("D1").FormulaR1C1 = "=1/48"
    Columns("D:D").Copy
    Range("B1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("D1").Copy
    Columns("B:B").PasteSpecial Paste:=xlPasteAll, Operation:=xlSubtract
    Application.CutCopyMode = False
    Selection.NumberFormat = "h:mm AM/PM"
End Sub