Microsoft Excel

Herbers Excel/VBA-Archiv

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

letzte Spalte ermitteln | Herbers Excel-Forum


Betrifft: letzte Spalte ermitteln von: PETER
Geschrieben am: 21.11.2009 19:55:22

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

  

Betrifft: Cells(5, Columns.Count).End(xlToLeft).Column von: Matthias L
Geschrieben am: 21.11.2009 20:00:54

Hallo Vielleicht so:

Sub letzte()
MsgBox Cells(5, Columns.Count).End(xlToLeft).Column 'letzte Spalte
End Sub
Gruß Matthias


  

Betrifft: AW: Cells(5, Columns.Count).End(xlToLeft).Column von: PETER
Geschrieben am: 21.11.2009 20:11:26

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


  

Betrifft: AW: Cells(5, Columns.Count).End(xlToLeft).Column von: Gerd L
Geschrieben am: 21.11.2009 20:28:45

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


  

Betrifft: AW: Cells(5, Columns.Count).End(xlToLeft).Column von: PETER
Geschrieben am: 21.11.2009 22:41:52

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


  

Betrifft: ? vielleicht der Punkt von: Matthias L
Geschrieben am: 22.11.2009 09:38:58

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


  

Betrifft: AW: ? vielleicht der Punkt von: PETER
Geschrieben am: 22.11.2009 21:03:50

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


  

Betrifft: AW:dum musst schon die richtige Zeile verwenden von: Daniel
Geschrieben am: 21.11.2009 20:05:30

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


  

Betrifft: DANK dir für die Erläuterung ! :) OT von: PETER
Geschrieben am: 22.11.2009 21:02:18




  

Betrifft: letzte Zelle daher auch Spalte mit Function von: Tino
Geschrieben am: 22.11.2009 07:03:02

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


  

Betrifft: AW: letzte Zelle daher auch Spalte mit Function von: PETER
Geschrieben am: 22.11.2009 21:05:19

Hallo Tino
Dank Dir für Deine Lösung !
Werde deine Hinweise künftig "versuchen" zu verstehen und zu berücksichtigen :)
Besten Dank
PETER


Beiträge aus den Excel-Beispielen zum Thema "letzte Spalte ermitteln"