{"id":55000320,"date":"2022-08-01T00:00:00","date_gmt":"2023-03-02T17:05:03","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=320"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Excel_Zellen_und_Bereiche_per_VBA","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Excel_Zellen_und_Bereiche_per_VBA\/","title":{"rendered":"Excel: Zellen und Bereiche per VBA"},"content":{"rendered":"<p><b>Im Artikel &#8220;Excel: Workbooks und Worksheets per VBA&#8221; haben wir uns angesehen, wie wir Arbeitsmappen und Arbeitsbl&auml;tter mit VBA nutzen k&ouml;nnen. Im vorliegenden Artikel gehen wir einen Schritt weiter und nehmen uns die offensichtlichen Elemente eines Arbeitsblatts vor &#8211; die Zellen. Nicht weniger spannend sind allerdings die Bereiche, unter VBA &#8220;Range&#8221; genannt. Wie wir diese referenzieren, auslesen und bearbeiten k&ouml;nnen, zeigen wir auf den folgenden Seiten.<\/b><\/p>\n<h2>Worksheet referenzieren<\/h2>\n<p>Im oben genannten Artikel <b>Excel: Workbooks und Worksheets per VBA<\/b> (<b>www.access-im-unternehmen.de\/326<\/b>) zeigen wir, wie Du <b>Workbook<\/b>&#8211; und <b>Worksheet<\/b>-Elemente referenzieren kannst. Im aktuellen Artikel verwenden wir oft das aktuelle <b>Worksheet<\/b>-Element als Basis f&uuml;r den Zugriff auf verschiedene Eigenschaften wie <b>Range <\/b>oder <b>Cells<\/b>.<\/p>\n<p>Dieses k&ouml;nnen wir mit <b>ActiveSheet <\/b>referenzieren, allerdings bietet <b>ActiveSheet <\/b>kein IntelliSense an. Das liegt daran, dass <b>ActiveSheet <\/b>nicht nur ein <b>Worksheet<\/b>-Objekt, sondern auch ein <b>Chart<\/b>-Objekt zur&uuml;ckliefern k&ouml;nnte. <\/p>\n<p>Um diese Einschr&auml;nkung zu umgehen, referenzieren wir das <b>Worksheet<\/b>-Objekt jeweils mit folgenden Anweisungen:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>wks<span style=\"color:blue;\"> As <\/span>Worksheet\r\n<span style=\"color:blue;\">Set<\/span> wks = ActiveSheet<\/pre>\n<p><b>wks <\/b>ist nun explizit als <b>Worksheet<\/b>-Objekt deklariert und liefert folglich dessen Elemente per IntelliSense. Wir werden die Deklaration und Zuweisung des aktuellen Worksheets nicht in jedem Beispiel explizit ausf&uuml;hren, sondern nach dem ersten Beispiel einfach mit <b>wks <\/b>arbeiten.<\/p>\n<p>Gleichwohl sei erw&auml;hnt, dass Du innerhalb des VBA-Projekts einer Excel-Arbeitsmappe auch direkt die <b>Range<\/b>&#8211; oder die <b>Cells<\/b>-Eigenschaft nutzen kannst. Im Direktfenster erh&auml;ltst Du also beispielsweise mit folgendem Ausdruck den Inhalt der Zelle mit der Adresse <b>A1<\/b>:<\/p>\n<pre>  Range(\"A1\")<\/pre>\n<p>Da ich allerdings davon ausgehe, dass Du auch von anderen Anwendungen wie Access, Word oder Outlook oder auch von COM-Add-Ins auf die Inhalte von Excel-Arbeitsmappen zugreifen willst, verwenden wir immer die explizite Angabe der Objekte.<\/p>\n<h2>Einzelne Zelle &uuml;ber die A1-Notation per Range referenzieren<\/h2>\n<p>Im Excel-Arbeitsblatt erhalten wir schon Hinweise darauf, wie ein Weg zum Referenzieren einer Zelle aussehen k&ouml;nnte (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_04\/pic_320_001.png\" alt=\"Die Bezeichnung der aktuellen Zelle, hier A1\" width=\"424,6267\" height=\"325,9241\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Die Bezeichnung der aktuellen Zelle, hier A1<\/span><\/b><\/p>\n<p>Damit sind die Spalten- und Zeilen&uuml;berschriften gemeint, die aus Buchstaben und Zahlen bestehen. Die Spaltenk&ouml;pfe enthalten zun&auml;chst die Buchstaben von <b>A <\/b>bis <b>Z<\/b>, dann geht es mit <b>AA <\/b>bis <b>ZZ <\/b>weiter und dann mit <b>AAA <\/b>bis <b>XFD<\/b>, was der Spalte 16.384 entspricht. Die Zeilenk&ouml;pfe enthalten die Zahlen von 1 bis 1.048.576.<\/p>\n<p>Eine Zelle hat eine Benennung, die aus dem Buchstaben der Spalte und der Zahl der Zeile besteht. Die Zeile oben links hei&szlig;t also <b>A1<\/b>, w&auml;hrend die Zeile ganz unten rechts <b>XFD1048576 <\/b>hei&szlig;t (ich hoffe, Elon Musk liest das nicht, sonst benennt er sein n&auml;chstes Kind nach dieser Zelle).<\/p>\n<p>Diese Bezeichnung ist auch gleichzeitig der erste Weg, mit dem wir auf eine Zelle zugreifen k&ouml;nnen. Um beispielsweise &uuml;ber den Ausdruck <b>A1 <\/b>auf eine Zelle zugreifen zu k&ouml;nnen, verwenden wir die <b>Range<\/b>-Eigenschaft des <b>Worksheet<\/b>-Objekts:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>ZelleMitRange()\r\n     <span style=\"color:blue;\">Dim <\/span>wks<span style=\"color:blue;\"> As <\/span>Worksheet\r\n     <span style=\"color:blue;\">Set<\/span> wks = ActiveSheet\r\n     <span style=\"color:blue;\">Debug.Print<\/span> wks.Range(\"A1\")\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Dies gibt den Inhalt der Zelle im Direktbereich aus.<\/p>\n<h2>Einzelne Zelle &uuml;ber die R1C1-Notation per Cells referenzieren<\/h2>\n<p>Wenn Du den numerischen Index der Zeile und Spalte der Zelle kennst, die Du referenzieren m&ouml;chtest, kannst Du auch die <b>Cells<\/b>-Eigenschaft nutzen.<\/p>\n<p>Diese erwartet als Parameter die Angabe des Zeilenindexes und des Spaltenindexes in der <b>R1C1<\/b>-Notation.<\/p>\n<p>Das <b>R <\/b>und das <b>C <\/b>in dieser Bezeichnung stehen f&uuml;r die englischen Begriffe f&uuml;r Zeile und Spalte, also <b>Row <\/b>und <b>Cell<\/b>. Der folgende Ausdruck liefert folglich den Inhalt der Zelle in der ersten Zeile und der ersten Spalte:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> wks.Cells(1, 1)<\/pre>\n<p>F&uuml;r eine andere Zeile, zum Beispiel die zweite, &auml;nderst Du den Wert des ersten Parameters. So erh&auml;ltst Du den Inhalt der Zelle <b>A2<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> wks.Cells(2, 1)<\/pre>\n<h2>Aktuelle Zelle referenzieren<\/h2>\n<p>Um die aktuelle Zelle zu referenzieren, ben&ouml;tigen wir gar kein <b>Worksheet<\/b>-Objekt &#8211; dieses wird explizit ermittelt. Um den Inhalt der aktuellen Zelle auszugeben, nutzen wir die folgende Anweisung:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> ActiveCell<\/pre>\n<h2>Mehrere Zellen mit Range referenzieren<\/h2>\n<p>W&auml;hrend beiden zuvor beschriebenen Beispiele sich jeweils auf das Referenzieren einer einzelnen Zelle beschr&auml;nkten, k&ouml;nnen wir mit der <b>Range<\/b>-Eigenschaft auch mehr als eine Zelle gleichzeitig referenzieren.<\/p>\n<p>Hier k&ouml;nnen wir die A1-Notation verwenden, &uuml;ber einen kleinen Umweg aber auch die R1C1-Notation. Angenommen, wir wollen einen Bereich mit allen Zellen des Worksheets aus Bild 2 referenzieren.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2022_04\/pic_320_002.png\" alt=\"Beispielzellen\" width=\"424,6267\" height=\"179,1394\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Beispielzellen<\/span><\/b><\/p>\n<h2>Mehrere Zellen mit der A1-Notation<\/h2>\n<p>Wenn wir die <b>Range<\/b>-Eigenschaft mit der A1-Notation nutzen, lautet die Referenz wie folgt:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> rng = wks.Range(\"A1:D4\")<\/pre>\n<p>Dass wir wirklich den gew&uuml;nschten Bereich referenzieren, k&ouml;nnen wir zum Beispiel durch die Ausgabe der Anzahl der Zeilen und Spalten erreichen:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> \"Zeilen: \" & rng.Rows.Count\r\n<span style=\"color:blue;\">Debug.Print<\/span> \"Spalten: \" & rng.Columns.Count<\/pre>\n<p>Die Ausgabe lautet:<\/p>\n<pre>Zeilen: 4\r\nSpalten: 4<\/pre>\n<p>Wir geben also die linke obere und die rechte untere Zelle des Bereichs in einer Zeichenkette durch einen Doppelpunkt getrennt an.<\/p>\n<h2>Mehrere Zellen mit der R1C1-Notation<\/h2>\n<p>Wir k&ouml;nnen die <b>Range<\/b>-Eigenschaft mit der <b>Cells<\/b>-Eigenschaft in der Form kombinieren, dass wir die linke, obere und die rechte, untere zu referenzierende Zelle jeweils mit der <b>Cells<\/b>-Eigenschaft referenzieren und diese per Komma getrennt der <b>Range<\/b>-Eigenschaft &uuml;bergeben.<\/p>\n<p>F&uuml;r den gleichen Bereich wie im vorherigen Beispiel lautet der Ausdruck dann:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> rng = wks.Range(Cells(1, 1), Cells(4, 4))<\/pre>\n<h2>Komplette Spalte mit Range referenzieren<\/h2>\n<p>Wenn Du eine komplette Spalte, zum Beispiel die Spalte <b>A<\/b>, mit einem <b>Range<\/b>-Elemente referenzieren m&ouml;chtest, gibst Du den Bereich ohne Angabe von Zeilen an:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> rng = wks.Range(\"A:A\")<\/pre>\n<p>F&uuml;r mehrere zusammenh&auml;ngende Spalten, zum Beispiel Spalte A bis Spalte C:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> rng = wks.Range(\"A:C\")<\/pre>\n<h2>Komplette Zeile mit Range referenzieren<\/h2>\n<p>F&uuml;r das Referenzieren einer kompletten Zeile, beispielsweise der ersten Zeile, mit dem <b>Range<\/b>-Element nutzt Du den folgenden Ausdruck:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> rng = Range(\"1:1\")<\/pre>\n<p>F&uuml;r mehrere zusammenh&auml;ngende Zeilen verwendest Du analog zu den Spalten den folgenden Ausdruck f&uuml;r die ersten drei Zeilen:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> rng = Range(\"1:3\")<\/pre>\n<h2>Nicht zusammenh&auml;ngende Zellen referenzieren<\/h2>\n<p>Wenn Du einzelne Zellen oder Bereiche von Zellen referenzieren m&ouml;chtest, die nicht unbedingt zusammenh&auml;ngen, dann gibst Du diese f&uuml;r die <b>Range<\/b>-Methode durch Kommata voneinander getrennt an.<\/p>\n<p>F&uuml;r einzelne Zellen sieht das so aus:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>rng<span style=\"color:blue;\"> As <\/span>Range\r\n<span style=\"color:blue;\">Set<\/span> rng = wks.Range(\"A1, B2, C3, D4\")\r\n<span style=\"color:blue;\">Debug.Print<\/span> rng.Cells.Count ''gibt 4 aus<\/pre>\n<p>Auf die gleiche Weise kannst Du auch nicht unbedingt zusammenh&auml;ngende Bereiche referenzieren, hier f&uuml;r die Bereiche <b>A1 <\/b>bis <b>A4 <\/b>und <b>C1 <\/b>bis <b>C4<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>rng<span style=\"color:blue;\"> As <\/span>Range\r\n<span style=\"color:blue;\">Set<\/span> rng = wks.Range(\"A1:A4, C1:C4\")\r\n<span style=\"color:blue;\">Debug.Print<\/span> rng.Cells.Count ''gibt 8 aus<\/pre>\n<h2>Wert aus einer Zelle lesen<\/h2>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000\"><a style=\"color: #ff0000\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000320\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000320?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000320\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"05094fc278\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Artikel &#8220;Excel: Workbooks und Worksheets per VBA&#8221; haben wir uns angesehen, wie wir Arbeitsmappen und Arbeitsbl&auml;tter mit VBA nutzen k&ouml;nnen. Im vorliegenden Artikel gehen wir einen Schritt weiter und nehmen uns die offensichtlichen Elemente eines Arbeitsblatts vor &#8211; die Zellen. Nicht weniger spannend sind allerdings die Bereiche, unter VBA &#8220;Range&#8221; genannt. Wie wir diese referenzieren, auslesen und bearbeiten k&ouml;nnen, zeigen wir auf den folgenden Seiten.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662022,66042022,44000027,44000023,44000028],"tags":[],"yst_prominent_words":[],"class_list":["post-55000320","post","type-post","status-publish","format-standard","hentry","category-662022","category-66042022","category-Excel_programmieren","category-PowerApps","category-Word_programmieren"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000320"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000320\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000320"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}