2017-11-28 5 views
0

私はgoogleとここでStackOverflowでarroundを見ようとしましたが、私の目的のために一緒にコードを接着することはできません。 私は2つの列を使用しています。最初の1つは日付(dd-mm-yyyy)を入力し、もう1つは時間(00:00:00)を入力します。私はすでに15分ごとに時間を増やす方法を見つけましたが、時刻が00:00:00になると自分の日付だけが変更されるという問題があります。だから、このためにはコードは今度はB列を見る必要があります。私は「〇時00分00秒」の列Bに見に行く必要があるだから今時間がゼロのときのVBAの増分日

Sub AutomateTimeSeries 
    range("B5").Select   
    ActiveCell.FormulaR1C1 = "=R[-1]C + ""00:15"""     
    Selection.AutoFill 
    Destination:=range("B5:B2980"), Type:=xlFillDefault - 
    range("A4").Select 
End Sub 

: だから私の時間のために私はこれを持っています。私がセル内でこれを見つけると、 B98私はA98にジャンプし、前の+1に日付を変更する必要があります。そのためには、前のセルに日付を記入する必要があります。ユーザは、最初に提示されたセルの日付を記入する。そこから、マクロは列Aのすべてのセルをこの日付で埋めるでしょう。私は、マクロのこの部分を使用しました:

Selection.AutoFill Destination:=range("A4:A2980"), Type:=xlFillCopy 

これは動作しますが、私は次00:00:00含むB細胞へのその特定のA-のセルにセルを変更する必要があります。どうすればいいですか?または、Date-Timeを使用するより良い方法があります。だから、このようなもののようになります。

Sub IncreaseDate() 

    Dim a_lastrow As Integer  'last row of column A 
    Dim b_lastrow As Integer  'last row of column B 
    Dim ws As Worksheet 

    Set ws = Workbook.Worksheets("Sheet1") 

    With ws 
     a_lastrow = .Range("A3000").End(xlUp).Row 
     b_lastrow = .Range("B3000").End(xlUp).Row 

     For r = 1 To a_lastrow 
      If Application.WorksheetFunction.CountIf(.Range("B1:B" & b_lastrow), .Range("B" & r).Value) = "00:00:00" Then 
       .Range("A" & r).Value = "previous date + 1 day" '<==what's the code for this?????? 
      End If 
     Next r 
    End With 

    MsgBox ("done") 

    If (Target.Column = 2) Then 'check if in 2nd column 
     If Target.Offset(, -1).Value = "" Then 'Check if there is already a value in Column A 
      Target.Offset(, -1).Value = Date  ' No value, lets stick in the current system date 
     End If 
    End If 

    SAS DateLiteral 
    DateAdd 


End Sub 

::私が使用しようとした見つかったセルから左に行くために

1/01/2017 23:15:00 
1/01/2017 23:30:00 
1/01/2017 23:45:00 
2/01/2017 0:00:00 
2/01/2017 0:15:00 
2/01/2017 0:30:00 
2/01/2017 0:45:00.... 

は誰のアイデアをしてください持っていますか?

+0

数式だけでも使用できます。セルA1には、セルA2に '28/11/2017 00:00:00'と入力します。' = SUM(A1、 "00:15") '。セルB1に '= A1'と入力します。今度は、列Aに 'd/mm/yyyy'のカスタム形式を与え、列Bに' hh:mm:ss'のカスタム形式を与えます。数式をドラッグすると、深夜になると日付が変わります。 –

+0

こんにちはダーレン、あなたの迅速な答えに感謝します。これは解決策になるかもしれませんが、私の場合は30-31日間続ける必要があります。私はボタンを1回クリックするだけでそれをやりたいので、他の誰かがこれを使うことができます;-) – CD46

+0

いくつかのVBAコードで回答として追加します。 –

答えて

0

コメントに記載されているとおり、これは数式と数値の書式設定で行うことができます(以下のコードでは、数式と数値書式を追加するだけです)。

最初のコードをテンプレートとして使用すると、B5:C2980の間で自動的に入力されます。
セルB4に最初の必要な日付を追加するだけで、B5の数式は15分後に計算されます。

メモ - 選択するセルはありません。そのセルで作業するだけです。最初に選択する必要はありません。

Sub AutomateTimeSeries() 

    With ThisWorkbook.Worksheets("Sheet1") 
     With .Range("B5") 
      .FormulaR1C1 = "=SUM(R[-1]C,""00:15"")" 
      .NumberFormat = "dd/mm/yyyy" 
     End With 
     With .Range("C5") 
      .FormulaR1C1 = "=RC[-1]" 
      .NumberFormat = "hh:mm:ss" 
     End With 

     .Range("B5:C5").AutoFill Destination:=.Range("B5:C2980") 

    End With 

End Sub 
+0

ちょっとダーレン、あなたの時間とコードに感謝します。しかし、このコードは1900年1月1日からの日付を自動的に入力します。日付は、ユーザーがセルA4で記入しているもので始まる必要があります。だから、ユーザーが01/01/2017を記入した場合、そこから日付が来るはずです..... – CD46

+0

「24時間ごとに列A」がどういう意味なのかよく分かりません。セルB4に01/01/2017と入力すると、投稿の一番下に追加した表がB193:C199の範囲に表示されます。列A:Bの日付が必要な場合は、コード内の列範囲をB:CからA:Bに調整するだけで済みます。 –

+1

ああ!大変申し訳ございませんが、あなたのコードは崇高です!ありがとう。私は間違ったことを見た。私は最初にシートをきれいにする必要がありました:-(。申し訳ありません!もう一度感謝しますが、コードのどの部分が日付を自動的に埋めているのかよくわかりません。 ".NumberFormat =" dd/mm/yy ""ですか? – CD46

関連する問題