2017-03-29 3 views
1

Ich habe zwei Excel-Blätter in der gleichen Arbeitsmappe. Blatt1 und Blatt2. in Blatt1 Ich erstelle Daten für jeden Monat. zum Beispiel wird die Spalte z1 3/1/2017, die AA1 wird der 02.03.2017, die AB1 die 3/3/2017 usw. bis zum Enddatum eines Monats sein.sammeln Informationen von einem Blatt und legen Sie es auf einem anderen Blatt in VBA

Dann in Blatt2 habe ich einige Zahlen in Spalte N, O, P. jeden Tag könnten diese Zahlen anders sein.

In Spalte C von Blatt1 und Blatt2 sind SN gespeichert.

Jetzt versuche ich die Werte aus der Spalte N, O, P aus Blatt2 (N + O + P) zu sammeln, und speichern Sie sie in Blatt1 in Spalte, die Kopf = Datum von der gleichen SN. Ich versuche, den folgenden Code zu verwenden, aber das funktioniert nicht.

könnte jemand mir helfen mit diesem

Sub registrereren() 
Dim FirstDate As Date 
Dim LastDate As Date 
Dim NextDate As Date 
Dim r As Long 

Dim j As Long 
Dim lastrow1 As Long 

FirstDate = DateSerial(Year(Date), Month(Date), 1) 
LastDate = DateSerial(Year(Date), Month(Date) + 1, 0) 
lastrow1 = Sheets("Registration").Range("C" & Rows.Count).End(xlUp).Row 

For r = 27 To LastDate 

If Cells(1, r) = Date Then 
Next r 

    For j = 2 To lastrow1 

    Sheets("Sheet1").Cells(j, r).Value = WorksheetFunction.VLookup(Sheets("Sheet1").Range("C" & j).Value * 1, Sheets("Sheet2").Range("C2 : P3000"), 11 + 12 + 13, 0) 


    Next j 
End If 

End Sub 
+0

Wie/warum funktioniert es nicht? Gibt es einen Fehler, wenn ja, welcher Fehler wo? Zu Ihrer Information sollten Sie unbedingt angeben, auf welchem ​​Blatt 'Rows.Count' Sie laufen sollen, wie Sie es mit' Range() 'tun:' Sheets ("Registrierung"). Bereich ("C" und Sheets ("Registrierung") .Rows.Count) .End (xlUp) .Row' Um zu verdeutlichen, ob 'Cells (1, r)' * nicht 'Date' entspricht, wollen Sie, was passiert? Ihre Schleife dort glaube ich ist ein wenig außer Betrieb. Denn wenn ich es verstehe, wird es nur EINMAL laufen. Wenn Zellen (1,27) 'nicht mit Datum übereinstimmt, dann gehst du zum Ende des Unters, ist das was passiert? Mit "F8" durchgehen, um zu prüfen. – BruceWayne

+0

Hallo Bruce. Danke für Ihre Antwort. Ich bekomme einen Fehler in der Zeile für Next r und es steht Next ohne für. Ich bin nicht wirklich dieser Fortschritt mit VBA. Ich möchte Row.count auf Blatt1 und Blatt2 ausführen. Ich möchte, dass die erste Schleife die erste Zeile in Blatt1 überprüft. und dann, wenn es den Kopf findet, der dem Datum entspricht. dann möchte ich die Informationen aus Spalte N, O, P in Blatt2 sammeln und sie in die Spalte einfügen, die einen Eader hat, der gleich Date ist. –

Antwort

0

Die Next r fehl am Platze ist. Es sollte nach sein die End If

Der resultierende Code wie folgt aussieht:

Sub registrereren() 
    Dim FirstDate As Date 
    Dim LastDate As Date 
    Dim NextDate As Date 
    Dim r As Long 
    Dim j As Long 
    Dim lastrow1 As Long 

    FirstDate = DateSerial(Year(Date), Month(Date), 1) 
    LastDate = DateSerial(Year(Date), Month(Date) + 1, 0) 
    lastrow1 = Sheets("Registration").Range("C" & Rows.Count).End(xlUp).Row 

    For r = 27 To LastDate 
     If Cells(1, r) = Date Then 
      For j = 2 To lastrow1 
       Sheets("Sheet1").Cells(j, r).Value = WorksheetFunction.VLookup(Sheets("Sheet1").Range("C" & j).Value * 1, Sheets("Sheet2").Range("C2 : P3000"), 11 + 12 + 13, 0) 
      Next j 
     End If 
    Next r 
End Sub 

Der VBA-Editor macht es einfach einrücken Code. Wenn Sie eine Unterroutine, eine Funktion, eine Schleife, eine Groß-/Kleinschreibung oder eine if-Anweisung starten, sollten Sie die nächste Zeile durch Drücken der Tabulatortaste einrücken. Wenn Sie mit dem Block fertig sind, verwenden Sie die Rücktaste, um zu den vorherigen Einrückungsstufen zurückzukehren. Darüber hinaus gibt es im Editor-Ribbon Optionen, mit denen Sie ganze Code-Blöcke einrücken oder verschieben können.

Sobald Sie sich daran gewöhnt haben, sollte es auf Sie hinausspringen, wenn ein Block nicht auf die richtige Weise beendet wird. Auf der anderen Seite, Ihre sporadische und inkonsistente Einrückung machte es schwierig zu erkennen, was das Problem mit Next r war.

Der obige Code kompiliert, aber ich war nicht in der Lage, es auf einfache Weise zu testen, da ich nicht sicher bin, wie Ihre Tabelle ausgelegt ist. Wenn es immer noch nicht funktioniert, haben Sie ein anderes Problem mit dem Code und könnten entweder Ihre Frage bearbeiten oder vielleicht eine andere Frage stellen, wenn Sie müssen (sobald Sie das Problem isoliert haben).

+0

Hallo John Vielen Dank für Ihre Antwort. –

+0

Was ich versuche zu tun ist eigentlich so: Unter Test() ActiveCell.Offset (1, 12) .Range ("A1"). Wählen ActiveCell.FormulaR1C1 = "= SUM (Sheet2! RC: RC [ 2]) " ActiveCell.Select Auswahl.AutoFill Ziel: = ActiveCell.Range (" A1: A49 "), Typ: = _ xlFillDefault ActiveCell.Bereich ("A1: A49") Wählen Sie ActiveWindow.SmallScroll Down: = - 18 ActiveCell.Select End Sub –

+0

Ich brauche, dass der Code in der ersten Zeile sucht, um die Zelle zu finden, die das aktuelle Datum enthält. und dann sollte in diesem Makro das Ziel von dieser Zelle bis zur letzten Zeile ausgewählt werden. –

Verwandte Themen