Excel letzte beschriftete Zelle finden
Hallo an Alle,
ich benötige Eure Hilfe.
Ich möchte in Spalte A ab Zelle 8 die letzte Zelle mit einem
Wert finden.
In den Zeilen von 8 bis 180 steht eine Formel,
Die Funtion "Range("A8:A" & Worksheets("Daten").Cells(Rows.Count, 1).End(xlUp).Row).Select"
findet aber nur die Zeile 180 wo die letzte Formel steht.
Danke
wim
Antwort schreiben
Antwort 1 von bitfix vom 23.03.2021, 14:47 Options
Zu einer Formel gehört natürlich auch ein Wert.
Also nach welchen Werten suchst du dann?
Soll die letzte Zelle mit dem Wert '0' gefunden werden?
Antwort 2 von wmei vom 23.03.2021, 16:27 Options
Hallo bitfix,
die Formel ist eine WENN- Bedingung.
Wenn nicht erfüllt dann "", danach suche ich.
Die dann leeren Zellen sollenn nicht kopiert werden.
wim
Antwort 3 von coros vom 24.03.2021, 06:24 Options
Hallo wim,
versuche es mal mit nachfolgendem Makro. Hier wird mit einer While/Wend-Schleife von Zeile 180 in Spalte A abwärts geprüft, ob der Wert in der Zelle 0 ist. Stimmt dieses Kriterium, ist das die letzte Zeile und die Schleife wird beendet.
Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.Option Explicit
Sub Letzten_Zelle_mit_Wert()
Dim intLastRow As Integer
intLastRow = 180
While Cells(intLastRow, 1) = 0
intLastRow = intLastRow - 1
Wend
MsgBox intLastRow
End Sub
Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf
meiner HP in der
Rubrik Anleitungen und dort dann in der
Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
Bei Fragen melde Dich.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von rainberg vom 24.03.2021, 07:37 OptionsLösung
Hallo wim,
angesichts Deiner Info in AW3 würde ich folgenden Code vorschlagen.
Option Explicit
Sub Letzten_Zelle_mit_Wert()
Dim rngZelle As Range, intZeile As Integer
For Each rngZelle In Range("A8:A180")
If rngZelle.Value <> "" Then
intZeile = rngZelle.Row
End If
Next
MsgBox intZeile
End Sub
Gruß
Rainer
Antwort 5 von wmei vom 24.03.2021, 08:48 Options
Hallo Oliver, hallo Rainer,
das klappt soweit großes Danke an Euch beide.
Bei Rainer's Formel muß anstatt =0, ="" eingesetzt werden,
sonst bringt er ebenfalls nur die Zeile mit der letzten Formel.
Ich bin nur Amateur, mein Problem mit Euren Formeln ist dann gleich wieder sie so umzulegen , daß die Zellen direkt markiert
werden, so wie es "meine"Formel (von nighty abgekupfert) tut.
Schönen Tag noch,
wim
Antwort 6 von rainberg vom 24.03.2021, 09:06 Options
Hallo wim,
folgender Code färbt Dir die letzte Wertezelle rot.
Option Explicit
Sub Letzten_Zelle_mit_Wert()
Dim rngZelle As Range, rngBer As Range, intZeile As Integer
Set rngBer = Range("A8:A180")
rngBer.Interior.ColorIndex = xlNone
For Each rngZelle In rngBer
If rngZelle.Value <> "" Then
intZeile = rngZelle.Row
End If
Next
Cells(intZeile, 1).Interior.ColorIndex = 3
End Sub
Gruß
Rainer
Antwort 7 von wmei vom 24.03.2021, 09:20 Options
Hallo Rainer,
ich hab mich falsch ausgedrückt.
Mit markieren meine ich "Bereich markieren", für den nächsten Schritt zB. kopieren.
Das Finden des Bereiches ist immer nur die Vorbereitung eines
weiteren Schrittes und macht für mich das Makro dynamisch,
dh., ich muß nicht immer eine feste Zelle anspringen und mich
mit offset weiter bewegen. Ich hoffe Du erkennst was ich meine.
MfG
wim
PS
das mit =0 und ="" war nicht bei Dir sondern bei Oliver
sorry
Antwort 8 von rainberg vom 24.03.2021, 09:30 Options
Hallo wim,
etwas deutlicher könnte es schon sein.
Was verstehst Du unter "feste Zelle" ?
Welchen Bereich willst Du markieren und kopieren?
Bitte arbeite bei der Fragestellung mit Zell- und Bereichsadressen.
Gruß
Rainer
Antwort 9 von wmei vom 24.03.2021, 10:09 Options
Hallo Rainer,
ich habe eine Liste mit 180 Zeilen. In der Spalte A wird der Wert erzeugt der den Text in weiteren Spalten bewirkt.
Vor jedem Ausdruck ändert sich die Anzahl der Zeilen die
einen Wert enthalten. Mit der Formel markiere ich einfach das
Druckbereich um Leerzellen beim Ausdruck zu vermeiden oder
die Werte zu kopieren wenn ich das Formular zu einem bestimmten Zeitpunkt speichern möchte.
MfG
wim
Antwort 10 von rainberg vom 24.03.2021, 11:12 Options
Hallo wim,
wenn ich Dich richtig verstehe, willst Du nichts anderes als den Druckbereich dynamisch anzupassen, wobei das Kriterium der letzte Wert in Spalte A sein soll.
Das geht nach meiner Meinung auch ohne Makro, wenn man eine Bereichsnamen definiert.
Dazu müsste ich aber wissen, wie die Formel in Spalte A lautet und ob das Formelergebnis ein Zahlen- oder Textwert ist.
Gruß
Rainer
Antwort 11 von wmei vom 24.03.2021, 12:05 Options
Hallo Rainer,
das trifft den Nagel auf den Kopf in diesem Fall.
Wenn ich ein festes Druckbereich habe, steht in der Fußzeile
zB. "Seite 1 von 5" obwohl nur auf der ersten Seite wirklich
Daten stehen. Aus diesem Grund möchte ich in diesem Fall
nurt das Bereich markieren das Daten enthält.
Da meine Programierkenntnisse aber auf der Basis von
learn by doing entstanden sind und noch entstehen
benutze ich solche funtionierenden Sequenzen gern auch
für andere Zwecke.
Zu Deinen Fragen:
Der Wert in A ist ein Textwert nach folgendem Muster AX HTP30.
Die Formel lautet:WENN(ZEILEN($E$9:E166)>$I$1;"";SVERWEIS($G$1;INDIREKT(VERKETTEN(ADRESSE(VERGLEICH(Schmierplan!$G$1;Daten!$C$4:$C$787;0)+2+ZEILEN($F$8:F165);3;4;1;"Daten");":";ADRESSE(Schmierplan!$I$1+1+VERGLEICH(Schmierplan!$G$1;Daten!$C$3:$C$787;0);5;1;1)));3;FALSCH))
MfG
wim
Antwort 12 von rainberg vom 24.03.2021, 13:31 Options
Hallo wim,
verfahre wie folgt:
- öffne Deine Arbeitsmappe und hebe den bestehenden Druckbereich auf
- wähle im Menü "Einfügen" das Untermenü "Namen" und dort "Namen definieren"
- im erschienenen Fenster gibst Du unter "Namen" den Namen "Druckbereich" (ohne Gänsefüsschen) ein
- unter "Bezieht sich auf:" gibst Du folgende Formel ein, bestätigst mit "Übernehmen" und schließt das offene Fenster.
=BEREICH.VERSCHIEBEN(Tabelle1!$A$1;;;MAX((Tabelle1!$A$1:$A$180<>"")*ZEILE(Tabelle1!$1:$180));7)
Mit der letzten Zahl in der Formel, hier die 7, wird die letzte Spalte des Druckbereches bestimmt 7 = Spalte G (kannst Du beliebeig anpassen)
Nun sollte sich Dein Druckbereich ohne weiteres Zutun immer auf die Zeile letze Wertrezeile der Spalte A einstellen
Falls Du ein Makro in der Datei hast, welches auch den Druckbereich beeinflusst, lösche es vor der ganzen Aktion.
Gruß
Rainer
Antwort 13 von wmei vom 24.03.2021, 14:58 Options
Hallo Rainer,
hab's probiert, ich arbeite mit Office 2003.
Er übernimmt es einfach nicht.
1. Warum ist in Bereich nur eine Zelle angegeben
BEREICH.VERSCHIEBEN(Tabelle1!$A$1;
Gruß
wim
Antwort 14 von wmei vom 24.03.2021, 15:14 Options
Hallo Rainer,
sorry alles klar, ich hab immer darauf gewartet, daß er im Namensfeld links oben, wo man normalerweise das Druckbereich
anwählen kann, erscheint.
Es erscheint da nicht, funtioniert aber tadellos.
mit dieser dieser Brille habe ich "Bereich.Verschieben" noch nicht
gesehen.
Danke und großes Lob
wim
Antwort 15 von rainberg vom 24.03.2021, 15:20 Options
Hallo wim,
bei mir geht's, Formel ist getestet.
Leider kann ich nicht auf Deinen Rechner schauen.
Zitat:
1. Warum ist in Bereich nur eine Zelle angegeben
BEREICH.VERSCHIEBEN(Tabelle1!$A$1;
..... der Schein trügt, es ist nicht nur eine Zelle angegeben, $A$1 ist nur die Zelle von der die Funktion ausgeht.
Du solltest Dir die Syntax von BEREICH.VERSCHIEBEN mal in der Hilfe anschauen, ich verkneife es mir diese hier zu erläutern.
Gruß
Rainer