Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1116to1120
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
letzte Spalte ermitteln
PETER
Hey
ich bin auf der Suche nach der Möglichkeit, mit per VBA die letzt befüllte Spalte zu ermitteln
Beginnen ab der Zelle C5 stehen Werte bis zur irgendeiner nachfolgenden Zelle in Zeile 5
For Spalte = 3 To .Cells(1, Columns.Count).End(xlToLeft).Column 'letzte Spalte
Dieser Code funktioniert irgendwie nicht :?
Kann jemand helfen ?
Vielleicht auch eine kurze Erklärung der Synthax ...
LG PETER
Cells(5, Columns.Count).End(xlToLeft).Column
21.11.2009 20:00:54
Matthias
Hallo Vielleicht so:
Sub letzte()
MsgBox Cells(5, Columns.Count).End(xlToLeft).Column 'letzte Spalte
End Sub
Gruß Matthias
AW: Cells(5, Columns.Count).End(xlToLeft).Column
21.11.2009 20:11:26
PETER
Hallo Matthias
leider nicht
habe den Code wie folgt geändert
For Zeile = 6 To .Cells(.Rows.Count, 1).End(xlUp).Row 'letzte Zeile
soll in der Spalte A ab Zeile 6 (A6) den letzten Wert finden --- z.B. A450
For Spalte = 3 To .Cells(5, Columns.Count).End(xlToLeft).Column 'letzte Spalte
soll in der Zeile 5 ab Spalte 3 (C5) den letzten Wert finden z.B. C25
Was ist an meinem Code falsch ?
Gruss PETER
Anzeige
AW: Cells(5, Columns.Count).End(xlToLeft).Column
21.11.2009 20:28:45
Gerd
For Spalte = 3 To .Cells(5, Columns.Count).End(xlToLeft).Column 'letzte Spalte
soll in der Zeile 5 ab Spalte 3 (C5) den letzten Wert finden z.B. C25
Hallo Peter,
C25 ist in der Spalte 3 = C
Also müsstest Du in Spalte C nach der letzten Zeile mit Wert suchen
P.S.: .Cells(....) Der Punkt vor "Cells" erwartet den Bezug innerhalb eines With ... End With - Blocks auf
ein Objekt, z.B.
With ActiveSheet
.Cells(...........
End With
Gruß Gerd
AW: Cells(5, Columns.Count).End(xlToLeft).Column
21.11.2009 22:41:52
PETER
Hallo Gerd,
sorry, aber ich verstehe das gerad nicht :(
hier mal mein kompletter code
Sub MatrixAusfuellen()
Dim wksMatrix As Worksheet, wksQuelle As Worksheet
Dim Zeile As Long, Spalte As Long, StatusCalc As Long
On Error GoTo Fehler
Dim DatAnfang As Date
DatAnfang = Now
Set wksMatrix = Workbooks("Matrix.xls").Worksheets("Matrix")
Set wksQuelle = Workbooks("Berechnung.xls").Worksheets("Calculation")
With Application
StatusCalc = .Calculation
.Calculation = xlCalculationManual
.EnableEvents = False
.ScreenUpdating = False
End With
With wksMatrix
For Zeile = 6 To .Cells(.Rows.Count, 1).End(xlUp).Row   'letzte Zeile
For Spalte = 3 To .Cells(5, Columns.Count).End(xlToLeft).Column  'letzte Spalte
Application.StatusBar = "Zeile " & Zeile & " / Spalte " & Spalte & " wird bearbeitet."
wksQuelle.Range("M1").Value = .Cells(Zeile, 1).Value
wksQuelle.Range("M5").Value = .Cells(1, Spalte).Value
wksQuelle.Calculate                                   ' neu
.Cells(Zeile, Spalte).Value = _
Application.WorksheetFunction.Round(wksQuelle.Range("M10").Value, 3) 'neu
Next
Next
End With
Fehler:
With Application
.StatusBar = False
StatusCalc = .Calculation
.Calculation = StatusCalc
.EnableEvents = True
.ScreenUpdating = True
End With
With Err
Select Case .Number
Case 0 'kein fehler
Case Else
MsgBox Format(Now - DatAnfang, "hh:mm:ss"), , "Makro-Laufzeit  +  Fehler-Nr. " & .Number & vbLf  _
& .Description
End Select
End With
MsgBox Format(Now - DatAnfang, "hh:mm:ss"), , "Makro-Laufzeit  -  FERTIG!"  'alt:  "Fertig!"
End Sub
Es wird eine Matrix "abgearbeitet" - Alle Werte der Spalte A (ab A6 nach unten) und
alle Zeilen (ab C5 nach rechts)
Ich glaub, ich muss noch viel dazulernen ;O
Gruss PETER
Anzeige
? vielleicht der Punkt
22.11.2009 09:38:58
Matthias
Hallo
Ich habs nicht nachgebaut und somit auch nicht getestet, aber
evtl. fehlt da nur ein Punkt
bei Cells(.Rows.Count, 1) hast Du vor Rows dem Punkt gesetzt bei Columns.Count nicht.
For Zeile = 6 To .Cells(.Rows.Count, 1).End(xlUp).Row 'letzte Zeile
For Spalte = 3 To .Cells(5, .Columns.Count).End(xlToLeft).Column 'letzte Spalte
Das ist aber nur so eine Vermutung.
Gruß Matthias
AW: ? vielleicht der Punkt
22.11.2009 21:03:50
PETER
Hallo Matthias
Dank Dir für deinen Ansatz.
Leider funktioniert das auch nicht
ich glaub ich werd wohl besser auf die Suche nach einer anderen Lösung gehen
Gruss PETER
Anzeige
AW:dum musst schon die richtige Zeile verwenden
21.11.2009 20:05:30
Daniel
Hi
wenn die befüllten Spalten in Zeile 5 geprüft werden sollten, solltest du nicht .Cells(1,... schreiben sondern lieber .Cells(5,...
zur erklärung der Syntax:
.Cells muss ich hoffentlich nicht erkläeren
Columns.Count liefert die Anzahl der Spalten im aktiven Tabllenblatt (dh. bis Excel 2003 immer 256)
.End(xltoLeft) macht das gleiche, wie wenn du eine Zelle markiert, dann die END-Taste drückst und dann die PFEIL-LINKS Taste
dh. der Code geht in letzte Zelle der Zeile 1, springt dann von dort nach links in die erste befüllte Zelle der Zeile 1 und gibt deren Spaltennummer als Wert zurück.
dieser Wert wird dann als Endpunkt der FOR-Schleife verwendet.
Gruß, Daniel
Gruß, Daniel
Anzeige
DANK dir für die Erläuterung ! :) OT
22.11.2009 21:02:18
PETER
letzte Zelle daher auch Spalte mit Function
22.11.2009 07:03:02
Tino
Hallo,
hier eine Möglichkeit die letzte Zelle im benutzten Bereich zu finden,
damit hast Du auch die letzte Spalte.
Ist eigentlich die die letzte Zelle im Usedrange, aber wie bekannt ist, ist diese oft unzuverlässig,
wenn Zellen nicht richtig gelöscht wurden.
Function FindLetzte(mySH As Worksheet) As Range
Dim LRow As Long, LCol As Long
Dim A As Long
 
 With mySH.UsedRange
   On Error Resume Next
        'Finde Zeile 
        LRow = .Find("*", , xlValues, xlWhole, xlByRows, xlPrevious, False, False).Row
        LRow = Application.Max(LRow, .Find("*", , xlFormulas, xlWhole, xlByRows, xlPrevious).Row)
        If LRow = 0 Then LRow = 1
   
        'Finde Spalte 
        For A = .Columns(.Columns.Count).Column To .Columns(1).Column Step -1
              LCol = mySH.Columns(A).Find("*", , xlValues, xlWhole, xlByRows, xlPrevious).Column
              LCol = Application.Max(LCol, mySH.Columns(A).Find("*", , xlFormulas, xlWhole, xlByRows, xlPrevious).Column)
              If LCol > 1 Then: LCol = A: Exit For
        Next A
        If LCol = 0 Then LCol = 1
 End With
 
 Set FindLetzte = mySH.Cells(LRow, LCol)
End Function


Sub Beispiel()
 MsgBox FindLetzte(ActiveSheet).Address
End Sub
Gruß Tino
Anzeige
AW: letzte Zelle daher auch Spalte mit Function
22.11.2009 21:05:19
PETER
Hallo Tino
Dank Dir für Deine Lösung !
Werde deine Hinweise künftig "versuchen" zu verstehen und zu berücksichtigen :)
Besten Dank
PETER

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige