Excel 2013 VBA Grundkurs

Cells

Testen Sie unsere 1985 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Sie können mehrere Zellen in einem Bereich mit einer For-Each-Schleife untersuchen oder direkt mit einer SpecialCells-Funktion markieren.

Transkript

Sobald Sie in einem Bereich, also sagen wir, in einer Selection, mit größerem Ausmaß oder dem im UsedRange mit vielen Zellen arbeiten, müssen Sie auch irgendwie mit denen umgehen können. Das möchte ich Ihnen in diesem Teil zeigen. Also, mit Sub AlleZellAdressen einfach mal für einen beliebigen Bereich alle Zelladressen ermitteln, in den Direktbereich reinschreiben. Das ist im Grunde egal, ob sie jetzt Zelladressen rausschreiben oder mit der Zelle selber was machen. Technisch ist es identisch. Also, wir brauchen wie immer ein Range-Objekt, Dim rngDies As Range. Sie merken schon, ich benenne das tenentiell ein bisschen lieblos. Das ist einfach: dieser Bereich, diese Zelle, was auch immer. Wenn ich davon ausgehe, dass es viele Zellen in einem Bereich gibt, dann bietet es sich an, um nicht zu sagen, dann erzwingt es fast, eine ForEach-Schleife. Die ist nämlich am einfachsten, For Each rngDies In, und jetzt muss ich den Bereich nennen. Der könnte z.B. Selection sein oder weil das jetzt praktischer ist, in ActiveSheet.UsedRange. Und das Next nicht vergessen. Und für alles, was in diesem Benutzerbereich drin ist, möchte ich mit Debug.Print einfach die Zelladresse rausschreiben. Das ist die einfachste Kontrolle. Also, rngDies.AddressLocal. Das ist die einfachste Kontrolle, ob alle Zellen erwischt worden sind. Und wenn wir sie sowieso gerade in der Hand haben, können wir damit noch verketten, rngDies.Value, was die für einen Inhalt haben. Soweit, erstmal der Code. Sie sehen, extrem kurz. Mit For-Each ist man immer sehr sehr kurz. Und mit Alt + F11 gucken wir mal eben was hier so markiert ist. Ich fange mal ganz harmlos an, mit dem inzwischen etwas veränderten Beispiel. Da stehen irgendwo ein paar Zeilen. Und wenn ich das jetzt ausführe, brauche ich unten ein klein bisschen mehr Platz, dann stehen hier mit F5 alle Zellen nacheinander. Sie können es sich in Ruhe angucken, das geht zeilenweise durch: B10, C10 usw., und dann B11 usw. Also, es ist alles, was ich hier brauche. Und wenn Sie ganz oben gucken, hat natürlich auch bei den Titeln angefangen. Ich mache mit Strg + A hier mal wieder alles markiert und weg. Soweit hat das wunderbar geklappt. Und weil das so leicht ist, kommt man auf die Idee, das für andere Gelegenheiten auch anzuwenden. Ich zeige Ihnen noch mal eben eine solche andere Gelegenheit. Hier, der UsedRange ist das hier. Ich stelle mich aber mal irgendwo hin. Da sind einige Zellen leer und die will ich ignorieren. Also, wäre: man versucht dies zu kopieren und nicht alle Zelladressen, sondern alle Zellen mit Zahl zu benutzen. Das bedeutet, dass ich prüfen muss, ob es eine Zahl ist. Dafür gibt es freundlicherweise eine fertige Funktion. Die heißt IsNumeric. Und möchte einen Inhalt wissen, in diesem Fall also von rngDies den Value. Und die antwortet dann mit True und False, wenn das nummerisch, nämlich eine Zahl ist, oder nicht. Das will ich nur erstmal so ausdrucken, um dann den ersten Fehler schon zu entdecken. Deswegen gebe ich mir die Mühe mit dem Debug.Print, das man genau sieht, was jetzt passiert und was nicht. Noch einmal prüfen, mit Alt + F11, ich bin in dem richtigen Blatt. Wir können uns irgendwo hinstellen. Es sollte als erste Zelle E8 auftauchen und als letzte Zelle F13. Und schön wäre, wenn wir... 2, 4, 6, 7 Ergebnisse sehen würden. Dann schauen wir mal. Also, mit F5 starten. Und Sie sehen es schon an dem Value, deswegen habe ich den mitausgegeben. Das sind alle Zellen, auch die leeren. Das ist nämlich das lästige dabei. IsNumeric kommt für ein Leereintrag auch zu der Erkenntnis, das sei eine Zahl. Also, muss ich jetzt zusätzlich prüfen: And gleichzeitig soll nämlich rngDies.Value, ungleich - leer sein. Es soll also nicht ein Leereintrag vorhanden sein. Das unten nochmal wegschmeißen. Dann sind wir dem schon ein bisschen näher dran. Also, mit F5, sehen Sie jetzt: 2, 4, 6, 7 Zahlen. Es sind genau die, die ich sehen wollte, alle sieben Zahlen. Soweit, so einfach. Und das würde jetzt dazu verführen z.B. innerhalb dieses Bereichs die zu markieren, bunt zu machen oder sonst was. Und da würde ich ganz gerne nochmal kurz erwähnen: das ist nicht nötig. Das kann Excel besser. Das kriegen Sie letzten Endes in einer einzigen Zeile hin. Ich will Ihnen kurz zeigen, wie Sie das zu Fuß hinkriegen würden. Das ist nämlich der Trick dabei. Wenn Sie diesen Bereich hier markieren und dann mit der F5-Taste, allerdings hier im Excel-Tabellenblatt, den Gehe zu-Dialog aufrufen. Der ist wenig spannend normalerweise. Aber der hat unten links eine Schaltfläche, die es in sich hat. Mit Inhalte können Sie auswählen, was Sie von dieser Markierung aus jetzt sehen wollen. Der ist nicht besonders intuitiv gestaltet. Z.B. wenn Sie Konstanten auswählen, gelten diese vier Checkboxen genauso, wie wenn Sie Formeln auswählen. Da muss man erstmal darauf kommen. Und das mit Konstanten auch Zahlen gemeint sind, kann man vielleicht noch gerade erkennen. Und das sind die, die ich brauche. Ich will also alle Konstanten haben und zwar nur die, die Zahlen sind. Und angesichts dieses markierten Bereichs wird er jetzt reduziert, nach dem OK auf genau die, die ich eben ermittelt hatte. Und das lässt sich nachbilden. Dieser Dialog lässt sich sozusagen per VBA erzeugen. Also... nee, brauchen wir gar nicht kopieren. Das geht zu Fuß viel schneller. Also, Sub AlleZellenMitZahlMarkieren, mache ich jetzt mal einfach nur. Das bedeutet, ich fange an mit ActiveSheet.UsedRange, leider weil ActiveSheet so unspezifisch, ist es nicht angeboten. Und brauche jetzt ein Befehl, der heißt SpecialCells, besondere Zellen. Das ist dieser weiterer Optionen-Dialog. Und der hat eine Konstante im ersten Argument, die heißt xlCellTypeConstants. Und das lässt es man sich am besten aufzeichnen. Als zweiten Wert möchte diese Funktion wissen, welche Checkboxen Sie angekreuzt haben. Die alle zusammen ergeben einfach die 23, das ist am bequemsten. Denn wir haben im Moment nichts anderes drin. Und dann mit .Select genau die auswählen. Diese eine Zeile schafft dasselbe, was wir da oben mit dem Select zur Not hätten machen müssen. Noch einmal gucken, dass sie nicht zufällig markiert sind. Der Cursor steht irgendwo. Und wenn ich jetzt speichere und diese eine Zeile anklicke. Einmal F5, da ist ja sonst nichts von zu sehen. Dann finden Sie genau diese Zellen markiert. Weil es eben so verführerisch ist mit For Each, was auch wirklich schnell geht und übersichtlich ist, sowas immer zu Fuß zu ermitteln. Mit irgendwelchen Prüfungen, die sind alle nicht schlecht. Würde ich ganz gerne mal auf diesen Dialog letzten Endes, oder hier eine Funktion hinweisen, die all das schon kann. Der lohnt sich mal genauer anzugucken und zu probieren. Z.B. auch, wenn Sie Datensätze gefiltert haben und deswegen Teile nicht sichtbar sind. Dann können Sie die markieren, alle einfach quer rüber, und anschließend auf nur die sichtbaren reduzieren - auch sehr praktisch. Also, For-Each ist sehr praktisch, aber manchmal finden spezielle Befehle eine schnellere Lösung.

Excel 2013 VBA Grundkurs

Holen Sie aus Excel 2013 mit der integrierten Programmiersprache VBA auch das letzte Quäntchen an Funktion heraus und lassen Sie sich dazu zeigen, was alles möglich ist.

6 Std. 18 min (63 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!