Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
836to840
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
836to840
836to840
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Suchen der letzten beschriebenen ausgeblendeten Sp

Suchen der letzten beschriebenen ausgeblendeten Sp
19.01.2007 19:16:43
Eugen_I
Hallo,
ich suche nach einem Befehl mit dem ich die letzte beschriebene Spalte bestimme. Problem ist, dass diese Spalte manchmal ausgeblendet ist, so dass sie, im ausgeblendetem Zustand, übersehen wird. Zumindest mit dem Befehl :
cells().end(xltoleft).column
Kennz jemand ein Befehl zur suche nach der letzten Spalte unabhängig davon ob diese ausgeblendet ist oder nicht.
Danke im Voraus!

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchen der letzten beschriebenen ausgeblendeten Sp
19.01.2007 21:08:57
K.Rola
Hallo,
einen einfachen Befehl gibt es da nicht, mal ein allgemeines Beispiel
für Zeile 1
Option Explicit
Sub letzte_Spalte()
Dim S(3) As Long
S(0) = 1
If Application.CountA(Rows(1)) > 0 Then
S(1) = WorksheetFunction.Match("", Rows(1), -1)
End If
If Application.Count(Rows(1)) > 0 Then
S(2) = WorksheetFunction.Match(-1E+307, Rows(1), -1)
End If
MsgBox Application.Max(S)
End Sub

Keyboard not found, press F8 to continue or any key to abort!


Anzeige
AW: Suchen der letzten beschriebenen ausgeblendeten Sp
19.01.2007 21:23:19
Beate Schmitz
Hallo,
ich habe diesen Code getestet und er scheint zu gehen, auch wenn die letzten genutzten Spalten ausgeblendet sind:
Sub Letzte_benutzte_Spalte_inkl_ausgeblendeten()
MsgBox "Letzte benutzte Spalte " & ActiveSheet.UsedRange.Columns.Count
End Sub


Nachdem ich nun aber K.Rolas sehe, zweifele ich, ob meiner nicht noch irgendwelche Fehlermöglichkeiten enthält, weil er so kurz ist im Vergleich. Bitte gegentesten und bin an Antwort interessiert.
Gruß,
Beate
Anzeige
AW: Suchen der letzten beschriebenen ausgeblendeten Sp
19.01.2007 21:29:59
K.Rola
Hallo,
UsedRange und SpecialCells sind recht unsichere Kandidaten, ich verwende sie
nur ungern.
Gruß K.Rola
AW: Suchen der letzten beschriebenen ausgeblendeten Sp
19.01.2007 21:34:27
K.Rola
Hallo,
schreib mal in ein jungfräuliches Blatt in F1234 etwas rein und lass deinen
Code laufen, der setzt voraus, dass UsedRange in A1 beginnt.
Gruß K.Rola
AW: Suchen der letzten beschriebenen ausgeblendeten Sp
19.01.2007 21:38:24
Nepumuk
Liebste K.Rola,
das ist doch kein Problem:
Public Sub test()
    MsgBox Tabelle1.UsedRange.Column + Tabelle1.UsedRange.Columns.Count - 1
End Sub

Gruß
Nepumuk
Anzeige
AW: Suchen der letzten beschriebenen ausgeblendeten Sp
19.01.2007 21:42:45
K.Rola
Hallo Nepumuk,
schon klar, aber leider bleibt UsedRange öfter erhalten, obwohl
inzwischen schon Werte im Randbereich gelöscht wurden, das wird
erst nach Speicherung korrigiert, also nicht immer verwendbar.
Gruß K.Rola
AW: Suchen der letzten beschriebenen ausgeblendeten Sp
19.01.2007 21:49:02
Nepumuk
Liebste K.Rola,
in einer ausgeblendeten Spalte löschen? Ok, das geht auch, aber nur per Makro. Im Endeffekt hast du schon Recht, lieber auf der sichern Seite bleiben.
Gruß
Nepumuk
AW: Suchen der letzten beschriebenen ausgeblendeten Sp
19.01.2007 21:59:50
K.Rola
Hallo Nepumuk,
könnte ja vorm Ausblenden gelöscht worden sein, oder?
Gruß K.Rola
@ K.Rola
19.01.2007 23:14:29
Beate Schmitz
Hallo,
danke für deine Antwort. Ich kenne auch den Unterschied zwischen UsedRange und dem tatsächlichen UsedRange. Soviel nur vorab.
Ich habe hier die Antworten gelesen, auch die von Max darunter.
Und deine, seine und meine Lösung getestet, indem ich in ein jungfräulichem Blatt nur Zelle F1234 beschrieben habe.
Ergebnis:
Anzeige
AW: @ K.Rola
19.01.2007 23:28:32
K.Rola
Hallo,
mein Beispiel bezog sich auf Zeile 1, do You remember?
Hallo,
einen einfachen Befehl gibt es da nicht, mal ein allgemeines Beispiel
für Zeile 1
Option Explicit

