2017-09-22 1 views
2

Ich möchte den höchsten Wert in der zweiten Zeile des Blattes '2G' finden und fügen Sie die gesamte Spalte in das Blatt 'Daily2G'. Die erste Zeile des Blattes '2G' enthält Datum und Uhrzeit (24 Stunden).Excel VBA Daten in ein anderes Blatt kopieren

Der Code vergleicht auch das Datum und kopiert nur die Daten, wenn die Daten unterschiedlich sind.

Der Code funktionierte die letzten zwei Tage einwandfrei, aber heute funktioniert es nicht. Ich kann nicht herausfinden, was das Problem ist. Ich würde es begrüßen, wenn sich jemand den Code ansehen und mir sagen könnte, wo ich falsch liege.

Der Code funktioniert, wenn ich die Werte in einer anderen Zeile vergleiche, aber ich möchte die Werte nur in der zweiten Zeile überprüfen. Auch die Dublettenprüfung funktioniert nicht, es war vor heute.

Sub Daily2G() 
    Dim dailySht As Worksheet 'worksheet storing latest store activity 
    Dim recordSht As Worksheet 'worksheet to store the highest period of each day 
    Dim lColDaily As Integer ' Last column of data in the store activity sheet 
    Dim lCol As Integer ' Last column of data in the record sheet 
    Dim maxCustomerRng As Range ' Cell containing the highest number of customers 
    Dim CheckForDups As Range ' Used to find duplicate dates on the record Sheet 
    Dim maxCustomerCnt As Long ' value of highest customer count 

    Set dailySht = ThisWorkbook.Sheets("2G") 
    Set recordSht = ThisWorkbook.Sheets("Daily 2G") 
    With recordSht 
     lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 
    End With 
    With dailySht 
     lColDaily = .Cells(1, .Columns.Count).End(xlToLeft).Column 
     maxCustomerCnt = Application.Max(.Range(.Cells(2, 1), .Cells(2, lColDaily))) 
     Set maxCustomerRng = .Range(.Cells(2, 1), .Cells(2, lColDaily)).Find(What:=maxCustomerCnt, LookIn:=xlValues) 
     If Not maxCustomerRng Is Nothing Then 
     ' Check the Record Sheet to ensure the data is not already there 
      Set CheckForDups = recordSht.Range(recordSht.Cells(1, 1), recordSht.Cells(1, lCol)).Find(What:=maxCustomerRng.Offset(-1, 0).Value, LookIn:=xlValues) 
     ' If CheckForDups is Nothing then the date was not found on the record sheet. Therefore, copy the column 
      If CheckForDups Is Nothing Then 
       maxCustomerRng.EntireColumn.Copy 
       recordSht.Cells(1, lCol + 1).PasteSpecial xlPasteValues 
       recordSht.Cells(1, lCol + 1).PasteSpecial xlPasteFormats 
      End If 
     End If 
    End With 

    Set maxCustomerRng = Nothing 
    Set dailySht = Nothing 
    Set recordSht = Nothing 
End Sub 
+0

Sagen Sie uns, welchen Fehler Sie in welcher Zeile bekommen. Oder was passiert. Einfach zu sagen, dass es nicht funktioniert, ist zu weit gefasst. – Luuklag

+0

@Luuklag Das Abarbeiten des Codes funktioniert, wenn er Werte in einer anderen Zeile als in der zweiten Zeile vergleicht, was ich versuche zu tun. Beim Vergleichen der Werte in der zweiten Zeile passiert nichts. Im Debugging-Modus wird angezeigt, dass in der zweiten Zeile der korrekte Wert ausgewählt wurde, die Spalte "its" jedoch nicht überschritten wird. – aab

+0

@Luupack ja ich tat und der richtige Wert ist abgestimmt. Es kopiert einfach nicht seine Spalte – aab

Antwort

2

Nicht sicher, wie und was versuchen Sie zu finden, als Duplikat so etwas im Code geändert, so dass, wenn gemäß der Beispieldatei 3.488,95 nicht in row2 in Daily2G Blatt gefunden wird, wird der Code Kopieren Sie die Spalte mit Max-Wert in das Daily2G-Blatt, andernfalls wird sie übersprungen.

