VBAsearchD列为“PM”,然后添加12个小时到列B如果find

我有一个不幸的具体问题,我的谷歌/拼凑VBA代码的能力只能走得这么远。

我从一个文本文件中导入一个报告,列中显示30分钟的时间间隔(见截图)。 出于某种原因,任何时候在12PM后将在列B中显示为AM,但在列D中不显示。我试图创build一个代码,将searchD列的PM,并添加12小时列B,所以它最终作为PM。 我的尝试不工作,我相信这是因为范围。

数据的屏幕截图

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 

任何帮助是极大的赞赏!

你可能想尝试没有循环:

 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