Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1248to1252
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Letzte belegte Zelle mit VBA

Letzte belegte Zelle mit VBA
Herbert
Hallo,
in einer Spalte habe ich in den Zellen von Zeile 4 - 53 Formeln stehen, die, je nach Bedingung einen Wert anzeigen, oder eben nichts mit "". Immer eine Zeile nach der anderen. Nun will ich per VBA die Zeile ermitteln, in der der letzte sichtbare Wert steht. Mit "iLastRow = Cells(Rows.Count, 1).End(xlUp).Row" wird mir nur die Zeile mit der letzten Formel angezeigt = 53. Ich stehe irgendwie auf dem Schlauch. Könnt Ihr mir bitte die Lösung sagen? Dafür vielen Dank im Voraus.
Servus
AW: Letzte belegte Zelle mit VBA
12.02.2012 16:20:10
Josef

Hallo Herbert,

Sub test()
  MsgBox FirstEmptyCell(Range("B4:B53")).Address
End Sub



Public Function FirstEmptyCell(Target As Range) As Range
  Dim vntRet As Variant, strRef As String
  
  With Target
    strRef = "'" & .Parent.Name & "'!" & .Address
    vntRet = Evaluate("MIN(IF(" & strRef & "="""",ROW(" & strRef & _
      ")+COLUMN(" & strRef & ")*10^-6))")
    If IsError(vntRet) Or vntRet = 0 Then Exit Function
    Set FirstEmptyCell = .Cells(Clng(Split(vntRet, ",")(0)) - .Rows(1).Row + 1, _
      Clng(Split(vntRet, ",")(1)) - .Columns(1).Column + 1)
  End With
End Function



« Gruß Sepp »

Anzeige
For x = 4 To 53 ...
12.02.2012 16:20:13
Matthias
Hallo
Für diesen kleinen Bereich kannst Du das so machen
Dim x&, MyRow&
For x = 4 To 53
If Cells(x, 1).Value  "" Then MyRow = Cells(x, 1).Row
Next
MsgBox MyRow
Gruß Matthias
Vielen Dank ihr 2
12.02.2012 16:33:55
Herbert
aber das ist nicht das was ich suche. Das ist viel zu umständlich und aufwändig. Vielleicht gibt es ja noch einen "Einzeilenlösung".
Servus
Sorry, mein Level ist < als Dein Level ...
12.02.2012 17:21:46
Matthias
Hallo
Dann lass die Schleife rückwärts laufen
Option Explicit
Sub DasIstNichtKompliziert()
Dim x&, MyRow&
For x = 53 To 4 Step -1
If Cells(x, 1).Value  "" Then MyRow = Cells(x, 1).Row: Exit For
Next
MsgBox MyRow
End Sub
Wenn das zu umständlich und zu aufwändig ist für Dich, bin ich raus.
Gruß Matthias
Anzeige
AW: Sorry, mein Level ist < als Dein Level ...
12.02.2012 17:29:33
Herbert
Hallo Matthias,
bitte nicht böse sein, aber die for - next-Schleife ist mir für meine Anforderung zu Zeitintensiv. So meinte ich das. Sonst ist Deine Lösung schon OK.
Servus
was ist daran umständlich? o.T.
12.02.2012 17:24:41
Josef
« Gruß Sepp »

AW: was ist daran umständlich? o.T.
12.02.2012 17:31:55
Herbert
Hallo Sepp,
im meinem Tool habe ich schon einmal mit einer UDF gearbeitet. Da ist er dann ständig hingesprungen, ohne dass es eine Veranlassung dazu gab. Und das kostet eben Zeit. Das meinte ich mit Umständlich.
Vielen Dank!
Servus
Anzeige
AW: was ist daran umständlich? o.T.
12.02.2012 17:41:03
Josef

Hallo Herbert,
wenn was "springt", dann hängt das wohl mit deinem Code zusammen.

« Gruß Sepp »

AW: was ist daran umständlich? o.T.
12.02.2012 18:12:09
Herbert
Hallo Sepp,
das wird schon so sein. Doch hatte ich auch keine Zeit das zu korrigieren. Application.Volatile könnte evtl. auch Abhilfe bringen. Mal sehen!
Servus
AW: was ist daran umständlich? o.T.
12.02.2012 18:49:45
Josef

Hallo Herbert,
was soll das Application.Volatile bringen? Das verwendet man doch nur bei Tabellenfunktionen.
Vielleicht solltest du mal genauer schildern, was du erreichen willst.

« Gruß Sepp »

Anzeige
AW: was ist daran umständlich? o.T.
12.02.2012 18:55:56
Herbert
Hallo Sepp,
vielen Dank für Dein Interesse und Dein Angebot. Doch es muss jetzt nicht vertieft werden. Die Lösung von Tino ist ja das was ich suchte.
Servus
AW: Vielen Dank ihr 2
12.02.2012 17:47:13
Tino
Hallo,
wie wäre es mit dieser Variante, gibt die letzte Zeile zurück die einen Wert "" ausgibt zurückt.
Dim lngLetzte
lngLetzte = [=LOOKUP(2,1/(Tabelle1!A:A""),ROW(A:A))]
Gruß Tino
AW: Vielen Dank ihr 2
12.02.2012 18:10:26
Herbert
Hallo Tino,
wieso erhalte ich da einen "Fehler 2036"?
Servus
AW: Vielen Dank ihr 2
12.02.2012 18:25:26
Herbert
Hallo Tino,
nun klappts! Ich habe den Abfragebereich eingegrenzt ("Q1:Q48""),ROW(Q1:Q48)") und nun klappt es! Vielen Dank!
Servus
AW: Vielen Dank ihr 2
12.02.2012 18:42:13
Tino
Hallo,
ich würde noch die Tabelle dazuschreiben solltest Du dich mal auf einer anderen befinden
und besser gleich mit Hochkomma dann gibt es keine Probleme wenn der Tabellenname ein Leerzeichen enthält.
lngLetzte = [=LOOKUP(2,1/('Tabelle1'!Q1:Q48""),ROW('Tabelle1'!Q1:Q48))]
Gruß Tino
Anzeige
AW: Vielen Dank ihr 2
12.02.2012 18:46:34
Herbert
Hallo Tino,
danke für den Tipp, doch das habe ich natürlich gemacht! Aber wenn Du schon gerade noch mal "dran" bist, könntest Du mir bitte noch die beiden Parameter "2,1" erläutern, damit ich sicher bin, ob ich es auch richtig verstanden habe?
Servus

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige