2017-06-02 2 views
1

Ich habe ein Skript, das verwendet wird, um den letzten Eintrag in einer bestimmten Tabellenspalte über verschiedene Blätter hinweg zu finden und sie in eine Hauptblattliste einzufügen. Es funktioniert wie "finde die letzte benutzte Zeile in Spalte B", aber offensichtlich werden Tabellenzeilen, auch wenn sie leer sind, als gebrauchte Zeilen gezählt und daher sind die meisten meiner Rückgaben leer, da der tatsächliche Wert, nach dem ich suche, oben eingegeben wurde der Tabelle statt in der letzten Reihe. Es ist auch wichtig zu beachten, dass es auf diesen Blättern mehrere gestapelte Tabellen gibt, aber jede Tabelle hat nur EINEN Wert in der Spalte B, und ich suche immer nur nach dem neuesten.Kopiere letzten Wert in Tabellenspalte, NICHT leere Tabellenzeilen darunter

Gibt es eine Möglichkeit, Excel zu sagen, dass leere Tabellenzeilen nicht als gebrauchte Zeilen gezählt werden sollen? Ich bin nur daran interessiert, den letzten Wert in Spalte B zurückzugeben, selbst wenn es nicht die letzte Tabellenzeile ist.

Dim rng As Range 
Dim cell As Range 
Dim result As String 
Dim result_sheet As Long 
Dim LastRow As Long 


Set rng = Range("A2:A200") 

For Each cell In rng 

result = cell.Value 

LastRow = Worksheets(result).Cells(Worksheets(result).Rows.Count, "B").End(xlUp).row 
cell.Offset(0, 1).Value = Worksheets(result).Range("B" & LastRow).Value 

Next cell 

Antwort

1

Hier ist ein Weg,

Sub Sample() 
    Dim ws As Worksheet 
    Dim tmplRow As Long, lRow As Long, i As Long 

    '~~> Change this to the relevant sheet 
    Set ws = Sheet1 

    With ws 
     tmplRow = .Range("B" & .Rows.Count).End(xlUp).Row 

     For i = tmplRow To 1 Step -1 
      If Len(Trim(.Range("B" & i).Value)) <> 0 Then 
       lRow = i 
       Exit For 
      End If 
     Next i 

     If lRow = 0 Then lRow = 1 

     MsgBox "The last row is " & lRow 
    End With 
End Sub 

Screenshot

enter image description here

Und eine andere Art und Weise

Sub Sample() 
    Dim ws As Worksheet 
    Dim tbl As ListObject 
    Dim lRow As Long, endRow As Long, startRow As Long, i As Long 

    '~~> Change this to the relevant sheet 
    Set ws = Sheet1 

    With ws 
     '~~> Change this to the relevant table number 
     Set tbl = .ListObjects(1) 

     endRow = tbl.Range.Rows.Count 
     startRow = tbl.Range.Row 

     For i = endRow To startRow Step -1 
      If Len(Trim(.Range("B" & i).Value)) <> 0 Then 
       lRow = i 
       Exit For 
      End If 
     Next i 

     MsgBox lRow 
    End With 
End Sub 
Verwandte Themen