Sub letzte_Spalte()
Dim S(3) As Long
S(0) = 1
If Application.CountA(Rows(1)) > 0 Then
S(1) = WorksheetFunction.Match("", Rows(1), -1)
End If
If Application.Count(Rows(1)) > 0 Then
S(2) = WorksheetFunction.Match(-1E+307, Rows(1), -1)
End If
MsgBox Application.Max(S)
End Sub

Gruß K.Rola
Es beweist sich wieder...
20.01.2007 00:11:27
Beate Schmitz
...wer lesen kann, ist klar im Vorteil.
Liebe K.Rola,
es wurmt mich, dass es mit Spalten so verhext ist.
Gute Nacht,
Beate
Anzeige
ANY KEY
19.01.2007 21:26:06
Nepumuk
Hi,
"or any key" diese Taste ist etwas versteckt. Normalerweise findet ihr sie hier:
Userbild
Gruß
Nepumuk
AW: Suchen der letzten beschriebenen ausgeblendete
20.01.2007 02:07:18
Uwe Küstner
Hallo Eugen,
hier noch ein Vorschlag:
Sub Test()
MsgBox LetzteNichtleereSpalte(Sheets("Tabelle1").Rows(1234))  'für Zeile 1234
MsgBox LetzteNichtleereSpalte(Sheets("Tabelle1").Rows(3))     'für Zeile 3
MsgBox LetzteNichtleereSpalte(Sheets("Tabelle1").Cells)       'für alle Zeilen
End Sub
Function LetzteNichtleereSpalte(Bereich As Range) As Integer
On Error Resume Next
LetzteNichtleereSpalte = Range(Bereich.Parent.Columns(1), _
Bereich.SpecialCells(xlCellTypeConstants)).Columns.Count
End Function
Gruß Uwe
Anzeige
AW: Letzte beschriebene (ausgeblendete) Spalte
20.01.2007 07:49:33
Erich G.
Hallo Eugen,
aufbauend auf Uwes Funktion noch ein Vorschlag:
Function LetzteBenutzteSpalte(rng As Range, _
Optional Guelt As Boolean, Optional Komm As Boolean) As Integer
On Error Resume Next
With rng.Parent
LetzteBenutzteSpalte = _
Range(.Columns(1), rng.SpecialCells(xlCellTypeConstants)).Columns.Count
LetzteBenutzteSpalte = Application.Max(LetzteBenutzteSpalte, _
Range(.Columns(1), rng.SpecialCells(xlCellTypeFormulas)).Columns.Count)
If Guelt Then LetzteBenutzteSpalte = Application.Max(LetzteBenutzteSpalte, _
Range(.Columns(1), rng.SpecialCells(xlCellTypeAllValidation)).Columns.Count)
If Komm Then LetzteBenutzteSpalte = Application.Max(LetzteBenutzteSpalte, _
Range(.Columns(1), rng.SpecialCells(xlCellTypeComments)).Columns.Count)
End With
On Error GoTo 0
End Function
Damit lassen sich auch Zellen mit Gültigkeitsprüfung oder Kommentar berücksichtigen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Bitte alten Beitrag ignorieren - neue Antw.
21.01.2007 07:16:01
Erich G.
Hallo Eugen,
in meinem Beitrag vom 20.01.2007 07:49:33 habe ich Unsinn verzapft - sorry! (... kurz vor dem Frühstück ...)
So klappt es hoffentlich besser (auch vor dem Frühstück):
Option Explicit
Function UnbenutzteSpalte(rngB As Range, _
Optional Gueltig As Boolean, _
Optional Komment As Boolean) As Integer
UnbenutzteSpalte = LetzteBenutzteSpalte(rngB, Gueltig, Komment) + 1
If UnbenutzteSpalte > rngB.Column + rngB.Columns.Count - 1 Then UnbenutzteSpalte = -1
End Function
Function LetzteBenutzteSpalte(rng As Range, _
Optional Guelt As Boolean, _
Optional Komm As Boolean) As Integer
Dim cc As Integer
cc = LastColSpec(rng, xlCellTypeConstants)
cc = Application.Max(cc, LastColSpec(rng, xlCellTypeFormulas))
If Guelt Then cc = Application.Max(cc, LastColSpec(rng, xlCellTypeAllValidation))
If Komm Then cc = Application.Max(cc, LastColSpec(rng, xlCellTypeComments))
LetzteBenutzteSpalte = cc
End Function
Function LastColSpec(rng As Range, specType As Integer) As Integer
Dim rngArea As Range ' letzte Area
Set rngArea = rng.SpecialCells(specType).Areas(rng.SpecialCells(specType).Areas.Count)
MsgBox rng.SpecialCells(specType).Address
LastColSpec = rngArea.Columns(rngArea.Columns.Count).Column  ' letzte Spalte
End Function
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: neue Version
21.01.2007 12:44:04
Erich G.
Hallo Eugen,
vor dem Frühstück ist wohl bei mir schlecht...
Hier eine neue Version:
Option Explicit
Sub TestLetzteSpalte()
Worksheets.Add
Cells(1, 7) = 100
Cells(2, 8) = "="""""
Cells(3, 9) = "x"
Cells(3, 9).ClearContents
Cells(4, 10).Validation.Add Type:=xlValidateWholeNumber, _
AlertStyle:=xlValidAlertStop, Operator:=xlNotEqual, Formula1:="7"
MsgBox LetzteBenutzteSpalte(Sheets(1).Range("B1:AA4"), 0)   ' Bereich mit 5 Zeilen
MsgBox letzteSpalte(Range("B1:AA4"))
MsgBox LetzteBenutzteSpalte(Sheets(1).Range("B1:AA4"), 1)   ' mit Gültigkeitsprüfung
MsgBox UnbenutzteSpalte(Sheets(1).Range("B1:AA4"), 0)
MsgBox UnbenutzteSpalte(Sheets(1).Range("B1:AA4"), 1)
End Sub
Function UnbenutzteSpalte(rngB As Range, _
Optional Gueltig As Boolean, _
Optional Komment As Boolean) As Integer
UnbenutzteSpalte = LetzteBenutzteSpalte(rngB, Gueltig, Komment) + 1
If UnbenutzteSpalte > rngB.Column + rngB.Columns.Count - 1 Then UnbenutzteSpalte = -1
End Function
Function LetzteBenutzteSpalte(rng As Range, _
Optional Guelt As Boolean, _
Optional Komm As Boolean) As Integer
Dim cc As Integer
cc = LastColSpec(rng, xlCellTypeConstants)
cc = Application.Max(cc, LastColSpec(rng, xlCellTypeFormulas))
If Guelt Then cc = Application.Max(cc, LastColSpec(rng, xlCellTypeAllValidation))
If Komm Then cc = Application.Max(cc, LastColSpec(rng, xlCellTypeComments))
LetzteBenutzteSpalte = cc
End Function
Function LastColSpec(rng As Range, specType As Integer) As Integer
Dim varAreas, rngA As Range
On Error GoTo XEnd
Set varAreas = rng.SpecialCells(specType).Areas
For Each rngA In varAreas
LastColSpec = Application.Max(LastColSpec, rngA.Columns(rngA.Columns.Count).Column)
Next rngA
XEnd:
On Error GoTo 0
End Function
Function letzteSpalte(rng As Range) As Integer
Dim zz As Long
On Error Resume Next
For zz = 1 To rng.Rows.Count
If Application.CountA(rng.Rows(zz)) > 0 Then letzteSpalte = Application.Max( _
letzteSpalte, rng.Rows(zz).Column - 1 + Application.Match("", rng.Rows(zz), -1))
If Application.Count(rng.Rows(zz)) > 0 Then letzteSpalte = Application.Max( _
letzteSpalte, rng.Rows(zz).Column - 1 + Application.Match(-1E+307, rng.Rows(zz), -1))
Next zz
On Error GoTo 0
End Function
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Unbenutzte Spalte
20.01.2007 08:27:57
Erich G.
Hallo Eugen,
nach dem Frühstück noch eine kleine Ergänzung:
Function UnbenutzteSpalte(rngB As Range, _
Optional Gueltig As Boolean, _
Optional Komment As Boolean) As Integer
UnbenutzteSpalte = LetzteBenutzteSpalte(rngB, Gueltig, Komment) + 1
If UnbenutzteSpalte > rngB.Column + rngB.Columns.Count - 1 Then UnbenutzteSpalte = -1
End Function
Die Funktion liefert die Nummer der Spalte hinter der letzten benutzten Spalte eines Bereichs.
Wenn alle Spalten des Bereichs benutzt sind, liefert sie -1 als Fehlerindikator.
(Rechts vom Bereich können natürlich noch unbenutzte Spalten stehen.)
UnbenutzteSpalte() ist nicht die Nummer der ersten unbenutzten Spalte eines Bereichs.
Die könnte auch im Inneren des Bereichs liegen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Unbenutzte Spalte
21.01.2007 14:50:31
Eugen_I
Hi Erich,
ich habe das Problem gelöst in dem ich von der ersten Spalte bis zur letzten beschriebenen suchen. Da ich keine leeren Spalten zwischen habe, funktioniert es auch so:
.range().currentregion.columns.count
Danke für die Tipps, ich brauche aber noch bishen Zeit um diese Vorgänge zu verstehen, mache VBA erst seit Anfang des Jahres.

160 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige