Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Letzte beschriebene Zeile suchen

Betrifft: Letzte beschriebene Zeile suchen von: Thomas3
Geschrieben am: 19.08.2008 08:29:10

Guten Morgen zusammen,
ich muß aus über 1000 Listen Daten auslesen. Das ist kein Problem.
Jede Liste sollte so beschrieben werden, dass ab Zeile 13 bis je nach Eintragungen x-Zeile Spalte O gefüllt ist.
In der Spalte 1 ist in der Datenliste eine Formel hinterlegt, die sichtbar automatisch nach oben zählt, wenn in der Spalte B was einträgt ( also Datenzeile 1 ist beschrieben, Zeile 2 ist beschrieben und so weiter... )
In der Spalte O ist eine Gültigkeit hinterlegt, die, wenn die Zeile ausgefüllt ist, auszuwählen ist. wenn nix ausgewählt, dann bleibt die Spalte leer.

Um sicher zu gehen, dass ich auch wirklich alles übernommen habe, möchte ich nun folgendes machen :
Zähle Anzahl Zeilen Spalte A, zähle Anzahl Zeilen Spalte O, vergleiche, nimm die höchste

Problem :
Spalte A : Mal zählt er garnix, mal bis 999 ( bis dahin geht in der Datentabelle die Hochzählformel )
Spalte O : wie Spalte A

Zum Zählen nehme ich folgendes :
lzeile1 = ActiveWorkbook.Sheets("Registration of participants").Cells(Rows.Count, 1).End(xlUp).Row

Was mache ich falsch ?

Liebe Grüße
Thomas

  

Betrifft: AW: Letzte beschriebene Zeile suchen von: Erich G.
Geschrieben am: 19.08.2008 09:00:48

Hallo Thomas,
da stellen sich ein paar Fragen:

"Spalte A : Mal zählt er garnix, mal bis 999"
Bedeutet "garnix", dass es einen Fehler gibt? Oder Zeile 1 als Ergebnis?
Wenn in Spalte A bi Zeile 999 Formeln stehen, dann ist Spalte A bis zur Zeile 999 beschrieben.
Die Spalte eignet sich also nicht für die Feststellung der "letzten Zeile" mit ...End(xlUp).Row

Spalte B scheint da aussagekräftiger zu sein. Versuchs mal mit
lzeile1 = Sheets("Registration of participants").Cells(Rows.Count, 2).End(xlUp).Row

"In der Spalte O ist eine Gültigkeit hinterlegt, die, wenn die Zeile ausgefüllt ist, auszuwählen ist"
Die Gültigkeitsprüfung kommt doch nur zum Tragen, wenn in Spalte O geändert wird.
Wo und wie erzwingst du, dass eine Zelle in Spalte O auszuwählen ist?

"In der Spalte 1 ist in der Datenliste eine Formel hinterlegt" - Wie lautet die Formel?
(Es könnte sein, dass du die "letzte" Zeile mit Application.Max(columns(1)) erhältst.)

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort


  

Betrifft: AW: Letzte beschriebene Zeile suchen von: Thomas3
Geschrieben am: 19.08.2008 09:23:22

Hallo Erich,
lieben Dank für die Rückmeldung. Ich versuche einmal die Fragen alle zu beantworten :
Frage 1
Das ist die Formel in der Spalte A :=WENN(C14="";"";A13+1). Die ist kopiert bis Zeile 999. Daher das Zählen bis Zeile 999

Spalte B :
Das ist der Titel des Namens, der auszulesen ist. Wenn da also nix drinnen steht, dann ist die Zeile leer. Im schlimmsten Fall der Fälle kann die ganze Spalte - weil keiner einen Titel hat - somit leer sein

Spalte O :
In dieser Spalte kann man aus einem Dropdown Feld einfügen, um welche Kategorie sich der Datensatz handelt. Also VIP, Besucher, Personal ..... Auch hier wieder. Wenn der Ausfüller das Feld ausgefüllt hat, dann steht da was drinnen, wenn nicht, dann habe ich so gesehen Pech gehabt.

Der Sinn ist folgender. Ich suche nach einer Lösung, dass halt der gesamte ausgefüllte Bereich erfasst und kopiert wird. Da in der Datei Formeln enthalten sind ( sie Spalte A ) ist es für mich etwas schwer den den Bereich, der definitiv ausgefüllt wurde, zu erfassen.

Liebe Grüße
Thomas


  

Betrifft: AW: Letzte beschriebene Zeile suchen von: Erich G.
Geschrieben am: 19.08.2008 12:30:47

Hi Thomas,
so ohne Beispielmappe fällt es schwer, Lösungsvorschläge zu machen. Vieles bleibt unklar.

Wenn in Spalte B hin und wieder ein Titel steht, ist es IMHO wenig sinnvoll,
diese Spalte per Formel in Spalte A auszuwerten.

Spalte O hilft hier auch nicht - da muss nicht immer etwas eingegeben werden.

Gibt es denn keine Spalte, in der IMMER etwas steht, wenn eine Zeile gefüllt ist?
Eine Spalte "Name" könnte so etwas sein. Oder gibt es auch Zeilen ohne Namen?

Wenn dem so wäre, könntest du anhand der Spalte mit den Namen die letzte Zeile feststellen.

Vielleicht solltest du doch mal eine Beispielmappe hochladen.

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort


  

Betrifft: AW: Letzte beschriebene Zeile suchen von: Thomas3
Geschrieben am: 19.08.2008 13:01:06

hmm....
ich bin hier ein wenig unfit...
kann ich dir die datei auch persönlich zukommen lassen ?
da stehen vertrauliche sachen teilweise drinnen...

LG
Thomas


  

Betrifft: AW: Letzte beschriebene Zeile suchen von: Erich G.
Geschrieben am: 19.08.2008 13:37:39

Hi Thomas,
ja, du kannst mir eine Mappe auch zuschicken.

(Optimal ist das nicht - dabei habe nur ich die Möglichkeit zu antworten. Besser wäre,
du würdest die Daten reduzieren und nonymisieren und dann hier als Beispielmappe hochladen.)

Meine Adresse findest du - wg. Spam etwas verklausuliert - hier in der Profilliste, zu erreichen über
Forums-Seiten - Profile - Profilliste oder mit diesem Link: Profilliste

Damit habe ich jetzt nicht zugesagt, dass ich zur Lösung beitrage(n kann)...

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort


  

Betrifft: AW: Letzte beschriebene Zeile suchen von: Thomas3
Geschrieben am: 19.08.2008 14:45:38

Hallo Erich,
also... alles hoffentlich wesentliche raus...
Und keine Bange. Ich bin froh um jeden Tip.

Hier der Datei : https://www.herber.de/bbs/user/54723.xls
liebe Grüße
Thomas


  

Betrifft: AW: Letzte beschriebene Zeile suchen von: Erich G.
Geschrieben am: 19.08.2008 18:30:52

Hi Thomas,
probier mal (in ein allgemeines Modul):

Option Explicit

Sub tst()
   MsgBox LetzteZeileInBereich(Columns("B:O"))           ' im gerade aktiven Blatt
' oder                                  ' mit vollst. Referenzierung des Bereichs:
   MsgBox LetzteZeileInBereich(ActiveWorkbook.Sheets(1).Columns("B:O"))
End Sub

Function LetzteZeileInBereich(rngB As Range) As Long
   Dim rng As Range

   Set rng = rngB.Find("*", rngB.Cells(1, 1), xlValues, , xlByRows, xlPrevious)
   If rng Is Nothing Then
      LetzteZeileInBereich = rngB.Cells(1, 1).Row
   Else
      LetzteZeileInBereich = rng.Row
   End If
End Function

Damit wird die letzte Zeile in den Spalten B bis O gefunden, in der ein Wert <> "" steht.

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort


  

Betrifft: AW: Letzte beschriebene Zeile suchen von: Thomas3
Geschrieben am: 20.08.2008 16:14:40

ja wahnsinn !!!!
das war es !
Ganz lieben Dank
Thomas


  

Betrifft: AW: Letzte beschriebene Zeile suchen von: Rudi Maintaire
Geschrieben am: 19.08.2008 13:27:39

Hallo,
in dieser Funktion werden Zellen mit Formeln, die "" zurückgeben als leer angesehen, somit Rückgabe der letzten Zeile <>"".

Function LastRow( _
      wks As Worksheet, _
      Optional lngFirstRow As Long, _
      Optional lngLastRow As Long) _
  As Long
    
  Dim lngTmp As Long, blnFound As Boolean
  
  With Application
    If .CountA(wks.Rows(wks.Rows.Count)) Then
      LastRow = wks.Rows.Count: Exit Function
    End If
    If .CountA(wks.Cells) = 0 Then
      LastRow = 0: Exit Function
    End If
    
    If lngFirstRow = 0 Then lngFirstRow = 1
    If lngLastRow = 0 Then lngLastRow = wks.Rows.Count
    lngTmp = (lngFirstRow + lngLastRow) / 2
    If lngLastRow > lngFirstRow + 1 Then
      If .CountBlank(wks.Range(.Rows(lngTmp), .Rows(lngLastRow))) _
          < wks.Range(.Rows(lngTmp), .Rows(lngLastRow)).Cells.Count Then _
        lngFirstRow = lngTmp: blnFound = True
        
      If Not blnFound And .CountBlank(wks.Range(.Rows(lngFirstRow), .Rows(lngTmp))) _
          < wks.Range(.Rows(lngFirstRow), .Rows(lngTmp)).Cells.Count Then _
        lngLastRow = lngTmp
        
      LastRow wks, lngFirstRow, lngLastRow
    End If
  End With
  LastRow = lngFirstRow
End Function


Gruß
Rudi


 

Beiträge aus den Excel-Beispielen zum Thema "Letzte beschriebene Zeile suchen"