AW: Variable Rahmengestaltung und zählen
23.10.2009 10:41:02
Björn
Hallo,
zuerst mal willkommen im Forum :-)
Fragestellung ist für den Anfang gar nicht schlecht, da haben wir schon schlimmeres gesehen ;-)
Ne, im Ernst, die meisten Fragen sind so gestellt, dass nicht alles auf Anhieb beantwortet werden kann, ist aber auch nicht schlimm.
So, nun zu Deinem Problem. Du schreibst, das es immer 10 Spalten sind, aber Excel soll automatisch erkennen, wieviele Spalten vorhanden sind? Warum?
Das mit den Zeilen kannst Du auf 2 Arten lösen.
Du kannst Dir über den Befehl Cells(Rowindex,Columnindex) einen Bezug variabel erstellen.
Beispiel, beim Makrorekorder werden deine Bezüge fest übernommen, z. B. für B4 steht dann Range("B4"). Mit Cells kannst du über Zeilen- und Spaltennummer addressieren, würde dann für B4 so aussehen Cells(4,2).
Vorteil ist hierbei, dass du statt der Zahlen auch Variablen einsetzen kannst, die dann z.B. einfach hochgezählt werden.
1. Weg wäre die letzte befüllte Zeile ermitteln.
Dazu verwende mal wieder den Makrorekorder und Klicke auf irgendeine befüllte Zelle in Spalte a.
Rekorder starten, Strg+Richtungstaste (Pfeil) unten drücken. Rekorder beenden.
Durch Steuerung + Pfeiltaste springt Excel immer auf die letzte befüllte Zelle in der angegeben Richtung.
Nun ist die letzte Zeile markiert und Du kannst dir die Zeile in eine Variable auslesen.
Dim letzteZeile as integer
letzteZeile = Selection.Row
Nun kannst Du mit einer Schleife die Zellen in spalte A bis zur letzten durchgehen:
Dim i As Integer 'Variable für Zähler
For i = 1 To letzteZeile 'Evtl. Startzeile anpassen, wenn noch überschriften da sind
Cells(i, 1).Value = ... 'nur beispielhaft. Du hast ja Dein Makro schon...
Next
Zweite Lösung wäre etwas unschöner, ich sag es dir aber trotzdem.
Du kannst jede Zelle in A prüfen, ob was drin steht und nur dann was ausführen.
Entweder über for each oder einfach mit einer If-Schleife.
Bei dem Rahmen ist ja auch nur die Adresse das Problem gewesen (Code für Rahmen bekommst du wieder über Rekorder).
Die Adresse hast Du ja jetzt. erste Zeile und Spalte sind bekannt, ich gehe mal von A1 aus.
Letzte Spalte ist J (Spaltennummer 10), letzte Zeile haben wir oben ermittelt.
Deine Addressierung für die ganze Tabelle wäre dann:
Range(Cells(1,1),Cells(letzteZeile,10))
Hoffe, das hat Dir geholfen.
Gruß
Björn B.