Auch in der Beispieldatei ist der Name des Arbeitsblattes "Daily2G" nicht "Daily 2G", also wurde es im Code geändert und Sie ändern es in Ihrer tatsächlichen Arbeitsmappe wie erforderlich.

Das Problem mit Ihrem Code ist, dass Sie maxCustomerCnt so lange deklariert haben, während die Werte in Zeile2 auf 2G Blatt Dezimalwerte sind, so dass der NaxCustomerRng immer nichts ist.

Bitte geben diesem einen Versuch ...

Sub Daily2G() 
    Dim dailySht As Worksheet 'worksheet storing latest store activity 
    Dim recordSht As Worksheet 'worksheet to store the highest period of each day 
    Dim lColDaily As Integer ' Last column of data in the store activity sheet 
    Dim lCol As Integer ' Last column of data in the record sheet 
    Dim maxCustomerRng As Range ' Cell containing the highest number of customers 
    Dim CheckForDups As Range ' Used to find duplicate dates on the record Sheet 
    Dim maxCustomerCnt As Double ' value of highest customer count 

    Set dailySht = ThisWorkbook.Sheets("2G") 
    Set recordSht = ThisWorkbook.Sheets("Daily2G") 
    With recordSht 
     lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 
    End With 
    With dailySht 
     lColDaily = .Cells(1, .Columns.Count).End(xlToLeft).Column 
     maxCustomerCnt = Round(Application.Max(.Range(.Cells(2, 1), .Cells(2, lColDaily))), 2) 
     Set maxCustomerRng = .Range(.Cells(2, 1), .Cells(2, lColDaily)).Find(What:=maxCustomerCnt, LookIn:=xlValues) 
     If Not maxCustomerRng Is Nothing Then 
     ' Check the Record Sheet to ensure the data is not already there 
      Set CheckForDups = recordSht.Range(recordSht.Cells(2, 1), recordSht.Cells(2, lCol)).Find(What:=Round(maxCustomerRng.Value, 2), LookIn:=xlValues) 
     ' If CheckForDups is Nothing then the date was not found on the record sheet. Therefore, copy the column 
      If CheckForDups Is Nothing Then 
       maxCustomerRng.EntireColumn.Copy 
       recordSht.Cells(1, lCol + 1).PasteSpecial xlPasteValues 
       recordSht.Cells(1, lCol + 1).PasteSpecial xlPasteFormats 
      End If 
     End If 
    End With 

    Set maxCustomerRng = Nothing 
    Set dailySht = Nothing 
    Set recordSht = Nothing 
End Sub 

Führen Sie den obigen Code in der Beispieldatei, die Sie zur Verfügung gestellt, und wenn es nach der Herstellung erforderlichen Änderungen gut, testen Sie es mit Ihrem tatsächlichen Datei funktioniert.

+0

Danke, es funktioniert! Aber die Überprüfung auf Duplikate funktioniert nicht – aab

+0

Basierend auf Ihrer Beispieldatei und sobald die Spalte in den Daily2G, Blatt kopiert wird, wenn Sie den Code erneut ausführen, was werden Sie als doppelt betrachten? Der vorgeschlagene Code sucht nach dem maximalen Wert in Zeile 2 auf 2G Blatt (3488.95 in diesem Fall) in Zeile2 auf Daily2G Blatt und wenn es gefunden wird, wird es als ein Duplikat betrachten und wird nicht die gleiche gesamte Spalte wieder in die kopieren Daily2G Blatt. Versuchen Sie etwas anderes zu erreichen, wenn Sie nach Dubletten suchen? – sktneer

+0

z.B. Wenn Sie den vorgeschlagenen Code mehrere Male mit derselben Beispieldatei ausführen, ohne Änderungen in Zeile 2 auf dem 2G-Blatt vorzunehmen, wird die Spalte H nicht mehr als einmal kopiert. – sktneer

Verwandte Themen