2017-09-26 3 views
1

残念ながら特定の質問があり、Googleとの共同作業でVBAコードを使用することができます。VBA検索列D "PM"の場合、列Bに12時間を追加します。

30分の間隔を示す列を持つテキストファイルからレポートをインポートしています(スクリーンショットを参照)。何らかの理由で、午後12時以降はいつでも列BにAMとして表示されますが列Dには表示されません。PMとして列Dを検索し、列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

ITSは機能していない '12:00ので - 12:30 PM'は**日付型オブジェクトではありません**。それは文字列です。最初にセルから「12:30 PM」を取り除く必要があります。 –

+0

@ScottHoltzmanこれについては、最も良い方法は何でしょうか –

答えて

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 
+1

これはうまくいきました!どうもありがとうございます!あなたはそれをどう思ったか説明してもらえますか?私が改善できるように理解したいです。 –

+0

ほとんどの場合、日付と時刻を扱うときに、Excelは日付/時刻シリアル(書式設定)として認識可能*を提供できます。ここでは、数字とAM/PMの間にスペースを追加するだけです。その後、* 30分間隔*を利用して、開始時の最後を1/2hrに再作成します。毎晩最後の間隔で問題になる可能性があります:) – pnuts

関連する問題