22:45 Uhr
Zufallswerte in Excel Zellen per Zufallszahlszahl und Zufallsbereich aber auch in Access je Datenzeile einer Access Abfrage generieren
Manchmal kann es, sei es für Beispiele hier im Blog oder für eine Anonymisierung einer Statistik, erforderlich sein Daten zu anonymisieren oder zumindest zu pseudonymisieren.
Hier gibt es unterschiedliche Formeln in Office je nachdem ob diese in Excel oder Access genutzt werden sollen.
Zufallszahlen in Excel
Für meine Beispielzahlen in Excel verwende ich meistens entweder die Formel ZUFALLSZAHL() oder ZUFALLSBEREICH(Untere_Zahl;Obere_Zahl) um hier entsprechende Zahlen automatisch errechnen zu lassen.Dabei generiert Excel diese Zahlen basierend auf den Mersenne Twister-Algorithmus (MT19937 siehe "Eintrag auf Wikipedia") wodurch Pseudozufallszahlen die als zufällig erscheinen generiert werden.
In einer Datentabelle mit zehn Einträgen (von ID 1 bis 10) und jeweils einen Wert von 100 werden dazu je folgende Zufallszahlen generiert.
Spalte Zufallszahl
Durch die Formel =RUNDEN(ZUFALLSZAHL()*100;2) wird durch ZUFALLSZAHL() eine Zahl größer oder gleich 0 aber kleiner als 1 generiert und diese mit 100 multipliziert und auf 2 Nachkommastellen gerundet.
Spalte Zufallsbereich
Der Zufallsbereich wird durch die Formel =ZUFALLSBEREICH(1;100) definiert als ganzzahlige Zahl (ohne Nachkommastellen) zwischen 1 und 100.
So sind in Excel relativ schnell entsprechende "Zufallszahlen" können dann als Werte für Beispiele herangezogen werden.
Sinnvollerweise werden diese dann kopiert und als Inhalte Einfügen als Werte wieder eingefügt, andernfalls aktualisieren sich diese Zahlen jedes Mal aufs Neue sobald eine andere Berechnung im Tabellenblatt erfolgt.
Ein Grund warum Controller Excel mögen, dürfte wohl auch daran liegen, dass hier schnell gute Ergebnisse erreicht werden können.
Zufallszahlen in Access
Zur identischen Datenzeile ID 1 bis 10 und jeweils die Werte 100 je Datenzeile möchte ich nun aber ebenfalls Zufallszahlen erhalten.
Dazu gibt es in Access die an der Formel RND in VBA angelehnte Formel ZZG() die in Abfragen verwendet werden kann.
Wird diese Formel ohne Parameter (also nur als ZZG() ) verwendet, so wird als Basis zur Berechnung von Zufallswerten der Systemzeitgeber als Startwert zur Berechnung eines Zufallswertes verwendet. Allerdings wird für jeden Zufallswert der gleiche Startwert verwendet, so dass in der Abfrage die Zufallswerte wie folgt in der Spalte ZZG ausgegeben werden:
Hier sind also für jede Datenzeile der gleiche Zufallswert ausgegeben, was nun zwar eine Anonymisierung aber nicht das gewünschte Ergebnis von unterschiedlichen Zufallswerten je Datenzeilen verursacht. Die Zahlen ändern sich zwar bei jeder erneuten Abfrage, bleiben aber für jeden Eintrag identisch.
Daher habe ich nun versucht mit zwei Schritten die Abfrage etwas anzupassen um letzten Endes doch noch Zufallszahlen je Eintrag zu erhalten.
Insgesamt habe ich hier zwei weitere Felder eingefügt auf deren Ergebnis ich nun eingehen mag.
Spalte ZZG Festwert
ZZG Festwert: RUNDEN ( ZZG(1) * 100 );2 )
Hier gebe ich der Funktion ZZG den Startwert 1 und multipliziere dieses mit 100 um dann die Zufallszahl auf 2 Nachkommastellen zu runden.
Ausgeführt liefert die Abfrage folgende Ausgabe:
Im Ergebnis erhalte ich nun gut lesbare Zahlen pro Eintrag, aber da hier nun statt des Systemzeitgeber eine feste Zahl verwendet worden ist, ist das Ergebnis leider erentu identisch. Beim erneuten Ausführen der Abfrage erhalte ich wiederum neue Werte, die aber ebenfalls fix sind.
Spalte ZZG Bezug
ZZG Bezug: RUNDEN ( ZZG( [Zahl] ) * 100 );2 )
Hier lese ich nun den Wert in der Spalte Zahl aus um diese als Startwert zu nehmen. Auch wenn die Zahlen jeweils identisch sind, wird hier doch für jede Zeile eine neue Zufallszahl berechnet, so dass die Werte in der Spalte ZZG Bezug nun endgültig unterschiedlich sind.
Verschachtele WENN Dann Funktion mit Zufallszahlen
Die erhaltenen Zufallszahlen können dann auch für weitere Berechnungen oder zufällige Wertausgaben genutzt werden. Dieses kann zum Beispiel für "Ja", "Nein" aber auch für komplexere Ausgaben wie die Auswahl aus drei Optionen "Tor A", "Tor B" oder "Tor C" genutzt werden.Im Beispiel soll hier "Bestanden", "Nicht bestanden" oder "Neuer Versuch per Zufall auf die einzelnen Einträge verteilt werden.
Dazu habe ich folgende Spalten in die Abfrage eingefügt:
- ZZG Bezug: Runden(ZZG([Zahl])*10;2)
Damit wird für ZZG Bezug ein Wert zwischen 0 und 10 ausgegeben.
- Ergebnis: Wenn([ZZG Bezug]<3;"Nichtbestanden";Wenn([ZZG Bezug]<7;"Neuer Versuch";"Bestanden"))
Als Ergebnis wird hier bis 3 "Nichtbestanden", bis 7 "Neuer Versuch" und ansonsten "Bestanden" ausgegeben.
Natürlich können hier auch größere Bandbreiten durch Erhöhung der Abstände ZZG Bezug bis 100 oder auch andere Bestandteile für die Wenn Abfrage genommen werden.
Fazit
Auch wenn in Access die Berechnung des Zufalls etwas umständlicher ist, können so doch auch pseudozufällige Verteilungen der Ausprägung eines Merkmals generiert werden und damit etwaige Anonymisierungen von Statistiken erfolgen.Immerhin sind solche Fragen, wie auch die Konverttierung einer "als Tabelle formatierten" Datengrundlage in einen Bereich wie im Artikel "Daten in Excel intelligenter formatieren 📊 als intelligente Tabellen bzw. als Tabelle formatieren" beschrieben immer mal wieder Grundlage für spannende Artikel.
17:59 Uhr
Aktualisierungsabfrage in Access mit WENN (sowohl A als auch B) DANN Funktion
Während ich in Excel keine Probleme habe Wenn-Dann Funktionen mit Verschachtelungen zu versehen fällt mir dieses in Access etwas schwerer, da der Syntax ein klein wenig abweicht und statt Zellbezüge hier Bezüge auf einzelne Tabellenfelder genommen werden muss und auch der Syntax von Formeln etwas von Excel abweicht, was im zweiten Lösungsweg zu sehen ist. Vermutlich ist meine Vorliebe für Excel einer der Gründe warum ich mich lieber mit Tools zur Erstellung einer MindMap (siehe "Mindmapping und Sketchnotes im Beruf nutzen für Brainstorming oder Mind Mapping mit XMIND") als intensiver mit Access beschäftige, auch wenn es hin und wieder durchaus praktisch ist.
Ausgangslage
Im Rahmen einer Aktualisierungsabfrage auf einzelne Tabellen soll das Feld "QoS" in der Tabelle "Ergebnistabelle" anhand folgender Fälle aktualisiert werden beziehungsweise einen Wert erhalten.
- Sind die letzten 2 Ziffern des Innenauftrag kleiner oder gleich 49 dann soll als Wert "S" zurückgegeben werden.
- Handelt es sich bei den letzten 2 Ziffern des Innenauftrag um größer oder gleich 50 dann soll als Wert "Q" zurückgegeben werden.
- Sofern die dritte Stelle des Innenauftrag eine 4 enthält ist in jeden Fall als Wert "Q" auszugeben.
Im Rahmen der Aktualisierungsabfrage wird nun also für das Feld "QoS" der Tabelle "Ergebnistabelle" im Feld Aktualisieren folgende Formel eingegeben.
Am Einfachsten ist dieses, wenn über die rechte Maustaste die Option "Aufbauen" gewählt wird. Hierdurch erscheint der Ausdrucksgenerator und wir bekommen sämtliche Felder der Datenbank aber auch alle möglichen Ausdrücke zur Auswahl angezeigt. Für unseren Fall arbeiten wir aber mit den Ausdrücken WENN, LINKS und RECHTS. Wobei ich hier zwei Lösungsansätze habe.
Verschachtele WENN dann WENN Funktion
Nachdem wir den Ausdrucksgeneartor aufgerufen haben erhalten wir ein Fenster in dem die folgende Formel eingetragen werden kann:Zur Erklärung:Wenn
(
Rechts(Links([Ergebnistabelle]![Projekt];3);1)*1=4;
"Q";
Wenn
(
Rechts([Ergebnistabelle]![Projekt];2)*1<50;"S";"Q"
)
)
Im ersten Abschnitt wird überprüft, ob bei der Innenauftragsnummer an vierter Stelle eine 4 steht. In diesen Fall handelt es sich in jeden Fall um "Q", andernfalls (DANN) wird nun nicht ein Wert ausgegeben sondern eine weitere Wenn Dann Funktion geprüft. Wenn die letzten beiden Ziffern kleiner als 50 sind handelt es sich um "S" ansonsten trifft tatsächlcih "Q" zu.
Da die Funktionen LINKS und RECHTS eigentlich für Varianten eines Strings gedacht sind (Textbestandteile auslesen) habe ich mit * 1 in der Formel diese zur Sicherheit auch als Zahl behandelt. Da die Innenauftragsnummer aber auf jeden Fall eine Zahl sein sollte, kann dieser Part auch ausgelassen werden.
Im Ergebnis haben wir nun abhängig von der Innenauftragsnummer entweder S oder Q im Feld "QoS" stehen.
WENN ( SOWOHL ... ALS AUCH ... ) dann Funktion
Eine bessere Variante ist in folgender Abbildung dargestellt, an der auch der abweichende Syntax zu Excel ersichtlich ist.Während ich in Excel mit WENN(UND();"S";"Q") gearbeitet habe ist der Syntax bei Verschachtelungen mit WENN und UND in Access etwas anders. Für unser Fallbeispiel würde die Aktualisierung wie folgt definiert werden:
Zur Erklärung:Wenn
(
Rechts([Ergebnistabelle]![Projekt];2)<=49
UND
Rechts(Links([Ergebnistabelle]![Projekt];3);1)<>4;
"S";"Q"
)
Sofern die letzten beiden Ziffern des Innenauftrags < oder = 49 sind UND die dritte Stelle keine 4 ist, wird das Feld "QoS" mit den Wert "S" versehen, andernfalls mit "Q".
Diese Schreibweise ist natürlich wesentlich einfacher, allerdings muss man sich vom Syntax der Klammer bei UND () lösen, wie dieses in Excel erfolgen würde.
In beiden Varianten hat nun das Feld "QoS" abhängig von der Innenauftragsnummer im Feld Projekt eine entsprechende Werztuweisung und es können hier weitere Gruppierungen oder sonstige Auswertungen vorgenommen werden.
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
18:22 Uhr
Video2brain - Onlineschulung per Videostreaming unter Android, Windows, iOS und Web
Kurzbeschreibung Angebot
Das Angebot umfasst mehr als 1.600 deutschsprachige Lehr- und Trainingsvideos aus den Bereichen Informatik, Business, Lifestyle, Bildbearbeitung Fotografie und Webdesign.Video-Streaming-Portal: mehr als 1.600 deutsche Lehr- und Trainingsvideos aus den Bereichen Informatik, Business, Lifestyle, Bildbearbeitung, Fotografie und Webdesign. Hierbei werden die Schulungen in verschiedene Kategorien zusammengefasst und können sowohl nach Software als auch Hersteller durchsucht werden.
Neben der reinen Weboberfläche von der die Videos abgerufen werden können, werden vom Anbieter aber auch Apps für Android, Apple iOS, Windows und Mac angeboten.Hinweis: Tag der offenen Türo bei video2brain - Probegucken
Zum Schnuppern dürfte der 29. Februar 2016 interessant sein, da hier ein Tag der offenen Tür mit freien Zugang zu allen Kursen angeboten wird. Auf http://www.video2brain.com/de/open-house sind nähere Informationen zu finden. Das Angebot kann von 28. Februar 2016 11:00 Uhr bis 01. März um 11:00 Uhr genutzt werden.
Nebenbei ist dieser Terminhinweis auch gleichzeitig ein Beispiel für Terminangaben wie im Artikel "Strukturierte Daten auf Website oder Semantisches Web (schema.org)" beschrieben.
Für die Registrierung kann entweder eine E-Mailadresse verwendet werden (was besonders dann zu empfehlen ist, wenn die Hochschule oder die Firma ein Abo anbietet) oder aber per Linkedin, Facebook oder Google+ verwendet werden.
Sollte ihre Hochschule ebenfalls ein Abo von video2brain anbieten ist ein Besuch der Seite https://www.video2brain.com/de/education hier eine gute Anlaufstelle ansonsten kann sich unter https://www.video2brain.com/de/registrierung angemeldet werden.
Während der Rheinwerk Verlag und auch Espresso Tutorials eine eigene Onlineplattform nutzen bieten vor allem Addison-Wesley und Markt+Techni, die zur Mediengruppe Pearson gehören im Rahmen einer Kooperation Schulungsvideos an. Ebenfalls finden sich viele Kurse zu Adobe Produkten im Angebot.
Dozenten können sich bei video2brain bewerben und nach erfolgreicher Annahme wird in Graz das Video von video2brain gedreht. Einen spannenden Artikel zu den Hintergruünden als Dozent schildert hier Tim Schürmann im Artikel "Video2brain: Eine Alternative zu Udemy? Video-Trainings bei Video2brain veröffentlichen" auf trainerbibel.de.
Während ich die Website ein wenig unübersichtlich empfand bin ich gerade am Testen des Angebot per Android App und hier wesentlich zufriedener.
Video2brain
Marketlink: Eine Onlineregistrierung ist aus den oben beschriebenen Gründen per Weboberfläche sinnvoll.
Anmeldung und Registrierung
Nachdem die App installiert ist kann sich hier mit den Zugangsdaten angemeldet werden.Bei der Anmeldung kann sich entweder als Person oder im Rahmen eines Unternehmens (oder Hochschule) auch per Organisation angemeldet werden.
Anmeldung als Person
Wie beschrieben können sich "Privatpersonen" entweder per Social Webdienst (also Linkedin, Facebook, Google+) oder aber mit ihren Benutzernamen und Passwort anmelden. Letzteres ist für Hochschulangehörige auch nach Registrierung außerhalb des Hochschulnetzes möglich, sofern die Hochschule eine entsprechende Zugangsberechtigung hat.
Anmeldung als Organisation
Für einen Organisationszugang kann man nun die entsprechende Organisation auswählen und sich über die IP-Standortlizenz anmelden. Hierdurch sind keine Benutzerdaten erhoben, jedoch ist eine Anmeldung nur innerhalb des Hochschulnetzes (ggf. VPN) möglich. Als Beispiel ist hier die Universitäts- und Stadtbibliothek Köln ausgewählt.
Bibliothek und Trainingsverlauf
Mit einen Benutzer besteht die Möglichkeit auf Videos Lesezeichen zu setzen oder auch über den Trainingsverlauf in ein gesehenes Video wieder einzusteigen.Hierbei ist die Bibliothek in Oberkategorien eingeteilt, die auch wieder Unterkategorien hat.
Ein kurzer Überblick dürfte hier die Hauptkategorie bieten.
Unterhalb der Hauptkategorie sind dann noch weitere Unterkategorien und auch beliebte Softwareprodukte ausgewiesen. Ferner kann auch über das gesamte Angebot die Lupe zur Suche verwendet werden. Interessant ist auch die Schaltfläche Trainingsverlauf.
Über den Trainingsverlauf kann jederzeit in ein schon begonnenes Training erneut eingestiegen werden.
Aufbau der Schulungsvideos
Die einzelnen Videotutorials oder Trainings sind in kleine Trainingseinheiten von einigen Minuten eingeteilt, so dass hier entweder ein spezielles Thema angesteuert werden kann oder auch das Training nach einer Einheit abgebrochen und erneut fortgesetzt werden.Ein gutes Beispiel ist hier in meinen Augen der Verlauf bei der Schulung zum Thema Matrixformeln.
Während im oberen Bereich das Video läuft kann weiter unten die einzelne Kapitel aufgerufen werden, die Kursbeschreibung oder Hintergrundinfos zum Autoren oder auch weitere vorgeschlagene Videos zum Thema angezeigt werden.
Preise, Abomodelle, Einzelabruf
Neben dem Abomodell, welches monatlich kündbar (für 19,99 Euro) oder zu unterschiedlichen Jahresgebühren verfügbar ist (siehe Abos im Vergleich) können einzelne Schulungen auch käuflich erworben werden und dann dauerhaft betrachtet werden.Nach der Registrierung stehen aber auch teilweise Gratiskurse zur Verfügung und zu jedem Video kann die Einleitung und teilweise auch das ein oder andere Probekapitel betrachtet werden.
Empfehlenswerte Office-Schulungen
Der von mir angesprochene Excelkurs "Excel: Matrixformeln Formeln für Fortgeschrittene" kann zum Beispiel auch für 39,95 Euro erworben werden.Wenn man ohnehin schon ein Abo abgeschlossen hat ist auch der Kurs "Excel 2010: Datenanalyse Listen, Tabellen und Datenbanken auswerten" (29,95 Euro) sehenswert.
Derzeit habe ich noch "Excel 2010: Diagramme - So präsentieren Sie Ihre Zahlen professionell und verständlich" (39,95 Euro) und "Excel 2010: Dynamische Diagramme - Intelligente Zahlenpräsentation für Fortgeschrittene" (29,95 Euro) auf meiner Liste und bin hier von einigen Anregungen sehr angetan.
Gerade wenn der Wechsel in Richtung einer neuen Office Version geht, kann ich aber auch den Kurs "Von Office 2010 auf Office 2016 umsteigen" (29,95 Euro)
Hier ist es einfach eine Rechenfrage, ob sich nur ein einzelner Kurs lohnt, oder ob man sich für einen Monat immer mal wieder ein Einzelabo oder direkt Jahresabo nutzt.
SAP Schulungen
Für SAP sind in der Hauptsache zu Business One und Netweaver Kurse zu finden. Für die Kernmodule und SAP ERP sind leider weniger Kurse vorhanden. Allerdings bietet der Anbieter auch eine Themenwunschliste und vielleicht erweitert sich hier ja noch das Angebot.Alternativ kann ich für SAP natürlich auch das Flatrate-Angebot von Espresso Tutorials empfehlen, dass neben Bücher auch Videos im Angebot hat.
Auf der Seite "Espresso Tutorials - die digitale Bibliothek" kann das Angebot von Espresso Tutorials betrachtet werden. Für einen Jahresbetrag erhält man Zugriff auf den Bestand an eBooks des Verlags zu unterschiedlichen SAP Themen. Auf dieser Seite kann sich auch ein Überblick über die vorhandenen Medien verschafft werden.
Fazit
Auch wenn ich persönlich in Bezug auf Videotutorials sehr skeptisch bin, muss ich zugeben, dass ich sehr froh bin, dass mich ein Kollege auf dieses Angebot hingewiesen hat und die Qualität der Videos ebenso wie der vermittelte Stoff überzeugen mich durchaus. Allerdings sollte man ernsthaft darüber nachdenken, welche Kurse für einen interessant sind und eventuell dann tatsächlich nur ein Monatsabo oder eben einen einzelnen Kurs kaufen.Als Alternative zum bewegten Bild sind für mich einfach auch heute noch Buchstaben sehr hilfreich, aber wie schon im Artikel "Onleihe - mein Weg zur digitalen Bibliothek" beschrieben kann ein neues Medium tatsächlich auch den Einstieg in ein bisher noch nciht erlerntes Thema sehr hilfreich sein. Dieses hatte ich ja auch erst beim Thema "Mindmapping und Sketchnotes im Beruf nutzen für Brainstorming oder Mind Mapping mit XMIND" bemerkt. In anderen Bereichen (Blogs, Zeitschriften etc.) ist mir ja ohnehin der Umgang mit "Infotainment oder Nachrichtenapps für Android" vertraut und ich möchte heutzutage nicht mehr darauf verzichten.
Videostreaming auf Monitor / Smart-TV
Ich nutze tatsächlich das Angebot am Tablet und bin davon sehr angetan. Für Personen die gerne am heimischen Smart-TV (bspw. per Amazon Fire TV oder Google Chromecast wobei hier durch Browser Plugin die Weboberfläche an das Smart-TV gesandt werden kann... ebenso gibt es die Möglichkeiten per Miracast das Tablet am Smart-TV zu streamen.... allerdings bin ich hier nicht so wirklich überzeugt und tatsächlich froh über ein Tablet.Tatsächlich unterstützt Video2Brain auch direkt Chromecast, so dass die App im Hintergrund läuft und eine Schulung in der Statusleiste pausiert (bzw. gesteuert) werden kann und direkt an Google Chromecast gestreamt werden kann. Hierdurch ist die Überlegung naheliegend ein solches Angebot auch auf einen großen Monitor ablaufen zu lassen bspw. für eine Gruppenschulung.
Für mich ist dieses auch eine gute Option um nebenbei am Rechner einzelne Schritte nachvollziehen zu können.
Abschlussarbeiten im SAP S/4HANA Controlling (📖)
Für 29,95 € direkt bestellen
Oder bei Amazon ** Oder bei Autorenwelt
16:58 Uhr
Dynamisches Importieren von Daten aus Excel nach Access unter Abfrage Speicherpfad per Makro und VBA
Innerhalb einer Access-Datenbank sollen verschiedene Berichte zusammengefasst und durch Abfragen miteinander verbunden werden. Hierzu ist es jedoch erforderlich, dass die zugrunde liegenden Tabellen aktualisiert werden und dafür in die Datenbank importiert werden können. Da es sich um eine Vielzahl von Tabellen handelt ist die Importfunktion in Access etwas umständlich. Vergleichbar zum Artikel "Excel Umgang mit Makros und Visual Basic for Applications (VBA)" bietet aber auch Access die Möglichkeit Makros zur Arbeitserleichterung zu verwenden an.
Makro unter Access zum Import erstellen
Zur Erstellung eines Makros kann im Ribbon Erstellen in der Befehlsgruppe Andere die Funktion Makro ausgewählt werden.Hierbei unterscheiden sich die Oberflächen zwischen Access 2007 und Access 2010 erheblich. Daher wird im Folgenden sowohl auf Access 2007 als auch Access 2010 eingegangen.
Makro unter Access 2007 erstellen
Damit alle Funktionen zur Erstellung eines Makros aktiviert sind sollten sowohl die Schaltfläche "Alle Aktionen anzeigen", "Bedingungen" als auch "Argumente" in der Symbolleiste Entwurf aktiviert sein.Insbesondere die Möglichkeit Bedingungen vor der Ausführung von Aktionen zu hinterlegen ermöglicht es für jede Aktion vorher eine Rückfrage einzuholen.
1. Vorhandene Tabellen löschen
Als ersten Schritt sollen die bestehenden importierten Tabellen in der Datenbank gelöscht werden. Hierzu wird über die Aktion "Löschen Objekt" der Objekttyp Tabelle und über das Feld Objektklasse die eigentliche Tabelle gelöscht. Im Beispiel ist dieses die Tabelle "Grunddaten".
Durch die Bedigung Meldung("Tabelle löschen";1)=1 wird diese Aktion nur bei Bestätigung ausgeführt.
2. Neue/Aktualisierte Tabellen einfügen
Über die Funktion "TransferArbeitsblatt" kann sowohl der Import als auch Export von Tabellen erfolgen. Im Beispiel soll eine Exceltabelle (ExcelWorkbook) als Tabelle "Grundtabelle" importiert werden. Dieses funktioniert über den Transfertyp Importieren, Dateiformat Excel Workbook und Angabe des Tabellennamen "Grundtabelle"
Hierbei können sowohl der Dateiname hinterlegt werden (im Beispiel B:import.xls) als auch über das Feld Bereich das zu importierende Tabellenblatt (im Beispiel Grunddaten!A-Z) angegeben werden. Hier zeigt sich auch schon der Nachteil von Makros, da sowohl der Dateiname als auch der Speicherort fix angegeben werden müssen.Über die Option Besitzt Feldnamen wird die erste Zeile der Tabelle als Datensatzbeschreibung verwendet. Durch die Bedingung kann wiederum abgesichert werden, dass nicht aus Versehen unbeabsichtigt eine Tabelle importiert wird.
3. Abfrage per Makro starten
Wenn alle Tabellen importiert sind kann über die Aktion "ÖffnenAbfrage" eine entsprechende Abfrage gestartet werden.
Durch die Ansicht Datenblatt erscheint die Abfrage auch direkt als Auswertung und kann exportiert oder weiter bearbeitet werden.
Makro unter Access 2010 erstellen
Ab Access 2010 hat sich die Darstellung zur Erstellung von Makros von einer Tabellenform und darunter liegenden Attributen zu einer Baumstruktur verändert. Ferner wurde die Aktion TransferArbeitsblatt in die Aktion ImportierenExportierenTabellenblatt umbenannt. Bestehende Makros werden direkt umgewandelt.Das eingangs beschriebene Makro würde unter Access 2010 wie folgt geschrieben werden:
Makro zu Visual Basic konvertieren
Sicherlich sind solche Makros eine Arbeitserleichterung beim Import und auch der Verarbeitung von außerhalb der eigentlichen Access Datenbank liegenden Tabellen und sonstigen Daten.Allerdings sind prinzipbedingt die einzelnen Abfragen auch relativ eingeschränkt in ihrer Funktionsweise. So war es in Access 2007 nur möglich für jede einzelne Aktion eine entsprechende Bedingung zu definieren. Ab Access 2010 können innerhalb der Bedingung auch mehrere Aktionen eingefügt werden. Allerdings ist auch unter Access der Import von Tabellenblättern nur über die Angabe des genauen Dateinamens inklusive Speicherort möglich. Hier gibt es unter VBA aber darüber hinaus gehende Möglichkeiten. Im ersten Schritt muss hierfür das angelegte Makro in eine VBA Funktion umgewandelt werden
Unter Access 2007 kann über die Datenbanktools die Funktion "Makros zu Visual Basic konvertieren" aufgerufen werden.
Ab Access 2010 befindet sich diese Funktion in der Entwurfsansicht des jeweiligen Makros.
Unter beiden Funktionen wird das vorher entworfene Makro dann als VBA Code dargestellt und kann als Modul im VBA Editor betrachtet und bearbeitet werden.
Der VBA Code für das oben beschriebene Makro würde dabei wie folgt umgewandelt werden.
Das beschriebene Makro ist nun als Function angelegt und steht als VBA Modul in der Access Datenbank zur Verfügung.
Per Makro VBA Funktion ausführen
Diese Funktion kann dann als Code über ein neues Makro aufgerufen werden.Unter Access 2007 ist dieses über die Aktion "AusführenCode" möglich.
Hier wird direkt die nun vorhandene Funktion Import ohne weitere Argumente ausgeführt.
Ab Access 2010 hat sich hier eigentlich nur die Darstellung verändert, so dass auch hier der Code ausgeführt werden kann.
Erweiterung Makro um VBA Code
Der Vorteil bei der Umwandlung zu VBA besteht darin, dass nun die aus der Makrofunktion bekannten Funktionen erheblich erweitert werden können.Dynamischer Speicherort zum Import von Daten verwenden
Wie beim Makro TransferArbeitsblatt beziehungsweise ImportierenExportierenTabellenblatt beschrieben muss zum Import einer Tabelle nach Access sowohl der Dateiname der Exceltabelle als auch der Speicherort (im Beispiel war dieses b:import.xls) angegeben werden. Sofern die Datenbank aber flexibel genutzt werden soll, oder aber sich der Speicherort der zu importierenden Daten auch ändern kann, kann folgende Ergänzung des VBA Codes sinnvoll sein.Dim Pfad As String
Pfad = Application.CurrentProject.Path
If MsgBox("Import aus " & Pfad & " ?", vbYesNo) = vbYes Then
Pfad = InputBox("Pfadnamen ohne abschliessenden ")
End If
MsgBox "Import aus " & Pfad & " !", vbInformation, "Importquelle"
Über die Anweisung DIM Pfad As String wird eine Variable von Typ String definiert. Diese Variable bekommt als Wert den aktuellen Projektpfad der Accessdatenbank zugewiesen, so dass die Datenbank im Idealfall zu den zu importierenden Dateien kopiert werden kann.
Sofern die Importdaten jedoch in einen anderen Pfad liegen kann über die InputBox ein anderer Pfad angegeben werden. In Form einer Infobox wird danach noch einmal der Importpfad angegeben.
Die Anweisung zum Import der Tabelle import.xls kann nun wie folgt angepasst werden:
If (MsgBox("Tabelle importieren", 1) = 1) Then
DoCmd.TransferSpreadsheet acImport, 10, "Grundtabelle", Pfad & "import.xls", True, "Grunddaten!A:Z"
End If
Hier wird nun ebenfalls das Tabellenblatt Grunddaten aus der Tabelle import.xls importiert. Jedoch kann der Speicherort vorher nochmals geändert werden. Sofern dieser Pfad nicht geändert wurde, wird der Pfad der Access-Datenbank verwendet.
Verschachtelte Bedingungen
Ein weiterer Vorteil innerhalb VBA ist, dass hier auch mehrere Bedingungen miteinander verschachtelt werden können oder auch mehrere Aktionen nach einer Bedingung gestartet werden können.
Sollen nach erfolgreichen Import der Tabellen auch mehrere Abfragen gestartet werden kann dieses über folgende Anweisung erfolgen.
MsgBox "Daten wurden importiert", vbOKOnly, "Keine Panik"
If (MsgBox("Auswertungen starten", 1) = 1) Then
DoCmd.OpenQuery "110 Auswertung 1", acViewNormal, acReadOnly
DoCmd.OpenQuery "120 Auswertung 2", acViewNormal, acReadOnly
DoCmd.OpenQuery "130 Auswertung 3", acViewNormal, acReadOnly
MsgBox "Speichern Sie die einzelnen Abfragen und kopieren die Daten über Inhalte Einfügen->Transponieren in die Zieltabelle", vbInformation, "Daten ausgewertet"
End If
Hierdurch werden nach erfolgreichen Importiert der Tabellen drei Auswertungen gestartet und eine Anweisung ausgegeben, wie mit diesen weiter verfahren werden soll. Dieses erfolgt über die Anweisung DoCmd.OpenQuery verbunden mit der Darstellung Normal und Schreibgeschützt. Danach wird über die Anweisung MsgBox eine Anweisung zur weiteren Verarbeitung der Daten ausgegeben.
Insgesamt würde die angepasste Anweisung wie folgt lauten:
Entsprechend könnten auch weitere Anweisung innerhalb des VBA Codes angepasst werden und hierdurch eine wesentlich flexiblere Importfunktion gestaltet werden. Darüber hinaus können auch weitere Informationen und Anweisungen zur Handhabung der Datenbank hinterlegt werden.
Als Gesamtcode würde dieses dann in Access 2010 wie folgt aussehen:
Function Import()
Dim Pfad As String
Pfad = Application.CurrentProject.Path
If MsgBox("Import aus " & Pfad & " ?", vbYesNo) = vbYes Then
Pfad = InputBox("Pfadnamen ohne abschliessenden ")
End If
MsgBox "Import aus " & Pfad & " !", vbInformation, "Importquelle"
If (MsgBox("Tabelle löschen?", 1) = 1) Then
DoCmd.DeleteObject acTable, "Grunddaten"
End If
If (MsgBox("Tabelle importieren", 1) = 1) Then
DoCmd.TransferSpreadsheet acImport, 10, "Grundtabelle", Pfad & "import.xls", True, "Grunddaten!A:Z"
End If
MsgBox "Daten wurden importiert", vbOKOnly, "Keine Panik"
If (MsgBox("Auswertungen starten", 1) = 1) Then
DoCmd.OpenQuery "110 Auswertung 1", acViewNormal, acReadOnly
DoCmd.OpenQuery "120 Auswertung 2", acViewNormal, acReadOnly
DoCmd.OpenQuery "130 Auswertung 3", acViewNormal, acReadOnly
MsgBox "Daten über Inhalte Einfügen->Transponieren in die Zieltabelle", vbInformation, "Daten ausgewertet"
End If
Import_Exit:
Exit Function
Import_Err:
MsgBox Error$
Resume Import_Exit
End Function
Microsoft Office 365 Abo verlängern
Microsoft Office 365 Home
Microsoft Office 365 Business Premium
Microsoft Office Produkte - Jahreslizenz und Dauerlizenzen
* Als Amazon-Partner verdiene ich an qualifizierten Käufen über Amazon.
19:50 Uhr
Access (leere Datenfelder summieren)
In einer Abfrage sollen aus 3 Tabellen (Vorjahr, Laufendes Jahr und Folgejahr) für entsprechende Kostenträger Budgetwerte summiert werden.
Hierzu werden die Felder
Budget_VJ
Budget_LJ
Budget_FJ
aus den entsprechenden Tabellen ausgwertet und addiert.
Hier soll die Berechnung allerdings auch ausgeführt werden, wenn der Feldwert leer ist.
Beispiel:
Für Kostenträger 0815 gibt es nur einen Budget_VJ. In einer Abfrage sollen nun aber Budget_VJ + Budget_LJ + Budget_FJ ermittelt werden. Access rechnet allerdings nicht mit leeren Feldwerten, so dass hier trotz vorhanden Budget_VJ kein Wert ausgegeben wird.
Lösung:
Sollen Berechnungen auch ausgeführt werden, wenn der Feldwert leer ist, so ist bei den Feldwerten (im Beispiel Budget_VJ, Budget_LJ und Budget_FJ)
die Formel
Vorjahresbudget:
NZ([Vorjahrestabelle]![Budget_VJ];0)
zu nehmen.
Nun wird eine 0 ausgegeben sofern kein eigener Wert im Feld vorhanden war. Auf diese Weise kann nun innerhalb einer Formel auch bei teilweise nicht gefüllten Werte eine Summe gebildet werden.
Der Aufbau der Funktion ist NZ(Ausdruck;WertWennNull).
Alternativ könnte auch eine Aktualisierungsabfrage über die Tabelle mit Kriterium "IST NULL" ausgeführtwerden um die entsprechenden Felder mit "0" zu aktualisieren.
Hiernach ist auch das Rechnen mit diesen Spalten möglich.
Aktuelles von Andreas Unkelbach
unkelbach.link/et.reportpainter/
unkelbach.link/et.migrationscockpit/
Keine Kommentare - Permalink - Office