2017-11-28 5 views
0

Ich habe versucht, auf google und hier in StackOverflow zu suchen, aber ich kann nicht scheinen, den Code zusammen für meinen Zweck zu kleben. Ich verwende 2 Spalten. Der erste, um ein Datum einzugeben (TT-MM-JJJJ), der zweite, um die Zeit einzugeben (00:00:00). Ich habe bereits herausgefunden, wie man die Zeit alle 15 Minuten erhöht, aber jetzt habe ich das Problem, dass sich mein Datum nur ändern kann, wenn die Zeit auf 00:00:00 ist. Daher muss der Code für diese Zeit in Spalte B suchen. Also für meine Zeit Ich habe diese:VBA Inkrement Datum, wenn die Stunde Null ist

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 

So, jetzt muss ich für "00:00:00" aussehen in Spalte B gehen. Wenn ich das in der Zelle z. B98 Ich muss auf A98 springen und das Datum in vorheriges +1 ändern. Dafür brauche ich bereits ein Datum in den vorherigen Zellen. Der Benutzer wird ein Datum in der ersten präsentierten Zelle eingeben. Von dort an füllt das Makro alle Zellen in Spalte A mit diesem Datum. Ich habe diesen Teil des Makros verwendet:

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

Dies funktioniert aber ich brauche die Zelle in dieser speziellen A-Zelle enthält, 00.00.00 neben B-Zelle zu ändern. Wie könnte ich das bitte machen? Oder gibt es eine bessere Möglichkeit, die Verwendung von Date-Time zu erhöhen?

Um von der gefundenen Zelle nach links Ich habe versucht zu verwenden:

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.... 

Hat jemand bitte eine Idee hat:

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 

So ist es, wie in etwa so aussehen sollte?

+0

Sie könnten nur Formel verwenden. Geben Sie in Zelle A1: '28/11/2017 00: 00: 00' in Zelle A2 ein:' = SUM (A1, "00:15") '. In Zelle B1 geben Sie '= A1' ein. Nun geben Sie Spalte A ein benutzerdefiniertes Format von "d/mm/yyyy" und Spalte B ein benutzerdefiniertes Format von "hh: mm: ss". Wenn Sie die Formel nach unten ziehen, ändert sich das Datum, wenn Sie Mitternacht erreichen. –

+0

Hallo Darren, danke für deine schnelle Antwort. Dies könnte eine Lösung sein, aber in meinem Fall muss ich für 30 bis 31 Tage fortfahren. und ich möchte das mit einem einzigen Klick auf eine Schaltfläche tun, so dass jeder andere nicht vba-Benutzer das verwenden kann ;-) – CD46

+0

Ich werde als Antwort mit etwas VBA-Code hinzufügen. –

Antwort

0

Wie in den Kommentaren gesagt - das kann mit nur einer Formel und Zahlenformatierung (der Code unten fügt nur die Formel und Zahlenformatierung) getan werden.

Mit Ihrem ersten Stück Code als Vorlage wird dies automatisch zwischen B5: C2980 füllen.
Fügen Sie einfach das erste erforderliche Datum in Zelle B4 hinzu und die Formel in B5 berechnet 15 Minuten später.

Beachten Sie auch - es gibt keine Auswahl Zellen. Sie arbeiten nur mit dieser Zelle - Sie müssen sie nicht zuerst auswählen.

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

Hey Darren, danke für deine Zeit und deinen Code. Aber der Code füllt automatisch ein Datum ab 00/01/1900. Das Datum sollte mit dem beginnen, was der Benutzer in Zelle A4 ausfüllt. Also, wenn der Benutzer 01.01.2017 füllt, sollte das Datum von dort ausgehen ..... – CD46

+0

Nicht sicher, was Sie mit "Spalte A alle 24 Stunden" meinen. Wenn Sie 01.01.2017 in Zelle B4 eingeben, wird die Tabelle, die Sie am Ende Ihres Beitrags hinzugefügt haben, im Bereich B193: C199 angezeigt. Wenn Sie die Daten in den Spalten A: B möchten, müssen die Spaltenbereiche in meinem Code nur von B: C auf A: B angepasst werden. –

+1

Oh Mist! Es tut mir so leid, Darren, dein Code ist großartig! Vielen Dank. Ich habe gesehen, was ich falsch gemacht habe. Ich musste zuerst mein Blatt reinigen :-(. Entschuldigung! Nochmals vielen Dank, aber ich verstehe nicht ganz, welcher Teil des Codes das Datum automatisch füllt? Ist es in ".NumberFormat =" TT/MM/JJ ""? – CD46

Verwandte Themen