2016-08-01 39 views
2

Ich möchte die letzten 8 Zeilen in x Menge der Zeilen (der Betrag ändert sich jeden Monat), gibt es einen Thread bereits hier, aber nur für eine Spalte. Ich brauche es für mehrere Spalten und versuchte zwei verschiedene Möglichkeiten, aber beide funktionieren nicht aufgrund der Syntax.Auswahl der letzten 8 Zeilen in Excel Vba

Sheets("Sheet2").Select 
LastRow = Range("D" & Rows.Count).End(xlUp).Row 
Set Last8Rows = Range("A" & LastRow).Offset(-7, 0).Resize(8, 1) 
Set Last8aRows = Range("B" & LastRow).Offset(-7, 0).Resize(8, 1) 
Set Last8bRows = Range("C" & LastRow).Offset(-7, 0).Resize(8, 1) 
Set Last8cRows = Range("D" & LastRow).Offset(-7, 0).Resize(8, 1) 
Set Last8dRows = Range("E" & LastRow).Offset(-7, 0).Resize(8, 1) 
Set Last8eRows = Range("F" & LastRow).Offset(-7, 0).Resize(8, 1) 
Set Last8fRows = Range("G" & LastRow).Offset(-7, 0).Resize(8, 1) 
LastxRows = Last8Rows + Last8aRows + Last8bRows + Last8cRows + Last8dRows + Last8eRows + Last8fRows 
LastxRows.Copy 

Mein zweiter Versuch

Sheets("Sheet2").Select 
LastRow = Range("D" & Rows.Count).End(xlUp).Row 
Set Last8Rows = Range("A:D" & LastRow).Offset(-7, 0).Resize(8, 1) 
Last8Rows.Copy 

Antwort

5

unter den Code Versuchen (es gibt keine Notwendigkeit, das Blatt, um es zu kopieren Select):

Option Explicit 

Sub Copy_LastEight_Rows() 

Dim Sht2   As Worksheet 
Dim LastRow   As Long 
Dim Last8Rows  As Range 

Set Sht2 = ThisWorkbook.Sheets("Sheet2") 

LastRow = Sht2.Range("D" & Sht2.Rows.Count).End(xlUp).Row 

' modify Column D to your need 
Set Last8Rows = Sht2.Range("A" & LastRow - 7 & ":D" & LastRow) 
Last8Rows.Copy 

End Sub 
+2

A. Sie gehen davon aus, dass die letzte Spalte "D" sein wird? :) B. Für die letzten 8 Zeilen müssen Sie ein '-7' und nicht' -8' haben. Sie gehen davon aus, dass alle Spalten die gleiche letzte Zeile haben werden? –

+0

Sie haben Recht, sollte -7 –

+2

sein ++ Jetzt macht es mehr Sinn :) –

4

Wenn Sie nicht sicher sind, Ihr Bereich, dh Sie wissen nicht, was Ihre letzte Spalte ist, dann versuchen Sie es :) Es verwendet .Find, um die letzte Zeile und die letzte Spalte zu finden.

Sub Sample() 
    Dim ws As Worksheet 
    Dim sRow As Long, lRow As Long, lCol As Long 
    Dim LastCol As String 
    Dim rng As Range 

    Set ws = Sheet1 '<~~ Change as applicable 

    With ws 
     '~~> Find last row 
     lRow = .Cells.Find(What:="*", _ 
       After:=.Range("A1"), _ 
       Lookat:=xlPart, _ 
       LookIn:=xlFormulas, _ 
       SearchOrder:=xlByRows, _ 
       SearchDirection:=xlPrevious, _ 
       MatchCase:=False).Row 

     '~~> Find last column 
     lCol = .Cells.Find(What:="*", _ 
       After:=.Range("A1"), _ 
       Lookat:=xlPart, _ 
       LookIn:=xlFormulas, _ 
       SearchOrder:=xlByColumns, _ 
       SearchDirection:=xlPrevious, _ 
       MatchCase:=False).Column 

     '~~> Get column letter of last column 
     LastCol = Split(.Cells(, lCol).Address, "$")(1) 
     sRow = lRow - 7 

     Set rng = .Range("A" & sRow & ":" & LastCol & lRow) 

     Debug.Print rng.Address 
    End With 
End Sub 
+0

Die letzte Spalte wird immer "H" sein, weil der Rest meines Makros die Daten auf diese Weise formatiert, aber die letzte Zeile wird immer ändern, aber ich lerne gern neue Dinge, also werde ich auch deinen Code ausprobieren, danke für deine Hilfe! :) –

+0

Werden alle Ihre Spalten die gleiche Lastrow haben? –

+0

Nein, weil zum Beispiel "A" Formeln enthält, aber keine Daten für weitere Manipulation. Deshalb habe ich "D" als Referenz verwendet, weil in jeder Zelle der Spalte "D" relevante Daten stehen! –

1

Arbeiten mit dem letzten Code, das ist es:

Option Explicit 

Sub Main() 

    Call SelectLastRows 

End Sub 

Sub SelectLastRows(Optional str_start As String = "A", _ 
        Optional str_end As String = "D") 

    Dim l_last_row As Long 
    Dim last_8_rows As Range 


    l_last_row = Range(str_start & Rows.Count).End(xlUp).Row 
    Set last_8_rows = Range(str_start & l_last_row & ":" & str_end & l_last_row).Offset(-7, 0).Resize(8, 1) 
    last_8_rows.Copy 

End Sub 
2
Sheets("Sheet2").Select 
LastRow = Range("D" & Rows.Count).End(xlUp).Row 
Set Last8Rows = Range("A" & LastRow - 7, "D" & LastRow) 
Last8Rows.Copy