{"id":55000432,"date":"2019-02-01T00:00:00","date_gmt":"2020-01-24T16:00:17","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=432"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Laufende_Summen_in_Tabellen","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Laufende_Summen_in_Tabellen.html","title":{"rendered":"Laufende Summen in Tabellen"},"content":{"rendered":"<p class='introduction'>Immer wieder taucht die Frage auf, wie man in Access die Inhalte von Zahlenfelder mehrerer Datens&auml;tze aufsummiert. Unter Excel ist das einfach &#8211; dort tr&auml;gt man einfach die Summe aus der Summe bis zur vorherigen Zeile plus dem Wert der aktuellen Zeile ein. &auml;ndert man Werte, &auml;ndern sich auch die Summen. In diesem Artikel schauen wir uns an, wie dies unter Access mit Abfragen gelingt.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1901_Kumulieren.accdb<\/b>.<\/p>\n<h2>Aufsummieren an verschiedenen Stellen<\/h2>\n<p>Die erste Unterscheidung, die wir treffen m&uuml;ssen, ist die bez&uuml;glich des Ortes, an dem der kumulierte Wert erscheint. Sollen die kumulierten Werte in der Tabelle zum jeweiligen Datensatz gespeichert werden Oder soll eine Abfrage jeweils das aktuelle Ergebnis in einer eigenen Spalte liefern Vielleicht sollen die kumulierten Zahlen auch nur in einem Formular oder Bericht erscheinen<\/p>\n<p>Wichtig ist hier, die Bedeutung des Speicherns kumulierter Werte zu erkennen. Wenn Sie das tun, stellen Sie quasi eine Abh&auml;ngigkeit verschiedener Datens&auml;tze voneinander her, wenn Sie beispielsweise die Werte von drei Datens&auml;tze wie folgt kumulieren:<\/p>\n<pre>Wert       Summe\r\n12         12\r\n5          17\r\n23         40<\/pre>\n<p>Die Daten m&uuml;ssen nun immer in dieser Reihenfolge angezeigt werden, au&szlig;erdem d&uuml;rfen keine Datens&auml;tze gel&ouml;scht werden oder die Werte in der zu kumulierenden Spalte ge&auml;ndert werden, da sonst das Ergebnis nicht mehr stimmt. Wenn Sie etwa den Wert der zweiten Zeile von <b>5 <\/b>auf <b>4 <\/b>&auml;ndern, stimmen die kumulierten Werte der zweiten und dritten Zeile nicht mehr. Gleiches gilt, wenn Sie einen der Datens&auml;tze l&ouml;schen. Nur beim letzten Datensatz wirkt sich dies nicht fehlerhaft aus.<\/p>\n<p>In einer Abfrage kann man durch geschickten Einsatz von Berechnungsformeln daf&uuml;r sorgen, dass die kumulierten Werte dynamisch erzeugt werden und dass sich &auml;nderungen an den Daten oder auch das Hinzuf&uuml;gen oder L&ouml;schen von Datens&auml;tzen nicht in Form von Fehlern auswirken, sondern sich allenfalls die Spalte mit den kumulierten Werten &auml;ndert.<\/p>\n<h2>Beispieltabellen<\/h2>\n<p>Wir verwenden die Tabelle <b>tblAusgaben <\/b>als Beispiel, die neben dem Prim&auml;rschl&uuml;sselfeld noch ein Feld mit dem Datum, den Zweck und den Betrag der Ausgabe enth&auml;lt sowie ein Feld mit einer Kategorie, das auf eine weitere Tabelle verweist (siehe Bild 1).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_432_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_432_001.png\" alt=\"Tabelle f&uuml;r Beispielzwecke\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Tabelle f&uuml;r Beispielzwecke<\/p>\n<h2>Kumulieren in Tabellen<\/h2>\n<p>Wir schauen uns als Erstes an, wie wir die Zahlen in Tabellen aufsummieren k&ouml;nnen. Dazu haben wir der Tabelle <b>tblAusgaben <\/b>ein paar Datens&auml;tze hinzugef&uuml;gt. Au&szlig;erdem legen wir dort noch ein Feld namens <b>LaufendeSumme <\/b>an (siehe Bild 2).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_432_002.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_432_002.png\" alt=\"Tabelle noch ohne laufende Summe\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Tabelle noch ohne laufende Summe<\/p>\n<h2>Laufende Summe per VBA<\/h2>\n<p>Wer sich mit VBA und dem DAO-Objektmodell auskennt, kann die Spalte LaufendeSumme nun recht schnell f&uuml;llen. Dazu verwenden wir beispielsweise die Prozedur aus Listing 1.<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>FeldAufsummieren()\r\n     <span style=\"color:blue;\">Dim <\/span>db<span style=\"color:blue;\"> As <\/span>DAO.Database\r\n     <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n     <span style=\"color:blue;\">Dim <\/span>curLaufendeSumme<span style=\"color:blue;\"> As Currency<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> db = CurrentDb\r\n     <span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM tblAusgaben\", dbOpenDynaset)\r\n     <span style=\"color:blue;\">Do While<\/span> <span style=\"color:blue;\">Not<\/span> rst.EOF\r\n         rst.Edit\r\n         curLaufendeSumme = curLaufendeSumme + rst!Betrag\r\n         rst!LaufendeSumme = curLaufendeSumme\r\n         rst.Update\r\n         rst.Move<span style=\"color:blue;\">Next<\/span>\r\n     <span style=\"color:blue;\">Loop<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p class='imagetext'>Listing 1: Aufsummieren der Werte des Feldes einer Tabelle<\/p>\n<p>Hier deklarieren und f&uuml;llen wir ein Recordset mit den Daten der Tabelle <b>tblAusgaben<\/b>. Dadurch, dass wir keine Sortierung angeben, werden die Datens&auml;tze nach dem Prim&auml;rschl&uuml;sselwert sortiert. Danach durchlaufen wir die Datens&auml;tze in einer <b>Do While<\/b>-Schleife und versetzen dabei zun&auml;chst den aktuellen Datensatz mit der <b>Edit<\/b>-Methode in den Bearbeitungsmodus. Dann addieren wir den Wert des Feldes <b>rst!Beitrag <\/b>zu dem in der Variablen <b>curLaufendeSumme <\/b>gespeicherten Wert.<\/p>\n<p>Im ersten Durchlauf ist dieser noch <b>0<\/b>, sodass der Wert nach dem Ausf&uuml;hren der Anweisung den Wert des Feldes <b>Betrag <\/b>enth&auml;lt. Bei den folgenden durchlaufen wird hier jeweils der Wert des Feldes <b>Betrag <\/b>hinzuaddiert. Au&szlig;erdem landet dieser Wert im Feld <b>LaufendeSumme <\/b>des jeweiligen Datensatzes. Die <b>Update<\/b>-Methode speichert die &auml;nderungen und die <b>MoveNext<\/b>-Methode verschiebt den Datensatzzeiger auf den n&auml;chsten Datensatz, damit dieser im folgenden Durchlauf der <b>Do While<\/b>-Schleife verarbeitet werden kann.<\/p>\n<p>Das Ergebnis nach dem Ausf&uuml;hren der Prozedur (etwa durch Bet&auml;tigen der Taste <b>F5<\/b>, w&auml;hrend sich die Einf&uuml;gemarke in der Prozedur befindet) finden Sie in Bild 3.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_432_003.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_432_003.png\" alt=\"Tabelle mit Werten im Feld LaufendeSumme\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Tabelle mit Werten im Feld LaufendeSumme<\/p>\n<h2>Problem: Neue Datens&auml;tze<\/h2>\n<p>Wenn Sie nun feststellen, dass Sie vergessen haben, eine Ausgabe f&uuml;r ein zur&uuml;ckliegendes Datum, etwa am 2.1.2019, einzutragen, landet der neue Datensatz zwar ganz unten.<\/p>\n<p>Das ist kein Problem, aber Sie wollen die Ausgaben nach dem Datum sortiert sehen und nicht nach der Reihenfolge des Anlegens. Sortieren Sie die Daten also nach dem Anlegedatum, erscheint der neue Datensatz zwischen den anderen Datens&auml;tzen (siehe Bild 4).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_432_004.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_432_004.png\" alt=\"Neuer Datensatz zwischen den anderen Datens&auml;tzen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 4: Neuer Datensatz zwischen den anderen Datens&auml;tzen<\/p>\n<p>Wir m&uuml;ssen die Prozedur <b>FeldAufsummieren <\/b>also nochmals aufrufen. Diese liefert dann allerdings ein in dieser Sortierung falsches Ergebnis, weil die Prozedur in der Reihenfolge der Prim&auml;rschl&uuml;sselwerte aufsummiert, wir aber die Summe nach dem Feld <b>Ausgabedatum <\/b>sortiert ben&ouml;tigen (siehe Bild 5).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_432_005.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_432_005.png\" alt=\"Falsche Reihenfolge beim Aufsummieren\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 5: Falsche Reihenfolge beim Aufsummieren<\/p>\n<p>Also &auml;ndern wir die Prozedur, indem wir die Zeile zum Erstellen des Recordset-Objekts wie folgt um eine <b>ORDER BY<\/b>-Klausel erweitern:<\/p>\n<pre><span style=\"color:blue;\">Set<\/span> rst = db.OpenRecordset(\"SELECT * FROM tblAusgaben ORDER BY Ausgabedatum\", dbOpenDynaset)<\/pre>\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\/55000432\/\">\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\/55000432?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\/55000432\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"8d63f6cbe9\"\/>\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>Immer wieder taucht die Frage auf, wie man in Access die Inhalte von Zahlenfelder mehrerer Datens&auml;tze aufsummiert. Unter Excel ist das einfach &#8211; dort tr&auml;gt man einfach die Summe aus der Summe bis zur vorherigen Zeile plus dem Wert der aktuellen Zeile ein. &auml;ndert man Werte, &auml;ndern sich auch die Summen. In diesem Artikel schauen wir uns an, wie dies unter Access mit Abfragen gelingt.<\/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":[66012019,662019,44000003],"tags":[],"class_list":["post-55000432","post","type-post","status-publish","format-standard","hentry","category-66012019","category-662019","category-Tabellen_entwerfen"],"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>Laufende Summen in Tabellen - Access [basics]<\/title>\n<meta name=\"description\" content=\"Immer wieder taucht die Frage auf, wie man in Access die Inhalte von Zahlenfelder mehrerer Datens\u00e4tze aufsummiert. Unter Excel ist das einfach \u2013 dort tr\u00e4gt man einfach die Summe aus der Summe bis zur vorherigen Zeile plus dem Wert der aktuellen Zeile ein. \u00c4ndert man Werte, \u00e4ndern sich auch die Summen. In diesem Artikel schauen wir uns an, wie dies unter Access mit Abfragen gelingt.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Laufende_Summen_in_Tabellen.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Laufende Summen in Tabellen - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Immer wieder taucht die Frage auf, wie man in Access die Inhalte von Zahlenfelder mehrerer Datens\u00e4tze aufsummiert. Unter Excel ist das einfach \u2013 dort tr\u00e4gt man einfach die Summe aus der Summe bis zur vorherigen Zeile plus dem Wert der aktuellen Zeile ein. \u00c4ndert man Werte, \u00e4ndern sich auch die Summen. In diesem Artikel schauen wir uns an, wie dies unter Access mit Abfragen gelingt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Laufende_Summen_in_Tabellen.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T16:00:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/pic_432_001.png\" \/>\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=\"13\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\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Laufende_Summen_in_Tabellen.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_432_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Laufende_Summen_in_Tabellen.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Laufende_Summen_in_Tabellen.html\",\"name\":\"Laufende Summen in Tabellen - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Laufende_Summen_in_Tabellen.html#primaryimage\"},\"datePublished\":\"2020-01-24T16:00:17+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Immer wieder taucht die Frage auf, wie man in Access die Inhalte von Zahlenfelder mehrerer Datens\\u00e4tze aufsummiert. Unter Excel ist das einfach \\u2013 dort tr\\u00e4gt man einfach die Summe aus der Summe bis zur vorherigen Zeile plus dem Wert der aktuellen Zeile ein. \\u00c4ndert man Werte, \\u00e4ndern sich auch die Summen. In diesem Artikel schauen wir uns an, wie dies unter Access mit Abfragen gelingt.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Laufende_Summen_in_Tabellen.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Laufende_Summen_in_Tabellen.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Laufende_Summen_in_Tabellen.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\/Laufende_Summen_in_Tabellen.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Laufende_Summen_in_Tabellen.html\",\"name\":\"Laufende Summen in Tabellen\"}}]},{\"@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\/55000432","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=55000432"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000432\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}