{"id":55000457,"date":"2019-10-01T00:00:00","date_gmt":"2020-04-06T16:32:43","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=457"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Feldinhalte_aufteilen_Teil_I","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Feldinhalte_aufteilen_Teil_I.html","title":{"rendered":"Feldinhalte aufteilen, Teil I"},"content":{"rendered":"<p class='introduction'>Wenn sie Daten etwa aus Excel-Tabellen oder anderen Quellen importieren, liegen diese nicht immer in der gew&uuml;nschten Form vor. Dann sind Felder wie Vorname und Nachname in einem Feld zusammengefasst, oder Sie m&ouml;chten vielleicht Stra&szlig;e und Hausnummer trennen und auf zwei Felder aufteilen. Wie das mit m&ouml;glichst wenig manuellem Aufwand gelingt, zeigen wir in diesem Artikel am Beispiel von Stra&szlig;e und Hausnummer.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1905_FeldinhalteAufteilen.accdb<\/b>.<\/p>\n<h2>Wo und wie aufteilen<\/h2>\n<p>Bevor wir uns &uuml;berhaupt an eine Tabelle heranwagen, die Daten zum Aufteilen enth&auml;lt, machen wir uns mit dem Handwerkzeug vertraut, das wir dazu ben&ouml;tigen &#8211; und das hei&szlig;t in diesem Fall Zeichenkettenfunktionen. Schauen wir uns zun&auml;chst ein einfaches Beispiel an &#8211; eine Stra&szlig;e mit einer Hausnummer, wobei beide Informationen durch ein Leerzeichen getrennt sind:<\/p>\n<pre>Gerichtsstr. 27<\/pre>\n<p>Das ist ein einfacher Fall: Wir brauchen nur das Leerzeichen in der Zeichenkette zu suchen und den Teil davor als Stra&szlig;e und den dahinter als Hausnummer zu speichern.<\/p>\n<p>Das erledigen wir mit folgendem Codeschnippsel (siehe Prozedur <b>StrasseUndHausnummer_1<\/b>). Wir deklarieren eine Variable f&uuml;r den Ausgangsausdruck sowie f&uuml;r die resultierenden Elemente:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>strStrasseUndHausnummer<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Dim <\/span>strStrasse<span style=\"color:blue;\"> As String<\/span>\r\n<span style=\"color:blue;\">Dim <\/span>strHausnummer<span style=\"color:blue;\"> As String<\/span><\/pre>\n<p>Dann legen wir den Startausdruck fest:<\/p>\n<pre>strStrasseUndHausnummer = \"Gerichtsstr. 27\"<\/pre>\n<p>Die Strasse ermitteln wir, indem wir das erste Auftreten eines Leerzeichens suchen und den Teil bis zu diese Leerzeichen extrahieren:<\/p>\n<pre>strStrasse = <span style=\"color:blue;\">Left<\/span>(strStrasseUndHausnummer,              <span style=\"color:blue;\">InStr<\/span>(1, strStrasseUndHausnummer, \" \") - 1)<\/pre>\n<p>Bei der Hausnummer sieht es &auml;hnlich aus, nur dass wir mit der <b>Mid<\/b>-Funktion hier den Teil nach dem Leerzeichen ermitteln:<\/p>\n<pre>strHausnummer = <span style=\"color:blue;\">Mid<\/span>(strStrasseUndHausnummer, <span style=\"color:blue;\">InStr<\/span>(1,                       strStrasseUndHausnummer, \" \") + 1)<\/pre>\n<p>Danach geben wir beides aus:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> \"*\" & strStrasse & \"*\"\r\n<span style=\"color:blue;\">Debug.Print<\/span> \"*\" & strHausnummer & \"*\"<\/pre>\n<p>Die Sternchen geben wir hier aus, um sicherzustellen, dass das Leerzeichen nicht in einer der beiden Zeichenketten enthalten ist. Wir erhalten:<\/p>\n<pre>*Gerichtsstr.*\r\n*27*<\/pre>\n<p>Das war der erste, naive Ansatz. Dieser funktioniert schon nicht mehr, wenn wir diese Stra&szlig;e untersuchen:<\/p>\n<pre>Borkhofer Str. 17<\/pre>\n<p>Hier erhalten wir dann:<\/p>\n<pre>*Borkhofer*\r\n*Str. 17*<\/pre>\n<p>Hier haben wir schon ein Leerzeichen im Stra&szlig;ennamen. Wir m&uuml;ssen also nicht das erste, sondern das letzte Leerzeichen ermitteln. Dem werden wir in der n&auml;chsten Version gerecht (siehe Prozedur <b>StrasseUndHausnummer_2<\/b>). Hier speichern wir die Position des letzten Leerzeichens auch direkt in einer Variablen:<\/p>\n<pre><span style=\"color:blue;\">Dim <\/span>intLetztesLeerzeichen<span style=\"color:blue;\"> As Integer<\/span>\r\nstrStrasseUndHausnummer = \"Borkhofer Str. 17\"\r\nintLetztesLeerzeichen = <span style=\"color:blue;\">InStrRev<\/span>(                           strStrasseUndHausnummer, \" \")<\/pre>\n<p>Damit ermitteln wir dann wie zuvor die beiden Teile des Strings:<\/p>\n<pre>strStrasse = <span style=\"color:blue;\">Left<\/span>(strStrasseUndHausnummer,                               intLetztesLeerzeichen - 1)\r\nstrHausnummer = <span style=\"color:blue;\">Mid<\/span>(strStrasseUndHausnummer, _\r\n                             intLetztesLeerzeichen + 1)<\/pre>\n<p>Das Ergebnis sieht nun wie gew&uuml;nscht aus:<\/p>\n<pre>*Borkhofer Str.*\r\n*17*<\/pre>\n<h2>Testroutine schreiben<\/h2>\n<p>Aber klappt das auch noch f&uuml;r unser zuerst verwendetes Beispiel Das k&ouml;nnen wir ja leicht und zuverl&auml;ssig testen, indem wir aus unserer bisherigen Prozedur eine Funktion machen, diese mit verschiedenen Parameterwerten aufrufen und die Ergebnisse mit den erwarteten Ergebnissen abgleichen.<\/p>\n<p>Wie das geht, haben wir im Detail im Artikel <b>VBA-Funktionen testen <\/b>beschrieben. Dort haben wir die Funktion <b>StrasseUndHausnummer <\/b>auch etwas umgestaltet, sodass diese nun drei Parameter enth&auml;lt: den Eingangsparameter <b>strStrasseUndHausnummer <\/b>und die Ausgangsparameter <b>strStrasse <\/b>und <b>strHausnummer<\/b>. Wie unterscheiden sich Eingangs- und Ausgangsparameter Auf den ersten Blick gibt es keinen sichtbaren Unterschied, was aber daran liegt, dass das Schl&uuml;sselwort ByRef, welches f&uuml;r die Verwendung von Ausgangsparametern zwingend erforderlich ist, standardm&auml;&szlig;ig verwendet wird. Die Funktion sieht nun im aktuellen Zustand wie in Listing 1 aus.<\/p>\n<pre>&lt;font color=blue&gt;Public Function &lt;\/font&gt;StrasseUndHausnummer(strStrasseUndHausnummer&lt;font color=blue&gt; As String&lt;\/font&gt;, strStrasse&lt;font color=blue&gt; As String&lt;\/font&gt;, strHausnummer&lt;font color=blue&gt; As String&lt;\/font&gt;)&lt;font color=blue&gt; As Boolean&lt;\/font&gt;\r\n     &lt;font color=blue&gt;Dim &lt;\/font&gt;intLetztesLeerzeichen&lt;font color=blue&gt; As Integer&lt;\/font&gt;\r\n     intLetztesLeerzeichen = &lt;font color=blue&gt;InStrRev&lt;\/font&gt;(strStrasseUndHausnummer, \" \")\r\n     strStrasse = &lt;font color=blue&gt;Left&lt;\/font&gt;(strStrasseUndHausnummer, intLetztesLeerzeichen - 1)\r\n     strHausnummer = &lt;font color=blue&gt;Mid&lt;\/font&gt;(strStrasseUndHausnummer, intLetztesLeerzeichen + 1)\r\n     StrasseUndHausnummer = &lt;font color=blue&gt;True&lt;\/font&gt;\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p class='imagetext'>Listing 1: Funktion zum Ermitteln von Strasse und Hausnummer aus einer Zeichenkette<\/p>\n<h2>Hausnummer mit Leerzeichen<\/h2>\n<p>Wir sind nun soweit, dass wir Leerzeichen im Stra&szlig;ennamen nicht mit dem Leerzeichen zwischen Stra&szlig;e und Hausnummer verwechseln. Der n&auml;chste Schritt ist, dass wir Hausnummern erkennen, die selbst ein Leerzeichen enthalten. Das sollte normalerweise nicht der Fall sein, aber es kann sein, dass der Benutzer etwa folgende Zeichenkette eingibt:<\/p>\n<pre>Gerichtsst. 2 a<\/pre>\n<p>Mit der aktuellen Version unserer Funktion <b>StrasseUndHausnummer <\/b>erhalten wir f&uuml;r die Strasse nun den Wert <b>Gerichtsstr. 2 <\/b>und als Hausnummer <b>a<\/b>. Wie k&ouml;nnen wir das noch korrekt behandeln Wir k&ouml;nnten pr&uuml;fen, ob die Zeichen vor dem letzten Leerzeichen numerisch sind und diese dann noch in die Hausnummer &uuml;bernehmen. Wie w&uuml;rden wir das machen Dieser Schritt w&uuml;rde nach den bisherigen Schritten stattfinden und wir w&uuml;rden den Inhalt von <b>strStrasse <\/b>separat untersuchen.<\/p>\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>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 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:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000457\/\">\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=\"\/index.php\/data\/wp\/v2\/posts\/55000457?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:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000457\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"0c38ab74e4\"\/>\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>Wenn sie Daten etwa aus Excel-Tabellen oder anderen Quellen importieren, liegen diese nicht immer in der gew&uuml;nschten Form vor. Dann sind Felder wie Vorname und Nachname in einem Feld zusammengefasst, oder Sie m&ouml;chten vielleicht Stra&szlig;e und Hausnummer trennen und auf zwei Felder aufteilen. Wie das mit m&ouml;glichst wenig manuellem Aufwand gelingt, zeigen wir in diesem Artikel am Beispiel von Stra&szlig;e und Hausnummer.<\/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":[662019,66052019,44000009],"tags":[],"class_list":["post-55000457","post","type-post","status-publish","format-standard","hentry","category-662019","category-66052019","category-Daten_importieren"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Feldinhalte aufteilen, Teil I - Access [basics]<\/title>\n<meta name=\"description\" content=\"Wenn sie Daten etwa aus Excel-Tabellen oder anderen Quellen importieren, liegen diese nicht immer in der gew\u00fcnschten Form vor. Dann sind Felder wie Vorname und Nachname in einem Feld zusammengefasst, oder Sie m\u00f6chten vielleicht Stra\u00dfe und Hausnummer trennen und auf zwei Felder aufteilen. Wie das mit m\u00f6glichst wenig manuellem Aufwand gelingt, zeigen wir in diesem Artikel am Beispiel von Stra\u00dfe und Hausnummer.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Feldinhalte_aufteilen_Teil_I.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Feldinhalte aufteilen, Teil I - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Wenn sie Daten etwa aus Excel-Tabellen oder anderen Quellen importieren, liegen diese nicht immer in der gew\u00fcnschten Form vor. Dann sind Felder wie Vorname und Nachname in einem Feld zusammengefasst, oder Sie m\u00f6chten vielleicht Stra\u00dfe und Hausnummer trennen und auf zwei Felder aufteilen. Wie das mit m\u00f6glichst wenig manuellem Aufwand gelingt, zeigen wir in diesem Artikel am Beispiel von Stra\u00dfe und Hausnummer.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Feldinhalte_aufteilen_Teil_I.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-06T16:32:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"14\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Feldinhalte_aufteilen_Teil_I.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Feldinhalte_aufteilen_Teil_I.html\",\"name\":\"Feldinhalte aufteilen, Teil I - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"datePublished\":\"2020-04-06T16:32:43+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Wenn sie Daten etwa aus Excel-Tabellen oder anderen Quellen importieren, liegen diese nicht immer in der gew\\u00fcnschten Form vor. Dann sind Felder wie Vorname und Nachname in einem Feld zusammengefasst, oder Sie m\\u00f6chten vielleicht Stra\\u00dfe und Hausnummer trennen und auf zwei Felder aufteilen. Wie das mit m\\u00f6glichst wenig manuellem Aufwand gelingt, zeigen wir in diesem Artikel am Beispiel von Stra\\u00dfe und Hausnummer.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Feldinhalte_aufteilen_Teil_I.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Feldinhalte_aufteilen_Teil_I.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Feldinhalte_aufteilen_Teil_I.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Feldinhalte_aufteilen_Teil_I.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Feldinhalte_aufteilen_Teil_I.html\",\"name\":\"Feldinhalte aufteilen, Teil I\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000457"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000457\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000457"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}