Excel Tips
Transcription
Excel Tips
Inhaltsverzeichnis ADD-IN IN ARBEITSMAPPE UMWANDELN ................................................................................................................ 4 AKTUELLES DATUM ALS DATEINAMEN ZUWEISEN ............................................................................................... 4 ALLE ARBEITSMAPPEN AUF EINMAL SPEICHERN ................................................................................................. 5 ALTERNATIVEN ZUM STANDARD-TABELLENSCHUTZ VON EXCEL...................................................................... 6 ANZAHL UNTERSCHIEDLICHER EINTRÄGE IN EINEM TABELLENBEREICH ERMITTELN................................... 8 ANZEIGE VON NULLWERTEN UNTERDRÜCKEN...................................................................................................... 9 ARBEITSMAPPEN-REGISTER ALPHABETISCH SORTIEREN ................................................................................ 10 AUSFÜLLEN PER DOPPELKLICK ............................................................................................................................. 11 AUTOMATISCHE ZAHLENUMWANDLUNG VERHINDERN...................................................................................... 11 AUTOMATISCHER TABELLENSCHUTZ PER MAUSKLICK..................................................................................... 12 BEDINGTE FORMATIERUNG MIT BEZÜGEN AUF ANDERE TABELLEN............................................................... 13 BEDINGTE FORMATIERUNG MIT MEHR ALS 3 BEDINGUNGEN ........................................................................... 15 BELIEBIGE SORTIERFOLGEN MIT BENUTZERDEFINIERTEN LISTEN ................................................................. 16 BELIEBIGES EXCEL-TABELLENBLATT FÜR SERIENDRUCK IN WORD............................................................... 17 BENUTZERNAMEN AUSLESEN (API) ....................................................................................................................... 18 BEREICH PER VBA KOPIEREN ................................................................................................................................. 19 BLATTREGISTER NACH FARBE SORTIEREN ......................................................................................................... 19 DATEN KOMFORTABEL ÜBERTRAGEN .................................................................................................................. 20 DATUMSFORMEL ODER WERT ................................................................................................................................ 21 DEZIMALZAHL ALS BRUCH ANZEIGEN................................................................................................................... 22 DEZIMALZAHLEN AM KOMMA AUSRICHTEN ......................................................................................................... 22 DIAGRAMMACHSEN IN KORREKTEN PROPORTIONEN SKALIEREN................................................................... 23 DIAGRAMME VOLL AUTOMATISCH AKTUALISIEREN ........................................................................................... 26 DIE DREI HÖCHSTEN WERTE SUMMIEREN ............................................................................................................ 27 DOPPELTE EINTRÄGE IN EINER SPALTE VERHINDERN....................................................................................... 28 DROPDOWN-FELDER IN ZELLEN MITEINANDER VERKNÜPFEN.......................................................................... 30 DRUCKBEREICH EINFACHER FESTLEGEN ............................................................................................................ 31 DRUCKEN VON ARBEITSMAPPEN VERHINDERN .................................................................................................. 31 DUPLIKATE IN ADRESSLISTEN FINDEN UND LÖSCHEN ...................................................................................... 32 DYNAMISCHE DIAGRAMME DURCH STEUERELEMENTE ..................................................................................... 35 DYNAMISCHER MAUSZEIGER, TEIL 2 ..................................................................................................................... 36 ECHTE ARBEITSTAGE............................................................................................................................................... 39 EINZELNE ZELLEN AUSBLENDEN ........................................................................................................................... 40 EXCEL-DATEN NACH WORD ÜBERNEHMEN.......................................................................................................... 41 EXTRAHIEREN VON ZELLINHALTEN MIT LEERZEICHEN TRENNUNG IN EXCEL (FORMEL)............................. 42 FEHLENDE DATENPUNKTE IN DIAGRAMMEN........................................................................................................ 42 FEHLERWERTE IN TABELLEN UNTERDRÜCKEN................................................................................................... 43 FLEXIBLES KOPIEREN IN EXCEL 97 UND 2000 ...................................................................................................... 44 FORMATIERTE ZELLEN MIT TEXT KOMBINIEREN ................................................................................................. 45 FORMEL OHNE ÄNDERUNG KOPIEREN.................................................................................................................. 45 FORMELN TEILWEISE BERECHNEN ........................................................................................................................ 46 GEBURTSTAGE UND ALTERSBERECHNUNG ........................................................................................................ 46 GEFUNDENE DATENSAETZE AUTOMATISCH LOESCHEN ................................................................................... 48 GESCHÜTZTE ZELLEN PER VBA BEARBEITEN ..................................................................................................... 50 GRAFIKEN IN EXCEL BEARBEITEN ......................................................................................................................... 50 GROßE TABELLENBEREICHE KOMFORTABEL MARKIEREN ............................................................................... 51 GRÖßTE WERTE AUS EINEM BEREICH ERMITTELN ............................................................................................. 52 INHALTSVERZEICHNIS FÜR ARBEITSMAPPEN AUTOMATISCH ANLEGEN........................................................ 52 INTEGRIERTE DIALOGE VON EXCEL....................................................................................................................... 53 INTERNET-TABELLEN GANZ EINFACH ÜBERNEHMEN......................................................................................... 54 KOMFORTABLE NAVIGATION MIT DER EXCEL-LUPE ........................................................................................... 54 KOMFORTABLER UMGANG MIT GROßEN MARKIERUNGEN ................................................................................ 59 KOPF- UND FUßZEILENTRICKS FÜR EXCEL .......................................................................................................... 59 LAUFENDE SUMME INNERHALB EINER ZELLE ..................................................................................................... 60 LAUFWERKE AUSLESEN IN VBA ............................................................................................................................. 62 LEERE ZELLE IN EINEM BEREICH FINDEN ............................................................................................................. 63 LETZTES SPEICHERDATUM IN ZELLE SCHREIBEN............................................................................................... 63 LINEARE GLEICHUNGSSYSTEME ............................................................................................................................ 64 LISTEN GRUPPIEREN UND DURCH SEITENWECHSEL TRENNEN........................................................................ 65 MAKROS UND FUNKTIONEN IMMER VERFÜGBAR. ............................................................................................... 66 MAXIMALE ANZAHL ZEILEN IN EXCEL.................................................................................................................... 68 MEHRERE DRUCKER KOMFORTABEL NUTZEN..................................................................................................... 68 MEHRFACHAUSWAHL IN VBA AUSWERTEN.......................................................................................................... 70 NACHNAMEN AUS EINER ZEICHENKETTE ERMITTELN........................................................................................ 71 NAMENSDEFINITIONEN IM ÜBERBLICK.................................................................................................................. 72 OPTIMALE SPALTENBREITE PER MAUSKLICK...................................................................................................... 72 PERFEKTER AUSDRUCK MIT DEM KOSTENLOSEN BERICHT-MANAGER.......................................................... 73 PRÜFEN AUF MARKIERTEN BEREICH..................................................................................................................... 74 QUARTALSNUMMER FÜR EIN DATUM BERECHNEN............................................................................................. 75 QUERSUMME BILDEN................................................................................................................................................ 75 RANGFOLGE MIT GEWICHTETEN KRITERIEN........................................................................................................ 75 REALLASTCELL FUNCTION...................................................................................................................................... 77 RECHNEN MIT UHRZEITEN ....................................................................................................................................... 77 RELATIVE BEREICHSNAMEN IN IHREN FORMELN ................................................................................................ 79 RUNDUNGSFORMEL AUF 0.05 (WÄHRUNG) ........................................................................................................... 80 RUNDUNGSFORMEL AUF BELIEBIGE WERTE ....................................................................................................... 81 SEITENUMBRÜCHE PRO KATEGORIEEBENE EINFÜGEN ..................................................................................... 81 SO LÖSEN SIE DIE VERKNÜPFUNG ZWISCHEN DIAGRAMM UND TABELLE ..................................................... 82 SPEICHERN VON ARBEITSMAPPEN VERHINDERN ............................................................................................... 84 STANDARD-DIALOG VON EXCEL PER VBA ANZEIGEN ........................................................................................ 85 STARTPOSITION BEIM ÖFFNEN EINER ARBEITSMAPPE...................................................................................... 85 STATUSMELDUNGEN WÄHREND DER MAKROAUSFÜHRUNG ............................................................................ 86 SUMMENFUNKTION MIT MEHR ALS 30 ARGUMENTEN......................................................................................... 86 SVERWEIS BEISPIEL SCHULNOTEN PER EXCEL-TABELLE ERMITTELN ........................................................... 87 TABELLEN KOMFORTABEL AUSWERTEN.............................................................................................................. 88 TABELLEN-BEREICHE KOMFORTABEL VERGLEICHEN ....................................................................................... 89 TABELLENBLATT VERBERGEN ............................................................................................................................... 89 TABELLENBLÄTTER ABSOLUT SICHER VERSTECKEN........................................................................................ 90 TAGESSALDO KOMFORTABEL BERECHNEN ........................................................................................................ 90 TEXT- INS ZAHLENFORMAT UMWANDELN............................................................................................................. 91 TEXTWERTE MIT ZAHLEN ODER FORMELN KOMBINIEREN ................................................................................ 92 VBA-CODE PER KNOPFDRUCK AUS EINER EXCEL-DATEI ENTFERNEN............................................................ 93 VERKNÜPFUNGEN OPTIMAL IM GRIFF ................................................................................................................... 95 VERLAUFSBALKEN IN IHREN VBA-MAKROS ......................................................................................................... 96 VERWEIS AUF LETZTE ZEILE IN ANDEREM TABELLENBLATT (DYNAMISCH)................................................... 97 WERTE UND BEREICHE KOMFORTABEL ÜBERWACHEN .................................................................................... 97 WERTEANZAHL UND SUMME JE NACH AUSWAHLKRITERIUM ........................................................................... 99 WIEDERHOLEN-FORMATE...................................................................................................................................... 100 WORD 2002 VERLIERT ZAHLENFORMATIERUNGEN BEIM SERIENDRUCK...................................................... 100 ZÄHLENWENN MIT MEHREREN BEDINGUNGEN (273) ........................................................................................ 101 ZEICHENKETTEN KOMFORTABEL PER VBA VERARBEITEN ............................................................................. 102 ZEITANGABEN ÜBER 24 STUNDEN SUMMIEREN ................................................................................................ 104 ZELLINHALTE KOMPLETT LÖSCHEN .................................................................................................................... 104 ZIRKELBEZÜGE AUTOMATISCH AUFLISTEN ....................................................................................................... 105 ZUFALLSZAHLEN KOMFORTABEL ERZEUGEN ................................................................................................... 106 ZWEI ZELLEN ZUSAMMENFÜGEN MIT ZEILENWECHSEL................................................................................... 107 Home Add-In in Arbeitsmappe umwandeln Versionen: Excel 97, 2000 und 2002 FRAGE: In Ausgabe 4/2002 haben Sie Add-Ins als Möglichkeit zur flexiblen Speicherung von Makros und VBA-Funktionen vorgestellt. Dabei wurde die Arbeitsmappe nach dem Erstellen des Add-Ins ohne Speicherung geschlossen. Wie kann ich aus einem Add-In aber bei Bedarf wieder einer Arbeitsmappe machen und auf die Tabellen sowie die Datei-Eigenschaften zugreifen? Dazu müsste ich die zugrundeliegende XLS-Datei doch eigentlich sichern, oder? K. Liebig ANTWORT: Bis Excel 95 konnte ein Add-In tatsächlich nicht ohne weiteres wieder in eine Arbeitsmappe umgewandelt werden. Ab Excel 97 gibt es eine einfache, wenn auch wenig bekannte Möglichkeit: 1. Wechseln Sie in den VBA-Editor und öffnen Sie im Projekt-Explorer das VBA-Projekt des gewünschten Add-Ins. 2. Öffnen Sie den Zweig "Microsoft Excel Objekte" und klicken Sie auf "Diese Arbeitsmappe". 3. Im Fenster "Eigenschaften - Diese Arbeitsmappe" finden Sie nun eine Eigenschaft "IsAddin", die Sie einfach von "Yes" auf "No" setzen. Daraufhin erscheint das Add-In sofort als normale Arbeitsmappe in Excel. Sie können die Tabellenblätter bearbeiten und auf Wunsch die Datei-Eigenschaften verändern. Danach kehren Sie dann wieder in die Entwicklungsumgebung zurück, ändern die Eigenschaft "IsAddin" wieder auf "Yes" und schon steht Ihnen wieder ein Add-In mit den gewünschten Änderungen zur Verfügung. Wichtig dabei: Bitte wählen Sie direkt danach das Menü Datei-<Name>.xla speichern an, damit die aktuelle Version des Add-Ins gespeichert wird. Aktuelles Datum als Dateinamen zuweisen Versionen: Excel 97, 2000 und 2002 FRAGE: Um die Bearbeitungen einer Arbeitsmappe zu dokumentieren, weise ich ihr beim Speichern immer das aktuelle Datum als Dateinamen zu. Kann ich diese Aufgabe nicht automatisieren? U. Schneller ANTWORT: Mit ein paar Zeilen VBA-Code ist das kein Problem. Die nachfolgenden Beispiele zeigen zwei Varianten: Variante 1 speichert die aktuelle Datei ohne weitere Rückmeldungen unter dem aktuellen Datum in einem vorgegebenen Ordner. Variante 2 nutzt das übliche Dialogfeld Speichern unter und schlägt als Dateinamen automatisch das aktuelle Datum vor. Den Zielordner können Sie auf diese Weise selbst bestimmen. Variante 1 - Sofortiges Speichern: Wechseln Sie mit Alt+F11 in den Visual Basic-Editor und öffnen Sie per Einfügen-Modul ein neues Codefenster. Darin geben Sie folgende Prozedur ein: Sub MitDatumSpeichern() Dim strPfad As String Dim strDateiname As String Home Home strPfad = "C:\\Eigene Dateien\\" strDateiname = Format(Now(), "ddmmyyyy") ActiveWorkbook.SaveAs (strPfad & strDateiname) End Sub Um die Prozedur an Ihre Systemumgebung anzupassen, müssen Sie die Pfadangabe in der Zeile "strPfad = ..." entsprechend ändern. Beachten Sie dabei, dass der Pfad mit einem "\" enden muss. Als Datumsformat kommen hier zweistellige Tages- und Monatsangaben sowie eine vierstellige Jahreszahl zum Einsatz. Wenn Sie eine andere Formatierung wünschen, bearbeiten Sie einfach das Datumsformat "ddmmyyyy". Variante 2 - Speichern per Dialogfeld: Gehen Sie wie in Variante 1 vor, um ein neues Codefenster im VB-Editor einzurichten, in das Sie die folgende Prozedur einfügen. Alternativ können Sie den Prozedurcode auch direkt unter der ersten Prozedur eingeben: Sub SpeichernUnterDatum() Dim strDateiname As String strDateiname = Format(Now(), "ddmmyyyy") Application.Dialogs(xlDialogSaveAs).Show (strDateiname) End Sub Für das Datumsformat gelten die selben Anmerkungen wie in Variante 1. Anstelle die aktuelle Datei sofort zu speichern, lassen Sie hier aber das integrierte Dialogfeld Speichern unter anzeigen. Als Argument übergeben Sie das aktuelle Datum, so dass es im Dialogfeld automatisch als Dateinamensvorgabe erscheint. Wenn Sie die Prozeduren ausführen wollen, drücken Sie in der Excel-Arbeitsmappe die Tastenkombination Alt+F8. Anschließend genügt ein Doppelklick auf "MitDatumSpeichern" oder "SpeichernUnterDatum". Probieren Sie aus, welche Variante Ihnen besser gefällt. Alle Arbeitsmappen auf einmal speichern Versionen: Excel 97, 2000 und 2002 FRAGE: Wenn ich die Umschalt-Taste festhalte und dann das Menü Datei öffne, stellt mir Excel zwar den Befehl Alle schließen zur Verfügung. Ich möchte die geöffneten Arbeitsmappen aber nicht schließen, sondern in einem Arbeitsgang speichern. Gibt es auch für diesen Zweck einen Shortcut? M. Drexler ANTWORT: Leider bietet Excel von Haus aus tatsächlich nur das gleichzeitige Schließen aller geöffneten Dateien an. Wenn Sie alle Arbeitsmappen "in einem Rutsch" speichern wollen, ohne sie zu schließen, müssen Sie mit einem VBA-Makro nachhelfen. Home Home Wechseln Sie also mit Alt+F11 in den Visual Basic-Editor und richten Sie mit dem Befehl Einfügen-Modul ein neues Codefenster ein. Geben Sie folgende Prozedur ein: Public Sub AllesSpeichern() Dim objMappe As Workbook For Each objMappe In Application.Workbooks If objMappe.Path <> "" Then objMappe.Save Else objMappe.Activate Application.Dialogs(xlDialogSaveAs).Show _ (objMappe.Name) End If Next objMappe MsgBox "Speichervorgang beendet!" End Sub Die For-Schleife durchläuft alle geöffneten Arbeitsmappen, wobei sie prüft, ob die aktuelle Mappe bereits eine Pfadangabe besitzt. Wenn das der Fall ist, wird die Datei gespeichert. Sollte keine Pfadangabe vorhanden sein, bedeutet das, dass es sich um eine neue, bislang noch nicht gespeicherte Arbeitsmappe handelt. Unter dieser Voraussetzung zeigt die Prozedur das eingebaute Dialogfeld Speichern unter an. So haben Sie Gelegenheit, die Datei unter einem Namen Ihrer Wahl zu speichern. Falls Sie im Dialogfeld auf Abbrechen klicken, wird die Datei natürlich nicht gespeichert! Sobald alle Dateien abgearbeitet sind, weist Sie ein Meldungsfenster auf das Ende des Speichervorgangs hin. Aus Excel rufen Sie die Prozedur über das Dialogfeld Makro auf, das Sie am schnellsten mit der Tastenkombination Alt+F8 öffnen. Das Makro "AllesSpeichern" steht so lange zur Verfügung, wie die Datei mit dem Makrocode geöffnet ist. Alternativen zum Standard-Tabellenschutz von Excel Versionen: Excel 97, 2000 und 2002/XP Normalerweise müssen Sie, um Zellen in einer Tabelle zu schützen, die komplette Tabelle über den Befehl Schutz-Blatt schützen aus dem Menü Extras schützen. Dabei kann ein Passwort vergeben werden, das Sie sich gut merken müssen. Wie schnell gerät ein Passwort beispielsweise nach einem längeren Urlaub in Vergessenheit. Meine heutige Kolumne beschäftigt sich mit dem Thema, welche Alternativen Ihnen zur Verfügung stehen, um einzelne Zellen oder ganze Bereiche zu schützen, ohne auf den Passwortschutz der Tabelle zurückgreifen zu müssen. Variante 1: Anlage einer ScrollArea In der ersten Lösung wird in einer Tabelle eine so genannte ScrollArea definiert. Sie können also bestimmte Teile einer Tabelle festlegen, in denen sich der Anwender aufhalten darf. Dieser Bereich muss zusammenhängend sein, so dass Sie nicht mehrere Bereiche schützen können. Im folgenden Beispiel wird der Zellenbereich außerhalb des Bereiches "A1:D25" in der "Tabelle1" geschützt. Um die ScrollArea Home Home einzustellen, gehen Sie folgendermaßen vor: 1. Klicken Sie das Register von "Tabelle1" mit der rechten Maustaste an und rufen Sie das Kontextmenü Code anzeigen auf. Damit gelangen Sie direkt in die Entwicklungsumgebung von Excel. 2. Im Project-Explorer führen Sie einen Doppelklick auf den Eintrag "DieseArbeitsmappe" durch. 3. Im Code-Fenster markieren Sie im ersten Dropdown den Eintrag "Workbook". Damit wird automatisch das Ereignis "Workbook_Open" eingestellt, das immer dann ausgeführt wird, wenn Sie die Arbeitsmappe öffnen. 4. Ergänzen Sie das Ereignis wie folgt: Private Sub Workbook_Open() Worksheets(1).ScrollArea = "A1:D25" End Sub Alle Zellen außerhalb dieses Bereiches können nun nicht mehr markiert und damit auch nicht mehr editiert werden können. Um die ScrollArea wieder aufzuheben, bzw. zu erweitern muss das Ereignis "Workbook_Open" im Codefenster gelöscht bzw. angepasst werden. Variante 2: Zellschutz über Markierungsschutz einstellen Die zweite Variante erlaubt gleich mehrere Zellen bzw. auch Bereiche zu schützen, ohne eine ScrollArea einzurichten. In der folgenden Aufgabe wird auf der "Tabelle2" in der Spalte C keine Eingabe zugelassen. Dabei wird von Anfang an verhindert, dass diese Spalte für eine Eingabe markiert wird. Um diesen Schutz einzustellen, verfahren Sie wie folgt: 1. Klicken Sie das Register von "Tabelle2" mit der rechten Maustaste an und rufen Sie das Kontextmenü Code anzeigen auf. Damit gelangen Sie direkt in die Entwicklungsumgebung von Excel. 2. Im Code-Fenster wählen Sie aus dem ersten Dropdown den Eintrag "Worksheet" aus. Damit wird automatisch das Ereignis "Worksheet_SelectionChange" eingestellt, das immer dann ausgeführt wird, wenn Sie die eine beliebige Zelle auf dieser Tabelle markieren. 3. Ergänzen Sie dieses Ereignis wie folgt: Private Sub Worksheet_SelectionChange(ByVal Target _ As Range) Application.EnableEvents = False If Target.Column = 3 Then If Range("D1").Value <> "OK" Then Range("A1").Activate End If End If Application.EnableEvents = True End Sub Sobald Sie nun eine Zelle auf "Tabelle2" markieren, wird die Ereignissteuerung über die Anweisung Application.EnableEvents=False ausgeschaltet. Danach erfolgt die Prüfung, ob gerade eine beliebige Zelle in Spalte C markiert wurde. Wenn ja, dann wird der Mauszeiger direkt in Zelle A1 gesetzt und dadurch eine Eingabe in Spalte C verhindert. Danach wird die Ereignissteuerung wieder eingeschaltet. Um eine Eingabe in Spalte C trotzdem zuzulassen, können Sie eine bestimmte Zelle bestimmen, die Sie Home Home als Schalter verwenden. Wenn in dieser Zelle der Text "OK" steht, dürfen auch in Spalte C Eingaben vorgenommen werden. Wird dieser Eintrag wieder gelöscht, ist der Schutz wieder eingestellt. Variante 3: Eingaben sofort wieder entfernen In der letzten Variante werden Eingaben in einem bestimmten Bereich sofort wieder automatisch entfernt. In der folgenden Beschreibung werden in "Tabelle3" die Zeilen 6-8 auf diese Weise geschützt: 1. Klicken Sie auf der "Tabelle3" den Tabellenreiter mit der rechten Maustaste an und wählen Sie Code anzeigen an. 2. Im Code-Fenster wählen Sie aus dem ersten Dropdown den Eintrag "Worksheet" aus. 3. Im zweiten Dropdown markieren Sie den Eintrag "Change" ein. Damit wird das Ereignis "Worksheet_Change" eingestellt, das immer dann automatisch ausgeführt wird, wenn Sie eine Änderung in "Tabelle3" vornehmen. Das Ereignis wird allerdings nicht bei Formatierungsänderungen ausgelöst! Ergänzen Sie dieses Ereignis wie folgt: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row > 5 And Target.Row < 9 Then Application.EnableEvents = False Application.Undo Application.EnableEvents = True Else End If End Sub Bei einer Eingabe in Tabelle3 wird geprüft, ob die Eingabe im zu schützenden Bereich liegt. Wenn ja, dann schalten Sie die Ereignissteuerung von Excel temporär aus, widerrufen die Eingabe mit der Anweisung "Application.Undo" und schalten danach die Ereignissteuerung wieder ein. Anzahl unterschiedlicher Einträge in einem Tabellenbereich ermitteln Versionen: Excel 97, 2000 und 2002 FRAGE: Gibt es eine Möglichkeit herauszufinden, wie viele unterschiedliche Einträge ein Tabellenbereich enthält? Ich organisiere gerade ein Radrennen und möchte anhand der Starterliste ermitteln, aus wie vielen verschiedenen Ländern die Fahrer stammen. S. Hartmann ANTWORT: Sie können die Liste mit Hilfe einer Arrayformel analysieren. Wenn die Daten, die Sie auswerten wollen, zum Beispiel im Bereich C3:C100 stehen, geben Sie in der Zelle, in der Sie die Anzahl unterschiedlicher Einträge ausgeben lassen wollen, folgende Formel ein: =SUMME(1/ZÄHLENWENN(C3:C100;C3:C100)) Schließen Sie die Eingabe aber nicht einfach mit Return ab, sondern drücken Sie Strg+Umschalt+Return. Das ist die Tastenkombination zur Eingabe einer Arrayformel. Excel trägt den Ausdruck daraufhin mit geschweiften Klammern ein, sodass Sie in der Bearbeitungszeile folgendes sehen: {=SUMME(1/ZÄHLENWENN(C3:C100;C3:C100))} Home Home Zur Funktionsweise: die ZÄHLENWENN-Funktion vergleicht den zu analysierenden Bereich mit sich selbst, sodass Sie ein Array erhalten, in dem die Häufigkeiten jedes einzelnen Eintrags stehen. Wenn ein Eintrag zum Beispiel fünf Mal auftaucht, steht an jeder Position dieses Eintrags eine "5". Ein Wert, der nur einmal vorkommt, erhält das ZÄHLENWENN-Ergebnis "1". Indem Sie 1 durch die einzelnen Häufigkeiten teilen, weisen Sie den Arraywerten gewissermaßen eine Wertigkeit zu. Bei einem ZÄHLENWENN-Ergebnis von "5" ist beispielsweise jeder einzelne nur ein Fünftel wert und alle zusammen ergeben "1". Die Summe aller Wertigkeiten entspricht somit der Anzahl der unterschiedlichen Listeneinträge. Die Formel hat jedoch einen Haken: sie funktioniert nur, wenn der zu analysierende Bereich keine leeren Zellen enthält. Dann liefert ZÄHLENWENN den Wert "0", sodass es im Ergebnisarray zu einer Division durch Null (Fehler #DIV/0!) kommt, was auch als Gesamtergebnis der oben genannten Arrayformel ausgegeben wird. Sie können den Fehler aber mit einer Erweiterung der ersten Formel abfangen. Wenn Sie wieder den Bereich C3:C100 untersuchen wollen, geben Sie folgenden Ausdruck als Arrayformel (Strg+Umschalt+Return) ein: =SUMME(1/WENN(ZÄHLENWENN(C3:C100;C3:C100)=0;1; ZÄHLENWENN(C3:C100;C3:C100)))-ANZAHLLEEREZELLEN(C3:C100) Nutzen Sie diese komplexere Variante, wenn Sie nicht ausschließen können, dass der zu analysierende Tabellenbereich Leerzellen enthält. Mit der Formel schließen Sie eine Division durch Null aus. Im Ergebnisarray erscheint aber an jeder Leerzellenposition ein Wert von "1". Da diese Zellen aber gar nicht gezählt werden sollen, ziehen Sie am Ende die Anzahl der leeren Zellen des Bereichs wieder ab. Anzeige von Nullwerten unterdrücken Versionen: Excel 97, 2000 und 2002 FRAGE: In meinem Kalkulationsmodell möchte ich die Anzeige von Nullen als Formelergebnis unterdrücken. Bisher erweitere ich die Formeln dazu immer um eine entsprechende WENNAbfrage, aber geht es nicht einfacher? C. Schürer ANTWORT: Für dieses Problem gibt es gleich mehrere Lösungswege: · · Home Am einfachsten ist es, das Menü Extras-Optionen anzuwählen, auf die Registerkarte "Ansicht" zu wechseln und das Kontrollkästchen Nullwerte auszuschalten. Damit sind dann allerdings alle Nullen aus der kompletten Tabelle verschwunden. Um das Ausblenden von Nullwerten nur auf bestimmte Zellen zu beschränken, können Sie eine bedingte Formatierung einsetzen. Dazu markieren Sie die gewünschten Zellen und wählen das Menü Format-Bedingte Formatierung an. Legen Sie dann die Bedingung Home · "Zellwert ist gleich 0" fest und setzen Sie die Schriftfarbe im Format-Dialog auf "Weiß" (oder die von Ihnen verwendete Farbe für den Zellhintergrund). Eine weitere Alternative wäre die Anpassung des Zahlenformats. Dazu muß man wissen, daß sich jedes Zahlenformat in Excel in vier Bereiche teilt: <Positive Werte>;<Negative Werte>;<Nullwerte>;<Text> Um Nullwerte auszublenden, müssen Sie lediglich dafür sorgen, daß der Abschnitt für Nullwerte leer ist. Dazu löschen Sie zum Beispiel die komplette Definition hinter dem zweiten Semikolon: _-* #.##0 DM_-;-* #.##0 DM_-;;_-@_Sind in dem Zahlenformat nur Formate für positive und negative Werte vorhanden, reicht es, ein zweites Semikolon ohne weitere Zeichen an das Ende der Definition zu hängen: #.##0 DM;-#.##0 DM; Arbeitsmappen-Register alphabetisch sortieren Versionen: Excel 97, 2000 und 2002 FRAGE: Auch wenn Excel verschiedene Möglichkeiten bietet, sich in umfangreichen Arbeitsmappen zurecht zu finden, verliert man dennoch mit steigender Anzahl von Tabellenblättern schnell die Übersicht. In vielen Fällen würde sich eine alphabetische Sortierung der Blätter als Orientierungshilfe anbieten, aber wie kann man das automatisieren. ANTWORT: Die folgende kleine VBA-Prozedur hilft weiter: Sub RegisterSortieren() If MsgBox("Möchten Sie die Blätter der aktuellen " & _ "Arbeitsmappe alphabetisch sortieren?", vbQuestion + _ vbOKOnly, "SmartTools Excel Weekly") = vbNo _ Then GoTo Ende ' Gesamtzahl der Tabellenblätter ermitteln AnzahlRegister = Sheets.Count For I = 1 To AnzahlRegister - 1 X=I For Zähler = I + 1 To AnzahlRegister If UCase$(Sheets(Zähler).Name) < _ UCase$(Sheets(X).Name) Then X = Zähler End If Next Zähler If X > I Then Sheets(X).Move Sheets(I) Home Home Next I Ende: End Sub Geben Sie die Prozedur am besten in Ihre persönliche Makro-Arbeitsmappe PERSONL.XLS ein, die über das Menü Fenster-Einblenden sichtbar gemacht werden kann. So erreichen Sie, daß Ihnen diese nützliche Funktion jederzeit zur Verfügung steht und Sie nicht erst ein Add-In oder eine bestimmte Arbeitsmappe öffnen müssen. Nach der Eingabe der Prozedur, empfiehlt sich das Erstellen eines Menüpunkts oder eines Symbol, über das Sie schnellen Zugriff auf die Prozedur "RegisterSortieren" haben. Anschließend blenden Sie die persönliche Makro-Arbeitsmappe wieder aus und können die neue Funktion einem ersten Test unterziehen: Öffnen Sie eine beliebige Arbeitsmappe mit mehreren Blättern und starten Sie die Prozedur. Nach wenigen Augenblicken steht Ihnen dann eine Arbeitsmappe mit einem alphabetisch sortierten Register zur Verfügung. Ausfüllen per Doppelklick Versionen: Excel 97, 2000 und 2002/XP Mit dem Ausfüllkästchen können Sie bekanntlich Formeln und Datenreihen schnell und komfortabel in Ihre Tabellen einfügen. Wenig bekannt ist allerdings der folgende Trick: Bei einem Doppelklick auf das Ausfüllkästchen, analysiert Excel die aktuelle Markierung und versucht, eine passende Datenreihe nach unten auszufüllen. Dabei wird eine nebenstehende Spalte als Orientierungspunkt für das Ende der Reihe verwendet. Probieren Sie es einfach an einem kleinen Beispiel: · Geben Sie in die Zellen B2 bis B10 beliebige Werte ein. Wir nehmen einmal an, dass es sich dabei um verschiedene Nettopreise handelt, zu denen Sie den Bruttopreis ermitteln möchten. · Klicken Sie in die Celle C2 und geben Sie ein: = B2*1,16 · Bei markierter Zelle C2 führen Sie nun einen Doppelklick auf das Ausfüllkästchen aus. Excel füllt dann automatisch den Bereich C3 bis C10 mit der gewünschten Formel aus. Nach diesem Prinzip können Sie jede beliebige Datenreihe per Doppelklick einfügen, die Sie auch normalerweise mit dem Ausfüllkästchen erstellen könnten. In unserem Beispiel würde es auch beispielsweise reichen, in Zelle A2 das Wort "Januar" anzugeben, um dann die Zellen A3 bis A10 per Doppelklick auf das Ausfüllkästchen mit den nachfolgenden Monatsnamen zu füllen. Automatische Zahlenumwandlung verhindern Versionen: Excel 97, 2000 und 2002 FRAGE: Als Angestellter einer Baufirma werte ich Leistungsbeschreibungen mit Excel aus und erstelle Übersichten und auch das Aufmass mit Excel. Dabei kommt es ständig vor, dass Excel Ordnungszahlen wie z.B. 01.02.03 in ein Datum umwandelt. Wie kann hier Abhilfe geschaffen werden? Peter Langheim Home Home ANTWORT: Diese Frage wird in den unterschiedlichsten Variationen immer wieder an uns gestellt. Grundsätzlich versucht Excel nach jeder Eingabe, den neuen Zellinhalt zu interpretieren und dann entsprechend auch zu formatieren. Das ist in den meisten Fällen wünschenswert, führt aber in einigen Situationen zu unerwünschten Ergebnissen. Wenden Sie daher einen einfachen Trick an, wenn Sie etwas eingeben möchten, das Excel irrtümlicherweise als Datum interpretieren würde: Stellen Sie der Eingabe ein einfaches Hochkomma (') voran. Das Hochkomma erscheint nicht in der Tabelle, aber es teilt Excel mit, dass die nachfolgende Zeichenkette nicht weiter interpretiert, sondern einfach als Text in die Zelle eingetragen werden soll. Also zum Beispiel: '01.02.03 Automatischer Tabellenschutz per Mausklick Versionen: Excel 97, 2000 und 2002/XP Wenn Sie eine Tabelle so einrichten möchten, dass andere Anwender möglicht komfortabel damit arbeiten können, nutzen Sie den Tabellenschutz von Excel. Dabei schützen Sie gezielt die Zellen mit Formeln, so dass das versehentliche Ändern oder Löschen verhindert wird. Für Änderungen freigegeben sind ausschließlich Zellen mit Zahlen. Leider ist das Schutzkonzept von Excel etwas umständlich, denn nach dem Anwählen des Menüs ExtrasSchutz-Blatt schützen werden alle Zellen geschützt, für die der Status "Gesperrt" aktiviert wurde (Dialogfeld Format-Zellen, Register "Schutz"). Standardmäßig ist das aber bei allen Zellen der Fall, so dass Sie zunächst einmal gezielt die Zellen auswählen müssen, die nicht geschützt werden sollen. Dann wählen Sie das Menü Format-Zellen an, wechseln auf das Register "Schutz" und schalten das Kontrollkästchen Gesperrt aus. Damit Sie sich diesen Aufwand in Zukunft ersparen können, möchten wir Ihnen in diesem Tipp der Woche ein interessantes Makro vorstellen: Sub procFormelzellenSchuetzen() Dim rngAktiveZelle As Range If MsgBox("Möchten Sie alle Formelzellen in diesem " & _ "Blatt schützen? Der Schutz für Zellen mit Zahlen " & _ "wird aufgehoben.", vbQuestion + vbYesNo, _ "Kno hilft: Formeln schützen") = vbNo Then Exit Sub On Error GoTo Fehler ActiveSheet.Unprotect For Each rngAktiveZelle In ActiveSheet.UsedRange If Not rngAktiveZelle.HasFormula And _ Not TypeName(rngAktiveZelle.Value) = "Date" And _ Home Home Application.IsNumber(rngAktiveZelle) Then rngAktiveZelle.Locked = False rngAktiveZelle.Font.ColorIndex = 5 Else rngAktiveZelle.Locked = True rngAktiveZelle.Font.ColorIndex = _ xlColorIndexAutomatic End If Next ActiveSheet.Protect Exit Sub Fehler: MsgBox "Der folgende Fehler ist aufgetreten: " & _ Err.Number & " - " & Err.Description, vbCritical + _ vbOKOnly, "Kno hilft: Formelzellen schützen" End Sub Nachdem Sie das Makro eingegeben haben, können Sie ein neues Kalkulationsmodell jederzeit per Mausklick so vorbereiten, dass es an andere Anwender weitergegeben werden kann: Der ausgefüllte Bereich der Tabelle wird Zelle für Zelle geprüft. Bei Zellen mit Formeln oder Datumsangaben wird der Schutz aktiviert und bei Zellen mit Zahlen ausgeschaltet. Zusätzlich werden die ungeschützten Zellen in blau formatiert, so dass auf den ersten Blick zu sehen ist, an welchen Stellen Daten verändert werden können. Bedingte Formatierung mit Bezügen auf andere Tabellen Versionen: Excel 97, 2000 und 2002/XP FRAGE: Ich versuche gerade, folgende Aufgabe zu lösen: Monatsumsätze werden in separaten Tabellen einer Arbeitsmappe erfasst. Die jeweiligen Auswertungen befinden sich immer am Anfang einer Tabelle und auch immer in den gleichen Zellen. Der Gesamtumsatz steht beispielsweise in jedem Blatt in Zelle C5, die Lohnkosten in C9 usw. Jetzt möchte ich die aktuellen Tabellendaten mit dem jeweiligen Vormonat vergleichen, sodass man möglichst sofort erkennt, ob die Zahlen besser oder schlechter sind. Ideal wäre der Einsatz der "bedingten Formatierung". Doch leider erlaubt diese Funktion keine Bezüge auf andere Tabellen. Wie kann ich das Problem lösen? V. Moosleitner Home Home ANTWORT: Ein kleiner Trick überlistet die Einschränkung der "bedingten Formatierung": Indem Sie Namen definieren, denen Sie geeignete Formeln zuweisen, stehen Ihnen die Daten aus anderen Tabellen auch bei der bedingten Formatierung zur Verfügung. Das Ganze gestaltet sich wie folgt: 1. Öffnen Sie die Arbeitsmappe, in der Sie Vergleiche zwischen verschiedenen Tabellen anstellen wollen. 2. Rufen Sie Einfügen-Name(n)-Festlegen respektive Definieren auf (die genauen Befehlsnamen variieren in den einzelnen Excel-Versionen). 3. Geben Sie im Feld Namen in der Arbeitsmappe die Bezeichnung "AktuellerZellwert" ein. 4. In das Feld Bezieht sich auf tragen Sie keine Zelladresse sondern folgende Formel ein: =INDIREKT("ZS";FALSCH) Diese Formel liefert den Wert der jeweils aktuellen Zelle, was bei Eingabe in einer Tabelle natürlich einen Zirkelbezug verursachen würde. - Hier läuft es aber ohne Fehler ab. · · Schließen Sie die Namensdefinition mit einem Klick auf Ok ab. Wiederholen Sie die Schritte 2 und 3, wobei Sie als Namen dieses Mal "WertInVorigemBlatt" eingeben. · In das Feld Bezieht sich auf tragen Sie wieder eine Formel ein, und zwar mit folgendem Aufbau: =INDIREKT(INDEX(ARBEITSMAPPE.ZUORDNEN(1); DATEI.ZUORDNEN(87)-1)&"!"&ADRESSE(ZEILE();SPALTE())) Die Formel nutzt zwei Excel4-Makrofunktionen: ARBEITSMAPPE.ZUORDNEN(1) gibt eine Matrix mit den Namen aller Tabellenblätter zurück und DATEI.ZUORDNEN(87) liefert den Index (die Position) des aktuellen Blatts. Wenn Sie von diesem Wert die Zahl 1 abziehen, erhalten Sie die Position des vorherigen Blatts. Den Namen dieses Blatts ermitteln Sie per INDEX-Funktion, die in der Matrix aus der ersten Excel4-Makrofunktion nach dem passenden Eintrag sucht. Den so gefundenen Blattnamen verknüpfen Sie mit der Adresse der aktuellen Zelle (ZEILE und SPALTE ohne Argumente), womit Sie die entsprechende Adresse aus dem vorherigen Tabellenblatt erhalten. Per INDIREKT-Funktion lassen Sie sich den Inhalt ausgeben. · · Bestätigen Sie die Eingabe des zweiten Bereichsnamen wieder mit Ok. Damit können Sie zur bedingten Formatierung übergehen. Markieren Sie den Bereich, auf den sie angewendet werden soll und rufen Sie Format-Bedingte Formatierung auf. · Im Kriterienbereich wählen Sie im ersten Dropdown-Feld die Option "Formel ist" aus. · Rechts daneben steht Ihnen daraufhin nur noch ein Eingabefeld zur Verfügung, in das Sie folgende Vergleichsformel eintragen: =AktuellerZellwert>WertInVorigemBlatt Welchen Vergleich die Funktion anstellt, erkennen Sie an den verwendeten Namen. Wenn Sie wollen können Sie natürlich auch den Vergleichsoperator "<" einsetzen, um zu prüfen, ob der aktuelle Wert kleiner ist, als der aus dem vorherigen Tabellenblatt. - Oder Sie definieren zwei Kriterien, denen Sie unterschiedliche Formatierungen zuweisen... Home Home · Legen Sie die gewünschten Formate für das Kriterium fest und schließen Sie die Eingabe der bedingten Formatierung mit Ok ab. Wenn Ihre Tabelle schon Werte enthält, sehen Sie sofort das Ergebnis der aufgeführten Schritte. So praktisch das Verfahren ist, es hat einen kleinen Schönheitsfehler, der normalerweise aber leicht zu beheben ist: Der Dateiname der Arbeitsmappe darf keine Leerzeichen enthalten; ansonsten liefern die Excel4-Makrofunktionen Fehlerwerte, sodass die bedingte Formatierung nicht zum Einsatz kommt. Keine Probleme bereiten dagegen lange Dateinamen. Bedingte Formatierung mit mehr als 3 Bedingungen Versionen: Excel 97, 2000 und 2002 Bei der bedingten Formatierung haben Sie die Möglichkeit, in Abhängigkeit von Eingaben die Zellen automatisch formatieren zu lassen. So können Sie z.B. definieren, dass eine Zelle sich automatisch Rot einfärbt, wenn ein bestimmter Wert eingegeben wird. Mit Hilfe der bedingten Formatierung lassen sich allerdings standardmäßig nur Formatierungen für drei unterschiedliche Bedingungen einstellen. Mehr ist leider über diese Funktion nicht möglich. Mit einem kleinen Ereignismakro können Sie sich aber behelfen. Nehmen wir einmal an, dass Sie nach den folgenden Regeln 6 verschiedene Zellenformatierungen für die Zahlen 1 bis 6 vornehmen möchten: · · 1 - Schwarz 2 - Weiß · · · · 3 - Rot 4 - Grün 5 - Blau 6 - Gelb Diese Vorgaben setzen Sie folgendermaßen um: 1. Drücken Sie die Tastenkombination Alt+F11, um in die Entwicklungsumgebung von Excel zu gelangen. 2. Im Projekt-Explorer führen Sie einen Doppelklick auf die Tabelle durch, in der Sie die erwähnte automatische Formatierung vornehmen möchten. 3. Geben Sie das folgende Makro ein: Private Sub Worksheet_Change(ByVal Target As Excel.Range) Select Case Target.Value Case 1 Target.Interior.ColorIndex = 1 Case 2 Target.Interior.ColorIndex = 2 Case 3 Target.Interior.ColorIndex = 3 Case 4 Target.Interior.ColorIndex = 4 Case 5 Home Home Target.Interior.ColorIndex = 5 Case 6 Target.Interior.ColorIndex = 6 Case Else Target.Interior.ColorIndex = xlColorIndexNone End Select End Sub Wenn Sie danach in Ihrer Tabelle die Zahlen 1 bis 6 eingeben, werden die zugeordneten Farben daraufhin sofort zugewiesen. Geben Sie eine andere Zahl oder einen Text ein, unterbleibt die Formatierung des Zellenhintergrundes, da in dem Makro der Eigenschaft ColorIndex die Konstante xlColorIndexNone zugewiesen wird. Beliebige Sortierfolgen mit benutzerdefinierten Listen Versionen: Excel 97, 2000 und 2002 FRAGE: Ich bin in der Textilbranche tätig und verwalte den Warenverkauf in einer ExcelTabelle. Zu statistischen Zwecken möchte ich die Verkäufe nach den Konfektionsgrößen "Small", "Medium", "Large" usw. sortieren. Das lässt sich weder in einer alphabetischen noch in einer numerischen Reihenfolge umsetzen. Muss ich die Tabelle nach einer normalen (alphabetischen) Sortierung immer erst mit manuellen Kopiervorgängen in die gewünschte Reihenfolge bringen oder gibt es auch eine einfachere Lösung? F. Schomakers ANTWORT: In Ihrem Fall sind "benutzerdefinierte Listen" genau das Richtige. Schon von Haus aus bringt Excel einige solcher Listen mit: zum Beispiel "Januar, Februar, März" usw. oder "Montag, Dienstag" usw. Sie können die Auswahl beliebig erweitern, unter anderem auch durch Listen mit Konfektionsgrößen. "Benutzerdefinierte Listen" haben zwei Vorteile: Zum einen können sie zur individuellen Sortierung von Tabellendaten benutzt werden; und zum anderen lassen sie sich zusammen mit dem "Ausfüllkästchen" (dem kleinen Rechteck in der unteren rechten Ecke einer Zellmarkierung) einsetzen, um Tabellenbereiche automatisch mit einer Wertefolge zu füllen. Gehen Sie wie folgt vor, um beispielsweise eine benutzerdefinierte Liste mit Konfektionsgrößen anzulegen: 1. Öffnen Sie ein leeres Tabellenblatt und geben Sie die gewünschte Wertereihe in untereinander stehenden Zellen ein. 2. Bringen Sie die Werte manuell in die passende Reihenfolge. In Ihrem Fall bedeutet das etwa, dass Sie in die Zellen A1 bis A5 diese Daten eingeben: S, M, L, XXL, XXXL 3. Markieren Sie die gesamte Wertereihe - im Beispiel also die Zellen A1:A5. 4. Wählen Sie das Menü Extras-Optionen an und wechseln Sie auf die Registerkarte AutoAusfüllen (Excel 97/2000) bzw. Benutzerdefinierte Listen (Excel 2002). 5. Der Bezug auf die markierten Zellen erscheint automatisch im Feld Liste aus Zellen importieren. Überprüfen Sie die Eingabe: im Beispielfall muss "$A$1:$A$5" in dem Feld stehen. Wenn alles korrekt ist, klicken Sie auf die Schaltfläche Importieren. Home Home 6. Excel nimmt die neue Liste daraufhin in das linke Listenfeld des Dialogfelds auf und zeigt die einzelnen Elemente in der rechten Liste. Sie brauchen das Ergebnis nur noch mit Ok zu bestätigen. Ab sofort können Sie Tabellendaten auf Basis der eben erstellten Liste sortieren, so dass Sie Ihre Verkaufszahlen zum Beispiel in Abhängigkeit von der Konfektionsgröße analysieren können. Das erreichen Sie mit folgenden Schritten: 1. Aktivieren Sie das Tabellenblatt mit dem Bereich, den Sie sortieren wollen. 2. Markieren Sie die zu sortierenden Zellen. Excel erkennt automatisch, ob über den Spalten eine Zeile mit Überschriften steht oder nicht. 3. Wählen Sie das Menü Daten-Sortieren an und bestimmen Sie die Spalte mit den Konfektionsgrößen (oder mit den Angaben aus einer anderen benutzerdefinierten Liste) als erstes Sortierkriterium. 4. Klicken Sie auf die Schaltfläche Optionen. Per Dropdown-Feld haben Sie jetzt die Möglichkeit, die Benutzerdefinierte Sortierreihenfolge auf die oben angelegte benutzerdefinierte Liste einzustellen. Im Beispielfall müssten Sie also den Eintrag "S, M, L, XL, XXL" auswählen. Anschließend klicken Sie auf Ok. 5. Wenn Sie auch den Sortierdialog mit Ok bestätigen, erhalten Sie genau die Sortierung, die Sie sich vorgestellt haben. Beliebiges Excel-Tabellenblatt für Seriendruck in Word Versionen: Excel 97 und 2000 FRAGE: Ich möchte aus einer Excel-Tabelle Adressinformationen an einen Word-Serienbrief übergeben. Wenn ich in Word den Seriendruck-Manager aufrufe und die Excel-Datei als Datenquelle einbinde, kann ich aber nur auf das erste Tabellenblatt der Arbeitsmappe zugreifen. Es gelingt mir nicht, die Daten aus dem zweiten, dritten usw. Tabellenblatt in die Seriendruckfelder einfließen zu lassen. Was muss ich tun, damit die Datenübergabe in dieser Form funktioniert? B. Hinnen ANTWORT: Zwei Bedingungen müssen erfüllt sein, damit Sie in Word-Seriendokumenten mit anderen als den ersten Tabellenblättern einer Excel-Arbeitsmappe arbeiten können; · Sie müssen in der Excel-Datei allen Bereichen mit Adressinformationen Namen zuweisen · Sie müssen die Excel-Daten per ODBC an Word übergeben Als erstes müssen Sie deshalb die Excel-Datei mit den Informationen für den Serienbrief öffnen. Darin markieren Sie den ersten Bereich mit Adressinformationen inklusive der zugehörigen Spaltenüberschriften. Wählen Sie dann Einfügen-Namen-Festlegen (Excel 97) bzw. EinfügenName-Definieren (Excel 2000) an, um dem Bereich per Dialogfeld einen aussagekräftigen Namen zuzuweisen. Anschließend wiederholen Sie die Namensvergabe in den anderen Tabellenblättern mit Adressinformationen. Vergessen Sie am Ende nicht, die Änderungen zu speichern. Den Word-Serienbrief richten Sie nun wie folgt ein: Home Home 1. Starten Sie Word mit einem neuen, leeren Dokument. 2. Rufen Sie das Menü Extras-Seriendruck auf, um den Seriendruck-Manager zu öffnen. 3. Klicken Sie auf die Schaltfläche Erstellen und wählen Sie die gewünschte Option an – beispielsweise Serienbriefe. Da Sie mit einem leeren Dokument begonnen haben, können Sie auf Aktives Fenster anklicken. 4. Bestimmen Sie die Datenquelle, indem Sie auf Daten importieren und anschließend auf Datenquelle öffnen klicken. 5. Geben Sie als Dateityp "MS Excel-Arbeitsblätter" an und suchen Sie die gewünschte Datei mit den Adressdaten auf Ihrer Festplatte oder im Netzwerk. 6. Bestätigen Sie die Dateiauswahl aber nicht sofort mit Öffnen, sondern aktivieren Sie vorher das Kontrollfeld Importweise auswählen (97) bzw. Import wählen (2000). 7. Wenn Sie jetzt die Datenquellendatei öffnen, erscheint ein Dialogfeld mit verschiedenen Importoptionen. Markieren Sie den Eintrag "Excel-Dateien über ODBC" und bestätigen Sie die Auswahl mit Ok. 8. Ein weiteres Dialogfeld präsentiert Ihnen nun die in der Arbeitsmappe definierten Namen. Es werden alle Namen aufgeführt, egal in welchem Tabellenblatt sie sich befinden. Wählen Sie den gewünschten Bereichsnamen aus und fahren Sie mit Ok fort. 9. Wie gewohnt können Sie nun nach einem Klick auf Hauptdokument bearbeiten die Seriendruckfelder sowie den Text des Serienbriefs einfügen. An den Platzhalterpositionen werden genau die Adressdaten erscheinen, die Sie gerade benötigen. Benutzernamen auslesen (API) Versionen: Excel 97, 2000 und 2002 FRAGE: Gibt es in Excel eine Möglichkeit, den Namen des derzeit angemeldeten Benutzers auszulesen, um ihn beim Drucken eines Tabellenblatts in die Kopfzeile einzutragen? S. Herzig ANTWORT: Sie lösen die Aufgabe mit einem VBA-Makro und einer Windows-API-Funktion. Dieser Weg ist zuverlässiger als der Einsatz von "Application.UserName", womit Sie nur den Namen ermitteln, der in den Excel-Optionen auf der Registerkarte Allgemein eingetragen ist. Dieser Name hat aber nicht unbedingt etwas mit dem aktuell angemeldeten Benutzer zu tun. Um eine Excel-Arbeitsmappe entsprechend vorzubereiten, gehen Sie wie folgt vor: · Wechseln Sie aus der Mappe, in der Sie die Kopfzeile mit Benutzer- und Computernamen einrichten wollen, per Alt+F11 in den Visual Basic-Editor. · Legen Sie mit dem Befehl EINFÜGEN-MODUL ein neues Modul an. · Geben Sie in das zugehörige Codefenster folgende VBA-Anweisungen ein: Private Declare Function GetUserName Lib "advapi32.dll" _ Alias "GetUserNameA" (ByVal lpBuffer As String, _ nSize As Long) As Long Public Function UserName() As String Dim Buffer As String * 100 Dim BuffLen As Long BuffLen = 100 Home Home GetUserName Buffer, BuffLen UserName = Left(Buffer, BuffLen - 1) End Function · Nun müssen Sie die Namen beim Drucken nur noch in der Kopfzeile ausgeben lassen. Dazu lassen Sie sich im Projekt-Explorer des Visual Basic-Editors die untergeordneten Zweige des VBA-Projekts zur aktuellen Datei anzeigen. Doppelklicken Sie danach auf das Objekt "DieseArbeitsmappe". · Damit öffnen Sie ein weiteres Codefenster, in dem Sie folgende Prozedur eingeben: Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim Blatt As Object For Each Blatt In ThisWorkbook.Sheets Blatt.PageSetup.LeftHeader = UserName Next Blatt End Sub "Workbook_BeforePrint" gehört zu den Standard-Ereignisprozeduren, die Sie auch über die beiden Dropdown-Felder am oberen Rand des Codefensters anlegen können. - In diesem Fall sorgt die Prozedur dafür, dass Excel bei einem Druckvorgang den "UserNamen" in den linken Kopfzeilenbereich einfügt. Die Informationen erhält die Druckprozedur durch die in Schritt 3 angelegten benutzerdefinierten Funktionen. Bereich per VBA kopieren Versionen: Excel 97, 2000 und 2002 FRAGE: Ich habe den Makro-Rekorder von Excel unter anderem eingesetzt, um einen Bereich automatisch kopieren zu lassen. Für einen einzigen Kopiervorgang werden dabei vier Befehle benötigt. Geht das nicht kürzer und einfacher? A. Müller Ein Makro wählt also zunächst den Quellbereich aus, kopiert ihn, wählt dann den Zielbereich und fügt ihn ein. Schneller und einfacher ist der folgende Befehl: Range("A1").Copy Range("F30") Diese Zeile führt exakt zu demselben Ergebnis wie die von dem Makro-Rekorder aufgezeichneten Befehle. Blattregister nach Farbe sortieren Versionen: Excel 97, 2000 und 2002 FRAGE: Seitdem wir ein Update auf Excel 2002 durchgeführt haben, nutzen wir unter anderem die neue Funktion, Register einer Arbeitsmappe farbig zu kennzeichnen. Obwohl unterschiedliche Farben eine überaus nützliche Orientierungshilfe sind, ließe sich die Arbeit noch weiter vereinfachen, wenn Excel die Blattregister automatisch nach Farbtönen sortieren würde. Gibt es dafür eine Lösung? Home Home M. Kunze ANTWORT: In der Tat ist es praktisch, Blattregistern Farben zuzuweisen, indem Sie sie mit der rechten Maustaste anklicken und anschließend den Kontextmenübefehl Registerfarbe anwählen. Es ist allerdings nicht möglich, diese Befehlsauswahl zu überwachen, um in Abhängigkeit davon eine farbliche Sortierung vorzunehmen. Anbieten können wir Ihnen aber eine halbautomatische Lösung, bei der Sie die Sortierung von einem VBA-Makro durchführen lassen. Das Makro müssen Sie dann jedes Mal per Hand aufrufen. Hier die Schritte zur fertigen Lösung: · · · · Öffnen Sie die Arbeitsmappe mit den farbigen Blattregistern. Drücken Sie Alt + F11, um den Visual Basic-Editor zu starten. Legen Sie ein neues Codefenster an, indem Sie Einfügen-Modul anwählen. Geben Sie folgende Sortierprozedur ein: Sub Farbsortierung() Dim i As Long, j As Long For i = 1 To Worksheets.Count - 1 For j = i To Worksheets.Count If Worksheets(j).Tab.ColorIndex = _ Worksheets(i).Tab.ColorIndex Then Worksheets(j).Move After:=Worksheets(i) End If Next j Next i End Sub · Verlassen Sie den Visual Basic-Editor über das Menü Datei und den Befehl Schließen und zurück zu Microsoft Excel. · Rufen Sie in Excel Extras-Makro-Makros auf. · Markieren Sie den Makronamen "Farbsortierung" und starten Sie das Makro mit der Schaltfläche Ausführen. Daraufhin sortiert Excel die Register nach Farben. Register mit dem gleichen Farbton werden aber nicht weiter sortiert. Daten komfortabel übertragen Versionen: Excel 97, 2000 und 2002 Eine sehr oft an mich gestellt Frage dreht sich um den Inhalt, wie man Daten aus einer Tabelle möglichst schnell und elegant auf eine andere Tabelle übertragen kann. Somit haben Sie die Möglichkeit eine Sicherung auf einer anderen Tabelle anzulegen, um beispielsweise vor größeren Änderungen notfalls noch auf die Kopie zugreifen zu können. Diese Aufgabe lösen Sie, indem Sie folgendes Makro einsetzen: Sub WerteÜbertragen() Home Home Dim Blatt1 As Worksheet Dim Blatt2 As Worksheet Dim i As Integer Dim e As Integer Set Blatt1 = Sheets("Tabelle1") Set Blatt2 = Sheets("Tabelle2") Blatt1.Select For i = 1 To ActiveSheet.UsedRange.Rows.Count For e = 1 To ActiveSheet.UsedRange.Columns.Count Blatt2.Cells(i, e) = Blatt1.Cells(i, e) Next e Next i End Sub Im ersten Schritt definieren Sie die benötigten Variablen. Danach weisen Sie mit der Anweisung Set jeweils das Quell- sowie das Zieltabellenblatt zu. Diese Vorgehensweise ermöglicht Ihnen später, daß Sie bei der Datenübertragung nicht von einem Tabellenblatt auf das andere und zurück springen müssen. In der ersten Schleife ermitteln Sie die Anzahl der gefüllten Zeilen des Quelltabellenblatts. In der zweiten Schleife ermitteln Sie die Anzahl der gefüllten Spalten des Quelltabellenblattes. Innerhalb der zweiten Schleife übertragen Sie nun die einzelnen Zellen. Diesen Vorgang können Sie aber auch automatisieren. So könnten Sie beispielsweise dafür sorgen, daß vor dem Speichern einer Arbeitsmappe dieses Makro automatisch abläuft. Um diese Aufgabe umzusetzen, gehen Sie wie folgt vor: · · · Wechseln Sie mit der Tastenkombination Alt+F11 in die Entwicklungsumgebung von Excel. Im Projekt-Explorer klicken Sie den Eintrag "DieseArbeitsmappe" doppelt an. Erfassen Sie danach folgendes Ereignismakro: Private Sub Workbook_BeforeSave(ByVal SaveAsUI _ As Boolean, Cancel As Boolean) WerteÜbertragen End Sub Das Makro "WerteÜbertragen" wird automatisch immer dann ausgeführt, wenn Sie die Arbeitsmappe speichern. Datumsformel oder Wert Wir nutzen in unserem Rechnungsformular die folgende Formel, um das aktuelle Datum automatisch vorzugeben: =HEUTE() Das funktioniert grundsätzlich, aber wenn man die Datei später noch einmal öffnet, findet sich in dieser Zelle wiederum das aktuelle Datum und nicht das tatsächliche Rechnungsdatum. Wie kann man dieses Home Home Problem beheben, ohne das Datum manuell eingeben zu müssen? ANTWORT: Das beschriebene Verhalten von Excel zeigt, daß Sie die Funktion HEUTE nicht zum automatischen Einfügen eines Rechnungsdatums verwenden können, denn sie liefert grundsätzlich immer das aktuelle Systemdatum. Sie könnten der Problematik durch ein Makro aus dem Weg gehen, das das Datum für Sie eingibt, aber ein anderer wenig bekannte Trick ist folgender: Klicken Sie in die Zelle, in der das aktuelle Datum festgeschrieben werden soll und betätigen Sie die Tastenkombination STRG+. (Punkt). Excel fügt daraufhin das aktuelle Datum ohne Formel in die aktuelle Zelle ein, Sie müssen nur noch mit Return bestätigen. Dezimalzahl als Bruch anzeigen Versionen: Excel 97, 2000 und 2002/XP FRAGE: Gibt es in Excel eine Möglichkeit, Zahlen mit Nachkommastellen als Bruch anzuzeigen? Aus 1,25 sollte beispielsweise 5/4 werden oder aus 2,4 die Bruchzahl 12/5. K. Merschmann ANTWORT: Für solche Zwecke bietet Excel sogar ein eingebautes Zahlenformat, das Sie bequem mit dem Befehl Format-Zellen und den Einstellungen auf der Registerkarte Zahlen zuweisen können. Markieren Sie in der Liste der Kategorien den Eintrag "Bruch" und wählen Sie anschließend in der Typ-Liste die gewünschte Genauigkeit aus – beispielsweise "Zweistellig". Excel stellt einen Wert wie 1,25 daraufhin als 1 1/4 oder einen Wert wie 1,45 als 1 9/20 dar. Beachten Sie die Rundungsunterschiede zwischen den Genauigkeiten. Wenn Sie 1,45 als "einstelligen" Bruch anzeigen lassen, erscheint der Wert 1 4/9 in der Tabelle. Falls Sie den ganzzahligen Anteil ebenfalls in den Bruch einschließen möchten, damit statt 1 1/4 nur der Bruch 5/4 auftaucht, müssen Sie das Zahlenformat manuell anpassen. Rufen Sie dazu erneut Format-Zellen mit der Registerkarte Zahlen auf. Markieren Sie in der Kategorienliste jetzt aber den Eintrag "Benutzerdefiniert". In der rechten Dialogfeldhälfte geben Sie dann die Formatdefinition "?/?" für einstellige Genauigkeit oder "??/??" für zweistellige Genauigkeit oder eine andere Rundungspräzision ein. Auf diese Weise stellt Excel keine ganzen Zahlen sondern nur noch reine Brüche dar. Wenn Sie vorher schon ein Standardformat für Brüche aktiviert hatten, werden Sie bemerkt haben, dass der ganzzahlige Anteil ansonsten durch ein #-Symbol repräsentiert wird. Die Formatdefinition des einstelligen Standard-Bruchformats ist zum Beispiel "# ?/?". Dezimalzahlen am Komma ausrichten Versionen: Excel 97, 2000 und 2002 FRAGE: Wie kann ich eine Spalte mit Dezimalzahlen so formatieren, dass die Werte alle am Komma ausgerichtet sind? Das Problem dabei ist, dass die Anzahl der Dezimalstellen in der Spalte variiert. Dabei sollen die Werte aber nicht auf eine feste Anzahl von Nachkommastellen festgeschrieben sein. Und es sollen auch keine Nullen aufgefüllt werden, wenn die eine Zahl beispielsweise nur 2 Stellen hat, während Home Home eine andere 5 signifikante Nachkommastellen aufweist. Dass man diesen Effekt mit den Symbolleistenschaltflächen Dezimalstelle hinzufügen bzw. Dezimalstelle löschen erzielen kann, ist mir bekannt. Mein Ziel ist es, Werte wie "1,5", "2,123456" und "3,039" in genau dieser Schreibweise am Dezimalkomma auszurichten. M. Hornbach ANTWORT: Für die gewünschte Ausrichtung müssen Sie ein benutzerdefiniertes Zahlenformat einrichten. Dazu markieren Sie die Spalte mit den Dezimalzahlen und wählen Format-Zellen an. Auf der Registerkarte Zahlen markieren Sie die Kategorie "Benutzerdefiniert". Nun geben Sie im Feld unter Typ folgendes Format ein: 0,0????????? Nach einem Klick auf Ok ist Ihre Tabellenspalte genau so formatiert, wie Sie es sich vorgestellt haben. Zur Erläuterung: Der Platzhalter "?" steht für eine beliebige Ziffer. Falls es sich dabei um eine nicht signifikante Null handelt, unterdrückt Excel die Anzeige, lässt aber entsprechenden Platz für die Stelle. So schaffen Sie im oben aufgeführten Beispiel hinter dem Komma Platz für 10 Nachkommastellen. Diese werden aber nur angezeigt, wenn sie tatsächlich benötigt werden. Ansonsten füllt Excel die Stellen mit Leerzeichen auf, sodass die Dezimalkommata in der gesamten Spalte untereinander stehen. Der Platzhalter "0" sorgt dafür, dass direkt vor und hinter dem Komma auf jeden Fall eine Ziffer steht, auch wenn es sich um eine Null handelt. So erscheint etwa der Wert "3" als "3,0" und "0,123456" wird mit der führenden Null angezeigt. Natürlich können Sie das Format beliebig an Ihre Bedürfnisse anpassen. Wenn Sie eine höhere Genauigkeit benötigen, fügen Sie zum Beispiel hinter dem Komma weitere "?" hinzu. Oder definieren Sie das Format so, dass vor dem Komma im Bedarfsfall ein Tausenderpunkt erscheint: #.##0,0????????? Der Platzhalter "#" hat übrigens einige Ähnlichkeit mit dem "?". Falls die Stelle nicht signifikant ist, fügt Excel aber keine Leerstelle ein. Diagrammachsen in korrekten Proportionen skalieren Versionen: Excel 97, 2000 und 2002/XP FRAGE: Ich benötige Diagramme, deren Achsen genau gleich skaliert sind. Wenn ich meine Tabellenwerte jedoch mit dem Diagramm-Assistenten grafisch darstellen lasse, erhalte ich immer verzerrte Abbildungen, weil die Skalierung der x-Achse größer dimensioniert ist als die Skalierung der yAchse - oder umgekehrt. Das ist offenbar abhängig vom Maximalwert der Achsen. Leider führt das manuelle Anpassen der Achsenskalierung nicht zum gewünschten Erfolg, da Excel die Breite des Diagramms beibehält. Mit viel Geduld könnte ich die Breite des Diagramm-Objekts mit der Maus passend einrichten. Aber das kann doch wohl nicht die optimale Lösung sein, um Diagramme mit korrekt proportionierten Achsenskalierungen zu erhalten. Wissen Sie eine Lösung? R. Schöttler Home Home ANTWORT: Sie haben Recht; der Diagramm-Assistent bevorzugt Darstellungen, die "in die Breite gehen". Selbst wenn die Maximalwerte beider Achsen identisch sind, erhalten Sie normalerweise ein Diagramm, dessen Breite größer ist als die Höhe. Das bedeutet dann auch, dass ein Wert von "1" auf der x-Achse optisch größer ist als ein Wert von "1" auf der y-Achse. Wenn Sie Skalierungen benötigen, die auf beiden Achsen gleich groß sind, kommen Sie mit einem VBA-Makro am schnellsten ans Ziel. Betrachten Sie dazu das folgende Beispiel. Angenommen, Sie hätten folgende Werte in "Tabelle1" einer Arbeitsmappe eingegeben: |AB --------1|xy 2|11 3|16 4|66 5|61 6|11 Wenn Sie diese Werte in einem Punktdiagramm abtragen und die Punkte mit Linien verbinden, sollte sich bei gleicher Achsenskalierung ein Quadrat ergeben. Aber schauen Sie, was Excel macht. Dazu markieren Sie den Bereich A1:B6 und rufen über die Standard-Symbolleiste den Diagramm-Assistenten auf. Im ersten Dialogfeld des Assistenten aktivieren Sie den Diagrammtyp "Punkt (XY)" und zusätzlich den Untertyp "Punkte mit Linien". Auf allen weiteren Seiten übernehmen Sie die Standardeinstellungen. Am Ende lassen Sie das Diagramm als Objekt in das aktuelle Tabellenblatt einfügen. Obwohl die Maximalwerte der Datenreihen identisch sind, verwendet Excel für x- und y-Achse unterschiedliche Skalierungen, sodass das Diagramm weit davon entfernt ist, ein Quadrat anzuzeigen. Abhilfe schafft nur ein Makro: 1. Wechseln Sie aus der aktuellen Arbeitsmappe mit Alt + F11 in den Visual Basic-Editor. 2. Rufen Sie Einfügen-Modul auf, um ein neues Codefenster zu öffnen. 3. Darin geben Sie folgende VBA-Prozedur ein: Sub DiagrammSkalieren() Dim objBlatt As Worksheet Dim objDiagramm As ChartObject Dim lngMaxWert As Long Dim lngMinWert As Long Set objBlatt = ActiveSheet Set objDiagramm = objBlatt.ChartObjects(1) lngMaxWert = 7 lngMinWert = 0 With objDiagramm.Chart .Axes(1).MaximumScale = lngMaxWert Home Home .Axes(1).MinimumScale = lngMinWert .Axes(2).MaximumScale = lngMaxWert .Axes(2).MinimumScale = lngMinWert .PlotArea.Height = .ChartArea.Height .PlotArea.Width = .PlotArea.Height End With End Sub · Verlassen Sie den Visual Basic-Editor, indem Sie Datei-Schließen und zurück zu Microsoft Excel anwählen. · Starten Sie das VBA-Makro über den Befehl Extras-Makro-Makros und einen anschließenden Doppelklick auf den Makronamen "DiagrammSkalieren". Der Programmcode stellt die Maximal- und Minimalwerte beider Achsen auf die vorgegebenen Werte "7" respektive "0" ein. Außerdem passt er die Höhe der Zeichnungsfläche an die Höhe der Diagrammfläche an und danach setzt er die Breite der Zeichnungsfläche auf denselben Wert wie die Höhe. Wenn Sie das Makro für Ihre Zwecke nutzen wollen, müssen Sie lediglich die Variablenzuweisungen am Anfang des Prozedurcodes an Ihre Umgebung anpassen. Ein Problem bleibt aber auch mit dieser VBA-Lösung bestehen: die Diskrepanz zwischen Bildschirmdarstellung und Druckausgabe. Selbst wenn das Diagramm nach Ausführung des Makros auf dem Bildschirm ein Quadrat anzeigt, kann es sein, dass auf dem Papier ein Rechteck herauskommt. Sie müssen sich dann entscheiden, welche Darstellung wichtiger für Sie ist. Wenn Sie mehr Wert auf exakte Druckresultate legen, müssen Sie das oben aufgeführte Makro leicht modifizieren: Erstellen Sie zunächst einen Probeausdruck mit dem alten Programmcode. Dann messen Sie die Achsenlängen mit einem Lineal und errechnen das Verhältnis von x-Achse (Breite) zu y-Achse (Höhe) beispielsweise "5,8 cm" zu "4,9 cm" = ca. "1,2". Dieses Seitenverhältnis verwenden Sie im Makrocode, um die Breite der Zeichnungsfläche an die Druckproportionen anzupassen. Dazu ändern Sie die letzte Codezeile in .PlotArea.Width = .PlotArea.Height / <Seitenverhältnis> Bei dem genannten Seitenverhältnis von "1,2" lautet die Zeile also .PlotArea.Width = .PlotArea.Height / 1.2 Beachten Sie die Schreibweise mit Dezimalpunkt statt -komma! Auf diese Weise erhalten Sie exakte Achsenproportionen auf dem Papier. Auf dem Bildschirm erscheint das Diagramm aber womöglich leicht verzerrt. Home Home Diagramme voll automatisch aktualisieren Versionen: Excel 97, 2000 und 2002/XP FRAGE: Ich möchte tagesaktuell ein Diagramm mit dem Kursverlauf eines Wertpapiers anlegen, und zwar immer nur über die letzten 30 Tage. Die entsprechenden Datumsangaben und Börsennotierungen erfasse ich fortlaufend in zwei Tabellenspalten. Ich habe es bislang nicht geschafft, das Diagramm dynamisch auf Basis der letzten 30 Tabellenzeilen zu erstellen. So muss ich es jeden Tag neu anlegen und immer wieder die festen Zelladressen für den 30-Tage-Zeitraum eingeben. Ist es nicht möglich, die Zellen mit den Diagrammdaten automatisch zu ermitteln - beispielsweise mithilfe eines dynamischen Bereichsnamens? G. Alles ANTWORT: Das ist tatsächlich möglich, wenn Sie Bereichsnamen als Formeln definieren und wenn Sie die DATENREIHE-Funktion des Diagramms entsprechend anpassen. Auf diese Weise erhalten Sie ein Diagramm, das sich bei jeder neuen Kurseingabe selbstständig aktualisiert und immer automatisch die letzten 30 Notierungen anzeigt. Im Anschluss erfahren Sie Schritt für Schritt, wie Sie vorgehen. Ausgangspunkt ist eine ExcelArbeitsmappe mit Standard-Tabellenblättern. "Tabelle1" enthält die Datumsangaben und Kurswerte, wobei Zelle A1 die Überschrift "Datum" und Zelle B1 die Überschrift "Werte" enthält. Die eigentlichen Daten folgen ab Zeile 2. · Beginnen Sie nun zuerst mit einem herkömmlichen Diagramm. Dazu markieren Sie die vorhandenen Daten in "Tabelle1" inklusive Zeile 1 mit den beiden Überschriften. · Rufen Sie per Symbolleisten-Schaltfläche den Diagramm-Assistenten auf. Richten Sie das Diagramm so ein, wie Sie es sich vorstellen, wobei für dieses Beispiel ein einfaches Liniendiagramm mit den Standardeinstellungen genügt. Es spielt keine Rolle, ob Sie das Diagramm in einem neuen Blatt oder als Objekt in der aktuellen Tabelle anlegen. · Aktivieren Sie anschließend eine beliebige Zelle in der Tabelle mit den Zahlenwerten und wählen Sie im Menü Einfügen erst Name(n) und dann Festlegen (Excel 97) bzw. Definieren (Excel 2000/2002) an. Wichtig ist nun, dass Sie für jede Wertereihe einen eigenen Namen festlegen. Das bedeutet in diesem Fall, dass Sie einen Namen für die Datumsangaben (in Spalte A) und einen für die Börsenwerte (in Spalte B) benötigen. Außerdem müssen Sie dem eigentlichen Bereichsnamen den aktuellen Blattnamen (hier: "Tabelle1") voranstellen. Um der Datumsspalte einen Namen zuzuweisen, geben Sie deshalb im Feld Namen in der Arbeitsmappe die Bezeichnung "Tabelle1!Datumswerte" ein. · Damit dieser Bereichsname dynamisch zugewiesen wird, tragen Sie im Feld Bezieht sich auf keine Zelladresse sondern eine Formel ein. Für die Datumswerte, die sich hier in Spalte A von "Tabelle1" befinden, lautet sie: =WENN(ANZAHL2(Tabelle1!$A:$A)>30; BEREICH.VERSCHIEBEN(Tabelle1!$A$1; ANZAHL2(Tabelle1!$A:$A)-30;0;30;1); BEREICH.VERSCHIEBEN(Tabelle1!$A$1;1;0; ANZAHL2(Tabelle1!$A:$A)-1;1)) Beachten Sie, dass mit dieser Formel immer die letzten 30 Einträge in der Spalte zurückgegeben werden. Ersetzen Sie die Zahl "30" gegebenenfalls durch den für Sie zutreffenden Wert. Home Home Außerdem berücksichtigt die Formel den Fall, dass die Tabelle momentan weniger als 30 Einträge enthält, weshalb am Anfang eine WENN-Abfrage steht. Im Übrigen basiert die Formel auf einer BEREICH.VERSCHIEBEN-Funktion, die ausgehend von Zelle $A$1 einen versetzten Bereich zurückgibt, dessen Größe sich an den insgesamt in Spalte A eingegebenen Daten orientiert. Wenn genügend Werte vorhanden sind, handelt es sich dabei immer um die letzten 30 Zellen. · · Bestätigen Sie Namensvergabe und Formelzuweisung mit Ok. Wiederholen Sie die Schritte 3 bis 5 für die Spalte mit den Kurswerten. Weisen Sie als Namen in der Arbeitsmappe die Bezeichnung "Tabelle1!Kurswerte" zu und geben Sie im Feld Bezieht sich auf folgende Formel ein: =WENN(ANZAHL2(Tabelle1!$A:$A)>30; BEREICH.VERSCHIEBEN(Tabelle1!$A$1; ANZAHL2(Tabelle1!$A:$A)-30;1;30;1); BEREICH.VERSCHIEBEN(Tabelle1!$A$1;1;1; ANZAHL2(Tabelle1!$A:$A)-1;1)) Die Formel unterscheidet sich kaum von der ersten. Lediglich das dritte Argument der Funktion BEREICH.VERSCHIEBEN ist hier nicht "0" sondern "1". Das bedeutet, dass der Bereich um eine Spalte nach rechts versetzt wird. Der ansonsten identische Formelaufbau sorgt dafür, dass die Datums- und Kursbereiche immer gleich groß sind. · Aktivieren Sie nun das Diagramm und markieren Sie die Diagrammdaten, indem Sie zum Beispiel in einem Liniendiagramm direkt auf die Linie klicken. Excel hebt die einzelnen Datenpunkte hervor und zeigt in der Bearbeitungszeile eine DATENREIHE-Funktion an. Das könnte im Beispiel ungefähr so aussehen: =DATENREIHE(Tabelle1!$B$1;Tabelle1!$A$2:$A$17;Tabelle1!$B$2:$B$17;1) · Damit das Diagramm seine Werte aus den dynamisch angepassten Tabellenbereichen bezieht, müssen Sie jetzt nur noch die Argumente 2 und 3 der DATENREIHE-Funktion ändern. Ersetzen Sie das zweite Argument durch den Bereichsnamen für die Datumswerte und das dritte Argument durch den Namen für die Kurswerte. Die fertige Formel lautet: =DATENREIHE(Tabelle1!$B$1;Tabelle1!Datumswerte;Tabelle1!Kurswerte;1) Ab sofort können Sie Ihre Tabelle beliebig erweitern. Im Diagramm sehen Sie immer den Kursverlauf über die letzten 30 Tage, - es sei denn, es sind noch nicht genügend Werte vorhanden Die drei höchsten Werte summieren Versionen: Excel 97, 2000 und 2002 FRAGE: Ich möchte gerne die drei größten Werte aus einem Bereich von 100 Zellen summieren. Das Problem dabei ist, dass die Werte nicht sortiert sind, so dass der Einsatz einer einfachen Summenformel ausscheidet. Haben Sie einen Lösungsvorschlag? V. Schröter Home Home ANTWORT: Die Spitzenwerte eines Tabellenbereichs können Sie mit der Funktion KGRÖSSTE ermitteln. Die Funktion erwartet als ersten Parameter die Adresse des zu durchsuchenden Bereichs und als zweiten Parameter eine Zahl, die angibt, der welchen Wert Sie genau suchen. Wenn sich Ihre Werte zum Beispiel im Bereich A1:A100 befinden, liefert folgende Formel den höchsten Wert: =KGRÖSSTE(A1:A100;1) Die Summe aus dem "höchsten", dem "zweithöchsten" und dem "dritthöchsten Wert erhalten Sie mit folgender Formel: =KGRÖSSTE(A1:A100;1)+KGRÖSSTE(A1:A100;2)+ KGRÖSSTE(A1:A100;3) Verkürzen lässt sich der Ausdruck mit einer Arrayformel: =SUMME(KGRÖSSTE(A1:A100;{1;2;3})) Zur Eingabe einer Arrayformel schließen Sie den Ausdruck mit Strg+Umschalt+Return ab, so dass Excel die Formel automatisch mit geschweiften Klammern umgibt. Die geschweiften Klammern im zweiten Parameter der KGRÖSSTE-Funktion müssen Sie allerdings selbst eingeben. Da es sich um eine Arrayformel handelt, berechnet Excel das Ergebnis der KGRÖSSTE-Funktion für alle Parameterwerte, die Sie durch das in geschweifte Klammern gesetzte Datenfeld definieren - hier also für die drei höchsten Werte. Mit der Summenfunktion werden die Ergebnisse addiert. Obwohl diese Schreibweise kompakter ist als die zuvor genannte mit dem +-Operator, wird die Eingabe immer mühseliger, je mehr Spitzenwerte summiert werden sollen. Wenn Sie etwa die fünf höchsten Werte des Bereichs addieren wollen, müssten Sie schon "{1;2;3;4;5}" als Parameterarray eingeben. Übersichtlicher und flexibler ist folgende Formel (hier für fünf Spitzenwerte): =SUMME(KGRÖSSTE(A1:A100;ZEILE(INDIREKT("1:5")))) Auch diese Formel müssen Sie per Strg+Umschalt+Return als Arrayformel eingeben. Wenn Sie jetzt aber eine andere Summe - beispielsweise aus den zehn höchsten Werten - benötigen, müssen Sie nur noch den zweiten Wert der INDIREKT-Funktion anpassen, indem Sie statt "5" den Wert "10" eintragen. Doppelte Einträge in einer Spalte verhindern Versionen: Excel 97, 2000 und 2002 Für viele Anwendungen müssen Sie sicherstellen, dass keine doppelten Werte in eine Spalte eingetragen werden. Das gilt zum Beispiel für Rechnungs-, Kunden- oder Artikelnummern, die in jedem Fall immer eindeutig vergeben werden müssen. Mit wenig Aufwand können Sie dafür sorgen, dass Excel diese Prüfung für Sie übernimmt und doppelte Eingaben automatisch verhindert. Dazu möchten wir Ihnen im Home Home folgenden zwei Varianten vorstellen. Bei der ersten Lösung gehen wir davon aus, dass Sie die Zahlen in einer Spalte untereinander eingeben und neue Zahlen immer am Ende anfügen: · Markieren Sie die komplette Spalte, in der die Eingabe von doppelten Zahlen verhindert werden soll (zum Beispiel Spalte B). · Wählen Sie das Menü Daten-Gültigkeit an. · Markieren Sie in der Liste Zulassen den Eintrag "Benutzerdefiniert" und geben Sie dann den folgenden Ausdruck in das Feld Formel ein (ersetzen Sie dabei "B" durch den Buchstaben der Spalte, die Sie in Ihrer Tabelle markiert haben): =VERGLEICH(B1;$B:$B;0)=ZEILE(B1) · Wechseln Sie auf das Register "Fehlermeldung" und legen Sie Inhalt und Aussehen der Dialogbox fest, die den Anwender auf die Eingabe eines doppelten Wertes aufmerksam machen soll. · Bestätigen Sie Ihre Einstellungen mit Ok. Ab sofort ist die Eingabe von doppelten Werten in der markierten Spalte nicht mehr möglich. Der eigentliche Trick bei dieser Technik ist die Formel, die Sie als Gültigkeitskriterium eingeben. Dazu muss man folgendes wissen: · Excel zeigt verhindert immer dann die Eingabe eines Wertes, wenn der von Ihnen eingegebene Ausdruck das Ergebnis FALSCH liefert. · Ein relativer Bezug in der Gültigkeitsformel wird immer automatisch auf jede Zelle des markierten Bereiches angepasst. In der Zelle B10 wendet Excel also beispielsweise folgende Gültigkeitsformel an: =VERGLEICH(B10;$B:$B;0)=ZEILE(B10) In der Formel passiert nun folgendes: Der Inhalt der aktuellen ZELLE wird mit Hilfe der Funktion VERGLEICH mit dem übrigen Inhalt der Spalte verglichen. Als Ergebnis erhalten Sie die Nummer der Zeile in Spalte B, in der die Funktion fündig wurde. Handelt es sich nicht um eine doppelte Eingabe, entspricht diese Zeilennummer der Zeile, in die Sie etwas eingegeben haben. In diesem Fall ist das Funktionsergebnis WAHR und Excel lässt die Eingabe zu. Ist der eingegebene Wert bereits vorhanden, liefert VERGLEICH eine andere Zeilennummer, so dass das Ergebnis FALSCH ist und die Eingabe verhindert wird. Daraus ergibt sich, dass diese Formel nur in den Fällen funktioniert, in denen Sie die Zahlen untereinander eingeben, denn Excel kann nur die Werte über der aktuellen Zelle zuverlässig prüfen. Wenn Sie Zahlen an beliebigen Positionen in der Spalte eingeben oder nachträglich ändern möchten, ändern Sie die Technik leicht ab und verwenden die folgende Gültigkeitsformel (hier ist "D" durch den Buchstaben der von Ihnen verwendeten Spalte zu ersetzen): =ZÄHLENWENN($D:$D;D1)<2 Über die Funktion ZÄHLENWENN können Sie ermitteln, wie oft der Inhalt einer Zelle in der kompletten Spalte vorkommt. Nur wenn das Ergebnis "<2" ist, liegt keine Doppeleingabe vor und Excel nimmt den Wert an. Home Home Dropdown-Felder in Zellen miteinander verknüpfen Versionen: Excel 97, 2000 und 2002 FRAGE: Ich habe mit dem Befehl Daten-Gültigkeit eine Dropdown-Liste angelegt, damit Benutzer der Tabelle problemlos die zulässigen Werte auswählen können. Jetzt möchte ich eine zweite Dropdown-Liste einrichten, deren Inhalte von der Auswahl in der ersten Zelle abhängig sein sollen. Wie schaffe ich es, dass die Dropdown-Liste nicht nur statische Einträge enthält, sondern dynamisch mit dem anderen Dropdown-Feld verknüpft ist? W. Holzbrink ANTWORT: Da die von Ihnen beschriebene Funktion vielleicht nicht allen Lesern bekannt ist, zunächst ein kurzer Überblick: Mit dem Befehl Daten-Gültigkeit können Sie nicht nur generell die Benutzereingaben überprüfen und gegebenenfalls eine Fehlermeldung ausgeben lassen. Darüber hinaus können Sie eine Dropdown-Liste in einer Zelle einrichten, ohne dafür irgendwelche Formularfelder oder Steuerelemente einbetten zu müssen. Sobald Sie die Zelle aktivieren, blendet Excel einen Dropdown-Pfeil ein, mit dem Sie den Zellwert bequem aus einer Liste auswählen können. Sie definieren eine solche Dropdown-Liste, indem Sie die Eingabezelle markieren und dann DatenGültigkeit aufrufen. Auf der Registerkarte Einstellungen wählen Sie unter Zulassen den Eintrag "Liste" aus. Nun geben Sie im Feld Quelle entweder eine durch Semikolons getrennte Werteliste (z. B. "Blau;Gelb;Grün") oder die Adresse eines Tabellenbereichs (z. B. "=$A$1:$A$3") ein. Der Tabellenbereich muss die Werte enthalten, die in der Dropdown-Liste erscheinen sollen. Nun zu dem von Ihnen geschilderten Problem mit zwei verknüpften Dropdown-Listen. Die Lösung besteht darin, anstelle von statischen Wertelisten oder Zelladressen mit benannten Bereichen zu arbeiten. Excel wertet Namen wie normale Tabellenbereiche aus, die Sie mit Spaltenbuchstaben und Zeilennummern angeben. Excel geht sogar noch einen Schritt weiter: Als Quelle einer Dropdown-Liste akzeptiert Excel auch eine Formel, die den Namen eines benannten Bereichs zurückgibt. So ist es nur noch ein kleiner Sprung bis zur fertigen Verknüpfung der beiden Dropdown-Listen. Hier die Vorgehensweise im Detail: · · · · Home Geben Sie die Werte ein, die in den Dropdown-Feldern erscheinen sollen. Angenommen etwa, Sie wollten zuerst ein Land auswählen und dann in Abhängigkeit davon eine Stadt aus dem betreffenden Land. Geben Sie dafür zum Beispiel "Deutschland", "Frankreich" und "Italien" in die Zellen A1:A3 eines Tabellenblatts ein. In den Bereich B1:B3 tragen Sie Orte aus Deutschland ein – beispielsweise "Hamburg", "Berlin", "München". Ebenso verfahren Sie mit den französischen und italienischen Städten, die Sie in C1:C3 bzw. D1:D3 eingeben. Suchen Sie sich irgendwelche Beispielorte aus. Weisen Sie den einzelnen Bereichen Namen zu (Befehl Einfügen-Namen-Festlegen (Excel 97) oder Einfügen-Name(n)-Definieren (Excel 2000/2002)). Wie Sie die Liste für das erste DropdownFeld benennen, ist relativ egal; geben Sie dem Bereich A1:A3 zum Beispiel den Namen "Staaten". Wichtig ist die Namensgebung der abhängigen Bereiche! Die Namen müssen exakt mit den vorgesehenen Listeneinträgen übereinstimmen – hier also "Deutschland", "Frankreich" sowie "Italien". Setzen Sie den Cursor in die Zelle, in der die erste Dropdown-Liste zur Länderauswahl erscheinen soll. Hier könnte das beispielsweise Zelle A5 auf demselben Tabellenblatt sein. Wählen Sie Daten-Gültigkeit an und aktivieren Sie auf der Registerkarte Einstellungen im Feld Zulassen den Eintrag "Liste". Home · Geben Sie im Feld Quelle einen Bezug in der folgenden Form ein: =<ErsterBereichsname> · · Im Beispiel müssen Sie also "=Staaten" eingeben. Achten Sie darauf, dass das Kontrollkästchen Zellendropdown aktiviert ist und bestätigen Sie die Einstellungen mit Ok. · Setzen Sie den Cursor in die Zelle, in der das verknüpfte Dropdown-Feld erscheinen soll; hier etwa Zelle B5. · Rufen Sie erneut Daten-Gültigkeit auf und stellen Sie wie in Schritt 4 das Listenformat ein. · Als Quelle tragen Sie jetzt aber keinen Bereichsnamen ein, sondern eine Formel nach folgendem Muster: =INDIREKT(<VerknüpfteZelle>) · Da sich die übergeordnete Dropdown-Liste des Beispiels in Zelle A5 befindet, müssen Sie in diesem Fall die Formel "=INDIREKT(A5)" eingeben. · Quittieren Sie die Änderungen mit Ok. Dass Excel daraufhin eine Fehlermeldung ausgibt, muss Sie nicht stören. Grund dafür ist, dass bislang noch kein Land ausgewählt wurde. Fahren Sie einfach mit Ja fort. Damit haben Sie die Verknüpfung eingerichtet. Probieren Sie es aus, indem Sie ein Land aus der Dropdown-Liste in Zelle A5 auswählen. Sobald Sie den Cursor in B5 setzen und per Dropdown-Pfeil die zugehörige Gültigkeitsliste öffnen, werden Sie feststellen, dass nur noch Städte aus dem betreffenden Land auftauchen. Druckbereich einfacher festlegen Versionen: Excel 97, 2000 und 2002 Wenn Sie gezielt nur einen bestimmten Bereich einer Tabelle ausdrucken möchten, müssen Sie dazu einen entsprechenden Druckbereich definieren. Normalerweise verwenden Sie dazu das Menü Datei-Druckbereich-Druckbereich festlegen, aber es geht auch noch schneller: Klicken Sie mit der rechten Maustaste in eine beliebige Symbolleiste und wählen Sie das Kontextmenü Anpassen an. Wechseln Sie auf die Registerkarte "Befehle" und wechseln Sie in die Kategorie "Datei". Daraufhin finden Sie in der Liste Befehle ein Symbol "Druckbereich festlegen", das Sie nun ganz einfach mit der Maus an die gewünschte Position ziehen. In Zukunft müssen Sie nur noch einen beliebigen Tabellenbereich markieren und auf das neue Symbol klicken, um einen Druckbereich festzulegen. Drucken von Arbeitsmappen verhindern Versionen: Excel 97, 2000 und 2002 In der letzten Ausgabe der Excel-Kolumne habe ich Ihnen eine Lösung vorgestellt, mit der Sie die Anzahl der Druckseiten bereits vor dem eigentlichen Druckvorgang ermitteln können. In der heutigen Ausgabe der Excel-Kolumne verrate ich Ihnen, wie Sie verhindern können, daß eine bestimmte Tabelle gedruckt werden kann. Im folgenden Praxisbeispiel wird dem Anwender, der versucht die Tabelle 1 auszudrucken eine Warnmeldung angezeigt. Um diese Funktionalität zu programmieren, wenden Sie ein Ereignismakro von Home Home Excel an. Dabei gehen Sie wie folgt vor: 1. Wechseln Sie mit der Tastenkombination Alt+F11 in die Entwicklungsumgebung von Excel. 2. Im Projekt-Explorer klicken Sie den Eintrag "DieseArbeitsmappe" doppelt an. 3. Erfassen Sie danach folgendes Ereignismakro: Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "Tabelle1" Then MsgBox "Sie dürfen diese Tabelle nicht drucken!" Cancel = True End If Exit Sub End Sub Über die Eigenschaft "Names" können Sie den Namen der aktiven Tabelle ermitteln. In Abhängigkeit davon können Sie dann entweder den Druckvorgang fortsetzen oder eben die Warnmeldung ausgeben. Die Abfrage können Sie natürlich erweitern, wenn Sie beispielsweise ein ganz Reihe von Tabellen haben, die nicht gedruckt werden dürfen. Das Ereignismakro für diesen Fall sieht dann wie folgt aus: Private Sub Workbook_BeforePrint(Cancel As Boolean) Select Case ActiveSheet.Name Case "Tabelle1", "Tabelle2" MsgBox "Sie dürfen diese Tabelle nicht drucken!" Cancel = True Case Else Exit Sub End Select End Sub Über die Case-Struktur haben Sie mehr Möglichkeiten, verschiedene Fälle zu behandeln als durch die Schachtelung mehrere IF-Strukturen. In dieser Struktur könnten Sie sogar unterschiedliche Meldungen auf dem Bildschirm ausgeben, je nach dem von welcher Tabelle versucht wird zu drucken. Möchten Sie generell verhindern, daß in dieser Arbeitmappe eine Tabelle gedruckt werden kann, dann setzen Sie folgendes Ereignismakro ein: Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True Exit Sub End Sub Indem Sie das Argument "Cancel" auf den Wert "True" setzen, verhindern Sie für diese Arbeitsmappe jeglichen Ausdruck. Mit der Anweisung "Exit Sub" beenden Sie danach das Ereignismakro. Duplikate in Adresslisten finden und löschen Versionen: Excel 97, 2000 und 2002/XP Home Home Excel wird in vielen Fällen zur Verwaltung von Adressen verwendet. Ein immer wieder auftauchendes Problem betrifft dabei unerwünschte Duplikate, die beispielsweise durch Doppeleingaben oder das Zusammenführen mehrerer Listen entstehen können. Nun bietet Excel natürlich nicht dieselben Möglichkeiten zur Duplikatssuche, wie eine Datenbank, aber mit einigen Tipps und Kniffen kommen Sie dennoch zum Ziel. Da uns an der Helpline immer wieder Anfragen rund um das Thema "Duplikate" erhalten, werden wir in den nächsten Wochen in loser Folge verschiedene Möglichkeiten vorstellen, um den lästigen Dubletten in Excel auf die Spur zu kommen. In dieser Woche geht es zunächst einmal um die Nutzung der "Bordmittel" von Excel ohne den Einsatz von Makros oder externen Programmen. So steht Ihnen bei dem so genannten "Spezialfilter" von Excel bereits standardmäßig eine Option Keine Duplikate zur Verfügung, die zumindest in einigen Fällen bereits weiterhelfen kann. Grundsätzlich können Sie mit dem Spezialfilter alle Datensätze aus einer Liste herausfiltern, die beliebigen von Ihnen festgelegten Kriterien entsprechen. Wenn Sie bei diesem Vorgang die Funktion Keine Duplikate verwenden, unterdrückt Excel in dem Ergebnis automatisch doppelte Datensätze. Das Problem dabei: Excel erkennt einen Datensatz nur dann als Duplikat, wenn wirklich alle Feldinhalte übereinstimmen. Selbst kleine Unterschiede wie "Mozart Weg 67" und "Mozartweg 67" würden bereits dazu führen, dass Excel den Datensatz nicht als Duplikat identifiziert. Der Spezialfilter sollte daher vor allem dann zum Einsatz kommen, wenn Sie nur nach exakten Duplikaten, wie sie beispielsweise durch das Zusammenführen von Listen entstehen können. Und so gehen Sie dazu vor: 1. Klicken Sie in eine beliebige Zelle der Liste, aus der Excel die Duplikate herausfiltern soll. 2. Wählen Sie das Menü Daten-Filter-Spezialfilter an. 3. Excel versucht nun, Ihre Adressliste basierend auf der aktuellen Markierung auszuwählen. Der entsprechende Bezug wird dann in das Feld Listenbereich eingetragen. Prüfen Sie, ob wirklich Ihre komplette Liste samt Spaltenbeschriftungen ausgewählt ist und korrigieren Sie den Bezug gegebenenfalls. 4. Aktivieren Sie die Option An eine andere Stelle kopieren, damit Excel die Liste nicht nur filtert, sondern das Ergebnis in einen anderen Tabellenbereich schreibt. Nur dann funktioniert die Duplikatssuche! 5. Lassen Sie das Feld Kriterienbereich leer und klicken Sie in das Feld Kopieren nach. 6. Geben Sie hier den Bezug der linken oberen Ecke des Zielbereiches ein, in den Excel die Liste ohne Duplikate kopieren soll. Hier bietet sich beispielsweise der Bereich unter der Originalliste an. 7. Aktivieren Sie das Kontrollkästchen Keine Duplikate und starten Sie den Vorgang mit Ok. 8. Im Zielbereich finden Sie nun eine Kopie der Originalliste ohne doppelte Einträge. Wenn Sie es allerdings mit einer Adressliste zu tun haben, in der Duplikate sich nicht durch die komplette Übereinstimmung aller Felder identifizieren lassen, kommen Sie mit diesem Verfahren nicht weiter. Eine übliche Lösung für dieses Problem ist der Einsatz eines so genannten "Matchcodes". Dabei setzt man für jeden Datensatz eine Zeichenkette aus Informationen zusammen, mit deren Hilfe sich Dubletten auch bei kleinen Unterschieden möglichst sicher erkennen lassen. Ein möglicher Matchcode wäre beispielsweise: · · · Home Die ersten fünf Zeichen des Firmen- oder Nachnamens Die ersten fünf Zeichen des Straßennamens Die Postleitzahl Home Kombiniert man diese drei Informationen, erhält man einen Matchcode, der beispielsweise folgendermaßen aussieht: SchneMozar10982 Dieser Matchcode würde sich beispielsweise aus der folgende Adresse ergeben: Schneider & Söhne, Mozartweg 123, 10982 Berlin Der Nutzen des Matchcodes wird deutlich, wenn Sie sich die folgende Adresse ansehen: Schneider & Söhne GmbH, Mozart Weg 123, 10982 Berlin Es handelt sich hier natürlich um dieselbe Adresse, aber bei einem direkten Vergleich könnte Excel das Duplikat nicht erkennen. Der Matchcode hilft hier weiter, denn die beiden Adressvarianten liefern dasselbe Ergebnis: SchneMozar10982 Und so können Sie Duplikate mit Hilfe des Matchcodes aus einer Adressliste löschen: 1. Fügen Sie in Ihre Adressliste eine neue Spalte für den Matchcode ein. 2. Die Zusammensetzung des Matchcodes können Sie natürlich individuell für Ihre Liste bestimmen. Für unser oben angegebenes Beispiel könnte er für die erste Adresse folgendermaßen aussehen: =Links(A2;5)&Links(B2;5)&E5 · Kopieren Sie die Formel des Matchcodes in die Zeilen der übrigen Datensätze, so dass er für jede Adresse ermittelt wird. · Sie müssen nun im nächsten Schritt alle Zeilen mit einem Matchcode ermitteln, der mehr als einmal vorkommt. Mit der folgenden Formel, die Sie in eine neue Spalte des ersten Datensatzes eingeben, markieren Sie alle Duplikate mit einem Sternchen "*": =WENN(ISTZAHL(VERGLEICH(B2;BEREICH.VERSCHIEBEN($B$1;0;0; Zeile(B2)-1;1);0));"*";"") Passen Sie dabei die folgenden Bezüge an Ihre jeweilige Liste an: · · B2 ist der erste zu prüfende Matchcode $B$1 ist die Zelle über dem ersten Matchcode (in der Regel die Spaltenbeschriftung). Wichtig ist, dass Sie in jedem Fall einen absoluten Bezug verwenden! · In dem Ausdruck "Zeile(B2)-1" muss die Zahl 1 durch die "Nummer der Tabellenzeile mit dem ersten Listeneintrag minus 1" ersetzt werden. Also beispielsweise: "Zeile(A3)-2" oder "Zeile(H67)66". Wenn Sie diese Formel nun in der Spalte nach unten bis an das Ende der Liste ausfüllen, erscheint ein Sternchen neben jedem Matchcode, der mehr als einmal vorkommt. Sie haben nun zwei Möglichkeiten: · Home Sie sortieren Ihre Adressliste alphabetisch nach dem Matchcode. Mit Hilfe der Markierungen prüfen Sie dann die Datensätze, die mehrfach vorkommen und entscheiden, welche Adressen Home · gelöscht werden sollen. Dieses Verfahren bietet sich vor allem bei überschaubaren Adressbeständen an. Alternativ dazu sortieren Sie die Adressliste nach der Liste mit der Markierung und können dann alle mit einem Sternchen versehenen Datensätze ganz einfach in einem Schritt löschen. Dynamische Diagramme durch Steuerelemente Versionen: Excel 97, 2000 und 2002/XP Die grafische Darstellung von umfangreichen Tabellen ist nicht immer besonders übersichtlich. Nehmen wir beispielsweise eine Tabelle, in der für sieben Filialen das Budget nach Monaten aufgelistet wird. Da sich diese Datenmenge schwer in einem einzigen Diagramm darstellen lässt, wäre es sinnvoll, gezielt nur die Kosten eines Quartals zu vergleichen. Sie könnten nun vier separate Diagramme erstellen, aber es geht auch einfacher: Ziel ist es, ein Drehfeld-Steuerelement in das Diagramm einzufügen, mit dessen Hilfe Sie die Darstellung ganz einfach per Mausklick von einem Quartal zum nächsten umschalten können. Mit ein paar Tricks kein Problem: 1. Markieren Sie die Werte des ersten Quartals. In unserer Beispieltabelle ) entspricht das dem Bereich B4:E11. 2. Wählen Sie das Menü Einfügen-Diagramm an und erstellen Sie mit Hilfe des Diagrammassistenten ein einfaches zweidimensionales Säulendiagramm. Legen Sie dabei im letzten Schritt des Assistenten fest, dass das Diagramm auf einem neuen Blatt erstellt werden soll. 3. Blenden Sie die Symbolleiste "Formular" ein und fügen Sie an einer beliebigen Stelle des Diagramms ein neues Drehfeld (das Symbol mit einem nach oben und einem nach unten gerichteten Pfeil) ein. 4. Nachdem Sie das Drehfeld mit der rechten Maustaste angeklickt haben, rufen Sie das Kontextmenü Steuerelement formatieren auf und nehmen auf der Registerkarte "Steuerung" die folgenden Einstellungen vor: Aktueller Wert: 0 Minimalwert: 0 Maximalwert: 3 Schrittweite: 1 Ausgabeverknüpfung: Budget2003!$C$14 Auf diese Weise beschränken Sie die Werte, die über das Drehfeld eingestellt werden können auf Zahlen zwischen 0 und 3. Außerdem erreichen Sie, dass Excel den jeweils aktuellen Wert in die Zelle C14 des Tabellenblatts "Budget2003" einträgt. · Der eigentliche Trick besteht nun darin, auf dem Tabellenblatt Namen zu definieren, deren zugeordnete Bereiche sich automatisch dem aktuellen Inhalt von C14, also dem über das Drehfeld beeinflussten Wert, anpassen. Wählen Sie dazu das Menü Einfügen-Namen-Festlegen an und erstellen Sie die folgenden Namen zur Bestimmung der Beschriftung jeder Datenreihe: Monat1: =BEREICH.VERSCHIEBEN(Budget2004!$C$4;0; Budget2003!$C$14*3;1;1) Monat2: =BEREICH.VERSCHIEBEN(Budget2004!$D$4;0; Budget2003!$C$14*3;1;1) Home Home Monat3: =BEREICH.VERSCHIEBEN(Budget2004!$E$4;0; Budget2003!$C$14*3;1;1) · Anschließend erstellen Sie die folgenden Namen, die die Bereiche mit den darzustellenden Daten bestimmen: Daten1: =BEREICH.VERSCHIEBEN(Budget2004!$C$5;0; Budget2003!$C$14*3;7;1) Daten2: =BEREICH.VERSCHIEBEN(Budget2004!$D$5;0; Budget2003!$C$14*3;7;1) Daten3: =BEREICH.VERSCHIEBEN(Budget2004!$E$5;0; Budget2003!$C$14*3;7;1) · Zu guter letzt stellen Sie sicher, dass die Datenreihen des Diagramms keine festen Bezüge, sondern stattdessen die soeben definierten Namen verwenden. Klicken Sie dazu auf eine beliebige Säule des Monats Januar, so dass die zugehörige Datenreihen-Formel in der Bearbeitungszeile sichtbar wird. Ersetzen Sie sie durch die folgende Formel: =DATENREIHE(budget.xls!Monat1;Budget2004!$B$5:$B$11; budget.xls!Daten1;1) · Nach demselben Prinzip bestimmen Sie die Datenreihen-Formeln für Februar und März: =DATENREIHE(budget.xls!Monat2;budget2004!$B$5:$B$11; budget.xls!Daten2;2) =DATENREIHE(budget.xls!Monat3;Budget2004!$B$5:$B$11; budget.xls!Daten3;3) Sie haben nun die Möglichkeit, durch einfaches Klicken auf das Drehfeld die grafische Darstellung von einem Quartal auf das nächste umzuschalten. Auch die Legende wird dabei automatisch angepasst! Dynamischer Mauszeiger, Teil 2 Versionen: Excel 97, 2000 und 2002 Unser Kolumnist Bernd Held hat mit seinem "Dynamischen Mauszeiger" aus Ausgabe 47/2001 eine kleine Lawine losgetreten, denn es folgte eine Flut von Leseranfragen. Viele hatten schon lange nach genau so einer Lösung gesucht, aber sie waren mit der Umsetzung noch nicht so ganz zufrieden. Wir haben uns die Anregungen zu Herzen genommen und möchten Ihnen in dieser Ausgabe eine optimierte Version des dynamischen Mauszeigers vorstellen, die unter tatkräftiger Mitwirkung von Günther Abel und Bernd Held zustande gekommen ist. Home Home Kurz zur Erinnerung: der dynamische Mauszeiger sorgt dafür, daß Excel automatisch die Zeile in der aktuellen Tabelle gelb hinterlegt, in der sich der Zellzeiger zur Zeit befindet. Die Orientierung in umfangreichen Kalkulationsmodellen und Listen wird damit zum Kinderspiel. Im wesentlichen gab es dabei zwei Probleme: · · Vorhandene Schattierungen in der Tabelle gingen verloren Die Funktionen zum Kopieren und Ausschneiden stehen nicht zur Verfügung Die neue Lösung wurde daher so konzipiert, daß sie vor dem Markieren einer Zeile die vorhandenen Schattierungen speichert und später wiederherstellt. Außerdem läßt sich die Funktion jetzt nach Belieben ein- und wieder ausschalten. Kopieren Sie dazu den folgenden Code in ein neues Modul der Arbeitsmappe, in der Sie die Funktion nutzen möchten: Dim ranAltBereich As Range Dim lngColorIndex(1 To 256) As Long Dim bolDynMauszeiger As Boolean Sub MarkierungEin(ByVal Target As Excel.Range) Dim ranZelle As Range Dim x As Integer If bolDynMauszeiger = False Then Exit Sub If Not ranAltBereich Is Nothing Then x=0 On Error Resume Next For Each ranZelle In ranAltBereich x=x+1 ranZelle.Interior.ColorIndex = lngColorIndex(x) Next End If Set ranAltBereich = _ Range("A" & Target.Row & ":IV" & Target.Row) x=0 For Each ranZelle In ranAltBereich x=x+1 lngColorIndex(x) = _ ranZelle.Interior.ColorIndex Next Target.EntireRow.Interior.Color = RGB(255, 255, 200) End Sub Home Home Sub MarkierungAus() Dim x As Integer Dim ranZelle As Range If Not ranAltBereich Is Nothing Then x=0 For Each ranZelle In ranAltBereich x=x+1 ranZelle.Interior.ColorIndex = lngColorIndex(x) Next End If End Sub Sub MauszeigerEinschalten() bolDynMauszeiger = True End Sub Sub MauszeigerAusschalten() MarkierungAus bolDynMauszeiger = False End Sub Die Prozedur "MarkierungEin" sorgt dafür, daß dieSchattierungen der bisherigen Zeile wiederhergestellt, die Einstellungen der neuen Zeile gespeichert und die gelbe Hinterlegung zugewiesen wird. "MarkierungAus" kommt beim Deaktivieren der Funktion und beim Schließen der Arbeitsmappe zum Einsatz: die alten Schattierungen werden wiederhergestellt. Das Ein- und Ausschalten des Mauszeigers steuert die globale Variable "bolDynMauszeiger", die über die beiden kleinen Prozeduren am Ende des Listings gesetzt wird. Damit schließlich die Markierung bei jedem Verschieben des Mauszeigers neu gesetzt und beim Schließen der Arbeitsmappe entfernt wird, verwenden Sie die beiden folgenden Prozeduren, die unbedingt in das Modul von "DieseArbeitsmappe" eingefügt werden müssen: Private Sub Workbook_SheetSelectionChange(ByVal sh _ As Object, ByVal Target1 As Excel.Range) MarkierungEin Target1 End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) MarkierungAus End Sub Home Home Zum schnellen Zugriff auf den dynamischen Mauszeiger erstellen Sie nun noch zwei neue Symbole, die die Prozeduren "MauszeigerEinschalten" und "MauszeigerAusschalten" aufrufen". Echte Arbeitstage Versionen: Excel 97, 2000 und 2002/XP FRAGE: In einer Tabelle erfassen wir Auftragsdaten. Dazu zählen unter anderem der Tag der Auftragsannahme und der Tag der Fertigstellung. In der Statistik sollen nun die tatsächlich benötigten Arbeitstage ausgegeben werden. Es geht also nicht einfach nur um die Differenz zwischen Anfangs- und Enddatum, sondern um die wirkliche Arbeitsdauer unter Berücksichtigung von Wochenenden und Feiertagen. Ist so etwas überhaupt in Excel möglich? F. Schulte ANTWORT: Funktionen zur Berechnung der "Nettoarbeitstage" finden Sie im Add-In "AnalyseFunktionen". Dieses Add-In gehört zum Lieferumfang von Excel, wird beim ersten Programm-Setup aber nur auf Kommando installiert. Und selbst wenn Sie es bei der Excel-Installation eingerichtet haben, ist es nicht automatisch aktiviert. Überprüfen Sie also zunächst, ob die "Analyse-Funktionen" überhaupt schon zur Verfügung stehen. Dazu wählen Sie im Excel-Menü Extras je nach Programmversion den Befehl Add-In-Manager (97), Add-InsManager (2000) oder Add-Ins (2002) an. In der Liste verfügbarer Add-Ins sollten Sie einen Eintrag namens "Analyse-Funktionen" finden. Wenn dem so ist, versehen Sie ihn per Mausklick mit einem Häkchen und bestätigen Sie das Laden des Add-Ins mit Ok. Wenn Sie die "Analyse-Funktionen" nicht in der Add-In-Liste finden, müssen Sie noch einmal das SetupProgramm von Excel/Office starten und eine Wartungsinstallation durchführen. Suchen Sie dann in den Installationsoptionen von Excel nach dem Analyse-Add-In und installieren Sie es nach. Anschließend aktivieren Sie das Add-In mit den im letzten Absatz beschriebenen Schritten. In Zukunft können Sie in Ihren Tabellenblättern zwei leistungsfähige Funktionen zur Berechnung der "echten" Arbeitstage einsetzen: NETTOARBEITSTAGE und ARBEITSTAG. In Ihrem Fall, in dem Anfangs- und Enddatum vorliegen, nutzen Sie die Funktion NETTOARBEITSTAGE. Sie rechnet automatisch die Wochenenden (Samstag und Sonntag) aus einer Datumsdifferenz heraus. Damit darüber hinaus auch Feiertage berücksichtigt werden, können Sie per Funktionsparameter entsprechende Datumswerte angeben. Die generelle Funktionssyntax lautet: =NETTOARBEITSTAGE(<Anfangsdatum>;<Enddatum>; <Matrix der Feiertage>) In den meisten Fällen definieren Sie die "Matrix der Feiertage", indem Sie die Datumswerte in einen Tabellenbereich eingeben und dann den Zellbezug als Funktionsparameter einfügen. Konkret könnte das wie folgt aussehen: Beginnen Sie mit der Eingabe der Feiertage. Am besten eignet sich dafür ein separates Tabellenblatt mit allgemeinen Berechnungsgrundlagen, das vielleicht schon in Ihrer Arbeitsmappe vorhanden ist. Angenommen, dieses Blatt hätte den Namen "Stammdaten". Darin geben Sie die Namen der Feiertage in Spalte A ein; die eigentlichen Datumswerte ("1.1.2003" für Neujahr usw.) stehen dann in Zelle B1 und darunter. Home Home Wenn die Feiertage definiert sind, können Sie sich der Arbeitsdauerberechnung zuwenden. Wir gehen davon aus, dass dies in einem anderen Tabellenblatt geschehen soll. Wechseln Sie also in eine andere Tabelle und tragen Sie das Anfangsdatum in Zelle B1 ein und das Enddatum in Zelle B2. Die "echten" Arbeitstage ermitteln Sie dann in Zelle B3 mit einer Formel wie dieser: =NETTOARBEITSTAGE(B1;B2;Stammdaten!$B$1:$B$11) Die Bereichsadresse in der Tabelle "Stammdaten" hängt natürlich von der Anzahl Ihrer Feiertage ab. Das Ergebnis der Formel ist auf jeden Fall genau der Wert, den Sie für Ihre Statistik gesucht haben. Vielleicht ist für Sie auch die Funktion ARBEITSTAG interessant. Sie geht von einem Anfangsdatum und einer vorgegebenen Nettoarbeitsdauer (in Tagen) aus und teilt Ihnen mit, an welchem Tag das Ende des Zeitraums erreicht ist. Wenn Sie dieselben Basisdaten wie im letzten Beispiel zugrunde legen, können Sie mit der Formel =ARBEITSTAG(B1;10;Stammdaten!$B$1:$B$11) berechnen, welcher Tag 10 "echte" Arbeitstage nach dem Datum aus Zelle B1 liegt. Einzelne Zellen ausblenden Wie blende ich eine Zelle aus? Das Verfahren ist nahezu identisch mit dem Entsperren von Zellen, nur dass Sie dieses Mal die Eigenschaft einschalten müssen: 1. 2. 3. 4. 5. Falls Sie den Blattschutz schon eingeschaltet haben, heben Sie ihn wieder auf. Markieren Sie die Zelle(n), die Sie ausblenden wollen. Wählen Sie Format-Zellen an. Wechseln Sie auf die Registerkarte Schutz. Aktivieren Sie das Kontrollkästchen Formel ausblenden (97) bzw. Ausgeblendet (2000/2002) und bestätigen Sie die Änderung mit Ok. Wie zuvor wird die Eigenschaft "Ausgeblendet" erst wirksam, nachdem Sie den Blattschutz eingeschaltet haben. Zellen bleiben sichtbar Ich habe einige Zellen ausgeblendet, kann sie nach Einschalten des Blattschutzes aber immer noch sehen. Was mache ich falsch? "Ausgeblendet" bedeutet nicht, dass die Zelle vom Bildschirm verschwindet. "Ausgeblendet" heißt nur, dass die Zellinhalte nicht in der Bearbeitungszeile erscheinen. Sinnvoll ist das Ausblenden von Zellen also vornehmlich für Formelzellen, wenn Sie nicht wollen, dass andere Anwender die Berechnungsgrundlage sehen können. Es ist quasi ein Schutz Ihres "Gedankenguts". Home Home Excel-Daten nach Word übernehmen Versionen: Excel 97, 2000 und 2002 FRAGE: Ich möchte mit einem Makro voll automatisch Daten aus Excel nach Word übernehmen. Der Makrorekorder scheitert hier. Wie könnte eine solche Lösung aussehen? D. Lülker ANTWORT: Da sich Word bequem per Automation aus Excel heraus steuern lässt, gibt es für die Datenübernahme viele mögliche Lösungen. Die folgende Prozedur zeigt das grundsätzliche Prinzip: Sub ExcelTabelleNachWordZwischenablage() Dim WordObj As Object Dim WordDoc As Object Dim i As Integer Sheets("Tabelle1").Activate i = ActiveSheet.UsedRange.Rows.Count Range("A1:D" & i).Copy On Error Resume Next Set WordObj = GetObject(, "word.application.9") If Err.Number = 429 Then Set WordObj = CreateObject("word.application.9") Err.Number = 0 End If WordObj.Visible = True Set WordDoc = WordObj.Documents.Add WordObj.Selection.Paste Application.CutCopyMode = False Set WordObj = Nothing Set WordDoc = Nothing End Sub Nachdem die Prozedur die Anzahl der ausgefüllten Zeilen in "Tabelle1" der aktuellen Arbeitsmappe ermittelt hat, wird der Bereich A1:Dx (x=Anzahl der ausgefüllten Zeilen) in die Zwischenablage kopiert. Dann setzen wir die Referenz auf ein Word-Objekt, erstellen hier ein neues Dokument und fügen den Inhalt der Zwischenablage ein. Bitte beachten Sie: · · · Home Passen Sie bei den Anweisungen "GetObject" und "CreateObject" gegebenenfalls die Nummer der von Ihnen eingesetzten Word-Version an (8 = Word 97, 9 = Word 2000 oder 10 = Word 2002). Wenn Sie immer einen Tabellenbereich aus der aktuellen Tabelle übernehmen möchten, können Sie auf das Aktivieren des Blattes "Tabelle1" verzichten. In der Prozedur wird nur der aktuelle Bereich bis Spalte D kopiert. Passen Sie den Bereichsbezug gegebenenfalls an Ihre Tabelle an. Home Extrahieren von Zellinhalten mit Leerzeichen Trennung in Excel (Formel) Beispiel Zelle A1 Hans Huber Formel für Vorname: =Teil(A1;1;Finden(„ „;A1;1)-1) Formel für Nachname: =Teil(A1;Suchen(„ „;A1;1)+1;50) die Zahl 50 steht für die Anzahl Zeichen ab der gefundenen Position, und sollte mindestens so gross sein, wie der Zellinhalt. Fehlende Datenpunkte in Diagrammen Versionen: Excel 97, 2000 und 2002 Ein häufig in Fragen an unsere Helpline angesprochenes Problem betrifft die Behandlung von fehlenden Datenpunkten in Liniendiagrammen. Wenn Sie ein Diagramm beispielsweise auf Basis von Umsatzzahlen erstellen, die noch nicht komplett vorliegen, lässt Excel einfach die Linienabschnitte für die Werte weg, die Sie bisher noch nicht eingegeben haben. Die Eingabe von Nullwerten ist keine Lösung, weil die Linien dann zwar durchgehend gezeichnet, aber ungerechtfertigten "Knicken" auf die X-Achse erscheinen würden. Wenig bekannt ist die Tatsache, dass Sie diesen unerwünschten Effekt vermeiden und die Linien auch über fehlende Datenpunkte hinweg weiterführen können. Zu diesem Zweck klicken Sie einfach das entsprechende Diagramm an und rufen das Dialogfeld Extras-Optionen auf. Wechseln Sie hier auf die Registerkarte "Diagramm" und markieren unter Leere Zelle die Option werden interpoliert. Nachdem Sie mit Ok bestätigt haben, vervollständig Excel automatisch alle Linien auf Basis der vorhandenen Zahlen. In einigen Fällen werden Sie allerdings feststellen, dass Excel Ihnen die Option zum Interpolieren von Datenpunkten nicht anbietet. Das Problem tritt in der Regel bei Kombinationsdiagrammen auf, in denen Sie beispielsweise eine Datenreihe in Form von Säulen und die anderen als Linien darstellen. Obwohl Sie auch diese Linien eigentlich interpolieren können, ist das entsprechende Kontrollkästchen unter ExtrasOptionen deaktiviert. Hier hilft ein kleines Makro weiter, das Sie im VBA-Editor eingeben: Sub DiagrammInterpolieren() ActiveChart.DisplayBlanksAs = xlInterpolated End Sub Danach können Sie ein Diagramm anklicken und das Makro über Extras-Makro-Makros aufrufen. Daraufhin wird die Option Leere Zellen werden interpoliert eingeschaltet, obwohl Sie im Dialogfeld ExtrasOptionen eigentlich nicht zur Verfügung steht. In diesem Zusammenhang noch ein nützlicher Tipp: Haben Sie die gewünschte Option einmal in einem Kombinationsdiagramm eingeschaltet, bietet es sich an, das Diagramm als Mustervorlage zu speichern. Dazu wählen Sie das Menü Diagramm-Diagrammtyp an, wechseln auf die Registerkarte "Benutzerdefinierte Typen" und klicken unter "Auswählen aus" auf die Option Benutzerdefiniert. Daraufhin erscheint eine Schaltfläche Hinzufügen, über die Sie die Formate und Einstellungen des aktuellen Diagramms als Vorlage hinterlegen können. Beim Anlegen eines neuen Kombinationsdiagramms wählen Sie dann diese Vorlage aus und auch in dem neuen Diagramm wird die Option Leere Zellen werden Home Home interpoliert bereits automatisch aktiviert sein. Fehlerwerte in Tabellen unterdrücken Versionen: Excel 97, 2000 und 2002 FRAGE: Wie kann ich verhindern, dass in den Ergebniszellen meines Tabellenmodells Fehlerwerte angezeigt werden, solange ich noch nicht alle Zellen ausgefüllt habe, auf denen das Ergebnis beruht? H. Stremmler ANTWORT: Prinzipiell ist es natürlich sinnvoll, fehlerhafte Formeln kenntlich zu machen. Anhand von Fehlerwerten wie "#BEZUG!", "#WERT!" oder "#DIV/0!" sehen Sie sofort, woran es hapert. Manchmal ergeben sich Fehlerwerte aber nur deshalb, weil bestimmte Zellen noch nicht mit Inhalten gefüllt worden sind. Dann sollte der Benutzer natürlich nicht durch Standard-Fehlerwerte irritiert werden, zumal sie ohnehin verschwinden, wenn alle Eingabezellen mit Werten belegt sind. Dazu ein einfaches Beispiel: Stellen Sie sich vor, Sie würden in Zelle B5 den Umsatz des laufenden Jahres erfassen und in Zelle B6 die Anzahl der Monate, in denen der Umsatz erwirtschaftet wurde. Zelle B8 soll anschließend den durchschnittlichen monatlichen Umsatz ausgeben, und zwar mit folgender Formel: =B5/B6 Solange Sie weder den Umsatz noch die Anzahl der Monate oder solange Sie nur den Umsatz eingetragen haben, liefert die Formel den Fehlerwert "#DIV/0!". Das ist logisch, denn ohne die Monatsanzahl handelt es sich um eine Division durch Null. Wenn aber klar ist, dass die Monate eingegeben werden müssen, können Sie auf die Ausgabe des Fehlerwertes verzichten. Das erreichen Sie mit einer WENN-Abfrage, in der Sie das Formelergebnis auf Fehler überprüfen. Sollte ein Fehler auftreten, lassen Sie die WENN-Funktion entweder eine leere Zeichenfolge oder einen beschreibenden Text ausgeben. Ansonsten lassen Sie die Formel normal berechnen. In diesem Fall unterdrücken Sie den Standard-Fehlerwert wie folgt: =WENN(ISTFEHLER(B5/B6);"";B5/B6) Oder wenn Sie den Benutzer auf die noch fehlende Eingabe hinweisen wollen: =WENN(ISTFEHLER(B5/B6);"Berechnungsgrundlage fehlt";B5/B6) Die Funktion ISTFEHLER liefert bei allen auftretenden Fehlern den logischen Wert "wahr", egal ob es sich um eine Division durch Null, um fehlerhafte Bezüge oder etwas anderes handelt. Beachten Sie bei dieser Form der Fehlerunterdrückung nur, dass die Formel sehr lang werden kann, da Sie die Originalformel (hier: "B5/B6") immer zwei Mal eintragen müssen - nach dem generellen Muster: Home Home =WENN(ISTFEHLER(<Originalformel>);<Wert bei Fehler>; <Originalformel>) Flexibles Kopieren in Excel 97 und 2000 Versionen: Excel 97 und 2000 In Ausgabe 39/2001 haben wir in einem Tip für Excel 2002 gezeigt, wie Sie Zellen und Bereiche mit Hilfe von SmartTags noch flexibler kopieren können. Uns haben zahlreiche Anfragen von Lesern erreicht, die die neue Excel-Version noch nicht einsetzen und wissen möchten, ob es ähnliche Möglichkeiten auch in Excel 97 und 2000 gibt. Tatsächlich kommen Sie auch ohne Update in den meisten Fällen zum Ziel, aber SmartTags gibt es natürlich nicht und es wird daher ein wenig umständlicher. Also: Markieren Sie einen beliebigen Tabellenbereich, wählen Sie das Menü BearbeitenKopieren an und probieren Sie dann aus: Alle Formate der Ursprungszellen beibehalten Sowohl Inhalte als auch Formate der markierten Zellen werden übertragen und überschreiben alle Inhalte und Einstellungen im Zielbereich. In Excel 97/2000 drücken Sie dazu an der Zielposition einfach Strg+V oder wählen das Menü Bearbeiten-Einfügen an. Formatierung der Zielzellen übernehmen Nur Inhalte (Werte und Formeln) kopieren. Die Formatierung im Zielbereich bleibt erhalten. Wählen Sie in Excel 97/2000 das Menü Bearbeiten-Inhalte einfügen an, markieren Sie die Option Formeln und bestätigen Sie mit Ok. Werte und Zahlenformate Inhalte und Formate werden übertragen. Bei Formeln fügt Excel nur die aktuellen Ergebnisse ein. In Excel 97/2000 geht das nur in zwei Durchgängen: Wählen Sie zunächst das Menü Bearbeiten-Inhalte einfügen an, markieren Sie die Option Werte und bestätigen Sie mit Ok. Direkt im Anschluß wiederholen Sie den Vorgang noch einmal; diesmal verwenden Sie allerdings die Option Formate. Breite der Ursprungsspalte beibehalten Neben Inhalten und Formaten werden auch die Einstellungen für die Spaltenbreite übertragen. Auch das geht in Excel 97/2000 nur in zwei Schritten: Nachdem Sie die Markierung ganz normal mit Bearbeiten-Einfügen eingefügt haben, rufen Sie direkt danach das Dialogfeld BearbeitenInhalte einfügen auf, markieren die Option Spaltenbreite und bestätigen mit Ok. Nur Formatierung Kopiert nur die Formateinstellungen und überschreibt keine Zellinhalte. In Excel 97/2000 wählen Sie dazu das Menü Bearbeiten-Inhalte einfügen an, aktivieren Sie die Option Formate und klicken Sie auf Ok. Zellen verknüpfen Kopiert die Formate und fügt anstelle der Zellinhalte Verknüpfungen auf die entsprechenden Home Home Zielzellen in die Tabelle ein. Wählen Sie das Menü Bearbeiten-Inhalte einfügen an und klicken Sie auf Verknüpfen. Formatierte Zellen mit Text kombinieren Versionen: Excel 97, 2000 und 2002 FRAGE: Ich benutze in Excel häufig die Möglichkeit, eine Zahl oder Formel mit Text zu verknüpfen, z.B.: ="Das Ergebnis ist: " & SUMME(A2:A4) Wie kann ich die Zahl im Ergebnis in dieser Zelle formatieren? Die normale Zahlenformatierung wirkt ja nicht mehr, da sich Text in der Zelle befindet. E. von Göler ANTWORT: Das Problem in diesem Fall besteht tatsächlich darin, dass der Zellinhalt von Excel als Zeichenkette behandelt wird und normale Zahlenformate daher nicht verwendet werden können. Mit einem kleinen Trick kommen Sie aber dennoch zum Ziel, denn Excel bietet genau für diese Fälle die Funktion TEXT an. Mit ihrer Hilfe können Sie eine Zahl formatieren und dann in eine Zeichenkette umwandeln. Zu diesem Zweck übergeben Sie der Funktion einmal die gewünschte Zahl und zum anderen das Zahlenformat in der Form, in der es auch im Dialogfeld Format-Zellen auf der Registerkarte "Zahlen" angegeben wird. Also zum Beispiel: ="Das Ergebnis ist: " & TEXT(SUMME(A2:A4);"#.##0,00 EUR") In der Tabelle erscheint das Ergebnis dann zum Beispiel so: Das Ergebnis ist: 2.389,90 EUR Formel ohne Änderung kopieren Versionen: Excel 97, 2000 und 2002 FRAGE: Wenn ich eine Formel kopiere, paßt Excel automatisch alle relativen Bezüge auf die neue Zelle an. In den meisten Fällen ist das auch wünschenswert, aber manchmal möchte ich das Ergebnis einer Berechnung ganz einfach nur in einer anderen Zelle darstellen und dann zerstört die automatische Anpassung die komplette Formel. Kann man diese automatischen Änderungen irgendwie unterbinden? T. Rollfs ANTWORT: Da es gerade Sinn und Zweck relativer Bezüge ist, daß sie von Excel automatisch angepaßt werden, können Sie diese Funktion nicht unterbinden. Es gibt aber zwei mögliche Lösung für Ihr Problem: · Home Sie wandeln alle relativen Bezüge in so einer Formel in absolute Bezüge um. Dazu müssen Sie die Formel im Bearbeitungsmodus (F2) markieren und dann F4 drücken. Excel kennzeichnet daraufhin jede Spalten- und Zeilenbezeichnung durch ein Dollarzeichen. Sie können die Formel dann beliebig verschieben, ohne daß sich die Bezüge ändern. Home · Schneller und eleganter ist die folgende Methode: Markieren Sie die Formel im Bearbeitungsmodus (F2) und drücken Sie Strg+C. In der Zielzelle drücken Sie dann einfach Strg+V und die Formel wird ohne Änderungen eingefügt. Dabei bleiben auch die relativen Bezüge erhalten, so daß man sie noch nutzen kann, wenn Sie die Formel erneut kopieren möchten. Formeln teilweise berechnen Versionen: Excel 97, 2000 und 2002 Wenn Sie den Fehler in einer Formel nicht durch Syntax-Prüfung finden können oder Ihnen bei einer bereits angenommenen Formel das Ergebnis verdächtig vorkommt, gibt es eine wenig bekannte, aber sehr effektive Methode, um einem Fehler auf die Spur zu kommen: 1. Wenn die Formel bereits angenommen, also mit Return abgeschlossen und berechnet wurde, setzen Sie den Cursor auf die entsprechende Zelle und wechseln mit F2 in den Bearbeitungsmodus. Bei einer Formel, die noch nicht von Excel angenommen wurde, sollten Sie sich noch im Modus "Bearbeiten" befinden. 2. Sie können nun gezielt bestimmte Teile der Formel berechnen und auf diese Weise herausfinden, wo sich ein Fehlerwert ergibt bzw. eine falsche Zahl geliefert wird. Zu diesem Zweck wird der entsprechende Ausdruck einfach markiert. Sie wählen ihn also bei gedrückter linker Maustaste mit dem Mauszeiger aus oder markieren ihn über die Tastatur mit Umschalt+Cursor links. 3. Drücken Sie anschließend F9. Excel berechnet daraufhin nur den ausgewählten Teil der Formel und ersetzt die Markierung durch das Ergebnis. 4. Sie können ohne weiteres noch weitere Teile der Formel markieren und sie mit F9 berechnen lassen. 5. Wichtig ist, daß Sie den Vorgang auf jeden Fall mit Esc und nicht mit Return abschließen, weil Excel die Formel andernfalls ohne die Ausdrücke, sondern lediglich mit den Ergebnissen annehmen würde. Diese nützliche Tip zur Fehlersuche in Formeln funktioniert in allen Excel-Versionen. Mit Excel 2002 steht Ihnen allerdings eine noch komfortablere Funktion zur Verfügung: die Formelauswertung, die Sie über das Menü Extras-Formelüberwachung starten können. Eine genaue Beschreibung finden Sie im Bonus-Tip unserer Ausgabe 28/2001. Geburtstage und Altersberechnung Versionen: Excel 97, 2000 und 2002/XP Wir haben uns in Excel Weekly bereits mehrfach mit Berechnungen rund um Datumsangaben beschäftigt. Ein Thema, das aber immer wieder in der Helpline auftaucht, betrifft den Umgang mit Geburtstagen und Altersberechnungen. Wir möchten Ihnen im Folgenden daher einige nützliche Tipps geben, um effektiver mit Geburtstagslisten und ähnlichen Tabellen zu arbeiten. Das grundsätzliche Problem mit Geburtstagen in Excel besteht darin, dass Sie sie nicht ohne weiteres sinnvoll sortieren können, um eine Geburtstagsliste zu erstellen. Wenn Sie den Geburtstag als Sortierkriterium verwenden, entspricht die Reihenfolge lediglich dem Alter der entsprechenden Personen und nicht der Abfolge der Geburtstage während des Jahres. Der "12.12.1956" erscheint also logischerweise vor dem "3.1.1967". Mit einigen kleinen Tricks können Sie die Home Home Geburtstagsliste aber dennoch richtig nutzen. Die erste Möglichkeit besteht darin, einen aktuellen Geburtstag durch eine entsprechende Formatierung hervorzuheben: · · · · Markieren Sie die Zellen, in die Sie die Geburtstage eingegeben haben. Wählen Sie das Menü Format-Bedingte Formatierung an. Markieren Sie in der ersten Dropdown-Liste den Eintrag "Formel ist". Geben Sie die folgende Formel ein (ersetzen Sie dabei C5 durch den Bezug der ersten markierten Zelle mit Geburtsdaten): =HEUTE()-DATUM(JAHR(HEUTE());MONAT(C5);TAG(C5))=0 · Klicken Sie auf Format und legen Sie die Formatierung fest, mit der ein anstehender Geburtstag hervorgehoben werden soll. Anbieten würde sich beispielsweise ein roter Zellhintergrund. · Bestätigen Sie die Einstellungen mit Ok und verlassen Sie das Dialogfeld "Bedingte Formatierung". In Zukunft genügt es, die Geburtstagsliste einmal am Tag aufzurufen. Die hervorgehobene Markierung zeigt automatisch, welchem Kunden, Freund oder Verwandten Sie heute gratulieren müssen. Sie können diese Technik noch erweitern, wenn Sie beispielsweise drei Tage vor dem Geburtstag vorgewarnt werden möchten. Fügen Sie dann im Dialog "Bedingte Formatierung" mit Hinzufügen ein weiteres Kriterium hinzu. Wählen Sie eine andere Formatierung aus (beispielsweise einen grünen Hintergrund) und verwenden Sie die folgende Formel: =HEUTE()-DATUM(JAHR(HEUTE());MONAT(C5);TAG(C5))=3 Möchten Sie die Liste dennoch so sortieren, dass die Geburtstage in der richtigen Reihenfolge angezeigt werden, können Sie sich mit einer Zusatzspalte behelfen. In dieser Spalte berechnen Sie ganz einfach mit der folgenden Formel das Geburtstagsdatum im aktuellen Jahr: =DATUM(JAHR(JETZT());MONAT(C5);TAG(C5)) Ersetzen Sie dabei C5 durch die Zelle mit dem ersten Geburtstag und kopieren Sie die Formel in die übrigen Zeilen der Liste. Danach führen Sie eine Sortierung nach dieser Spalte durch und schon haben Sie eine Geburtstagsliste, die Sie beispielsweise ausdrucken und neben den Kalender hängen können. Bevorzugen Sie stattdessen die elektronische Version der Geburtstagsliste, gibt es noch eine interessantere Lösung: Erstellen Sie eine Zusatzspalte, in der für jede Person jeweils der nächste Geburtstag berechnet wird. Nach dem Geburtstag des aktuellen Jahres wird also der Geburtstag des nächsten Jahres berechnet, so dass beim Sortieren der Liste in jedem Fall der nächste anstehende Geburtstag oben steht. Die Formel dazu sieht folgendermaßen aus: =WENN(DATUM(JAHR(HEUTE());MONAT(C5);TAG(C5)) <HEUTE();DATUM(JAHR(HEUTE())+1;MONAT(C5);TAG(C5)); DATUM(JAHR(HEUTE());MONAT(C5);TAG(C5))) Zu guter letzt möchten wir Ihnen noch eine kleine benutzerdefinierte Funktion vorstellen, die Ihnen bei der Altersberechnung behilflich sein kann: Function funcLebensalter(dtGeburtsdatum, _ Home Home Optional dtStichtag) As Integer If IsNull(dtGeburtsdatum) Then funcAltersberechnung = Null Exit Function End If If IsMissing(dtStichtag) Then dtStichtag = Date If DateSerial(Year(dtStichtag), Month(dtGeburtsdatum), _ Day(dtGeburtsdatum)) > dtStichtag Then funcLebensalter = DateDiff("yyyy", dtGeburtsdatum, _ dtStichtag) - 1 Else funcLebensalter = DateDiff("yyyy", dtGeburtsdatum, _ dtStichtag) End If End Function Nachdem Sie die Funktion im VBA-Editor eingegeben haben, können Sie sie in Ihren Tabellen nutzen, um das Alter einer Person auf Basis des Geburtstagsdatums zu berechnen. Dabei wird berücksichtigt, ob der Geburtstag im aktuellen Jahr bereits statt gefunden hat oder nicht. Zum Beispiel (C5 ist die Zelle mit dem Geburtsdatum): =funcLebensalter(C5) Interessant an der Funktion ist der zweite Parameter, den Sie auf Wunsch verwenden können: Standardmäßig wird das Alter auf Basis des aktuellen Datums berechnet, aber Sie können auch einen bestimmten Stichtag angeben. Zum Beispiel: =funcLebensalter(C5;DATWERT("14.9.2002")) Diese Formel liefert Ihnen das Alter der Person am 14.9.2002 (Geburtstdatum in C5). Gefundene Datensaetze automatisch loeschen -----------------------------------------Versionen: Excel 97, 2000 und 2002 Mit den Filterfunktionen von Excel koennen Sie Listen schnell und komfortabel auswerten. Wenige Mausklicks genuegen, um alle Eintraege ausfindig zu machen, die bestimmten Kriterien entsprechen. Bei Bedarf koennen Sie die Fundstellen sogar in einen anderen Bereich kopieren, aber es gibt standardmaessig keine Moeglichkeit, die gefundenen Listenzeilen zu loeschen. Wenn Sie beispielsweise eine Home Home offene Posten-Liste fuehren und alle bezahlten Rechnungen loeschen wollen, muessen Sie diesen Vorgang manuell ausfuehren. Alternativ dazu koennen Sie auch die folgende VBA-Prozedur verwenden, die Excel um die fehlende Funktion zum Loeschen der Fundstellen erweitert: Sub DatensaetzeLoeschen() Antwort = MsgBox("Alle sichtbaren Zeilen loeschen?", _ vbYesNo, "Zeilen loeschen") If Antwort = vbNo Then GoTo Ende Application.ScreenUpdating = False ErsteZeile = ActiveCell.CurrentRegion.Row + 1 ErsteSpalte = ActiveCell.CurrentRegion.Column LetzteZeile = ErsteZeile + _ ActiveCell.CurrentRegion.Rows.Count - 2 LetzteSpalte = ErsteSpalte + _ ActiveCell.CurrentRegion.Columns.Count - 1 Set SichtbarerBereich = Range(Cells(ErsteZeile, _ ErsteSpalte), Cells(LetzteZeile, _ LetzteSpalte)).SpecialCells(xlVisible) AnzahlBereiche = SichtbarerBereich.Areas.Count For Zaehler = 1 To AnzahlBereiche Range(SichtbarerBereich.Areas(1).Address).Delete _ Shift:=xlUp Next Application.ScreenUpdating = True Ende: End Sub Nachdem Sie die Prozedur im VBA-Editor eingegeben haben, koennen Sie sie folgendermassen einsetzen: 1. Definieren Sie einen Filter, so dass in der Liste nur noch die Eintraege angezeigt werden, die Sie loeschen wollen. 2. Klicken Sie auf eine beliebige Zelle in der Liste. Home Home 3. Starten Sie das Makro "DatensaetzeLoeschen" ueber das Dialogfeld EXTRAS-MAKRO-MAKROS. 4. Nachdem die Sicherheitsabfrage mit JA bestaetigt haben, werden die gefundenen Listenzeilen geloescht. 5. Auf dem Bildschirm ist daraufhin nur noch die erste Listenzeile mit den Spaltenueberschriften zu sehen, aber mit DATEN-FILTER-ALLE ANZEIGEN blenden Sie den Rest der Liste wieder ein. Kurz zur Funktionsweise des Makros: Nachdem die Sicherheitsabfrage mit JA beantwortet wurde, ermittelt die VBA-Prozedur zunaechst einmal die erste und letzte Zeile sowie die erste und letzte Spalte des Datenbereiches. Anschliessend werden alle sichtbaren Zellen des Datenbereiches markiert. Da es sich um ein Filterergebnis handelt, sind zwischen den sichtbaren Zeilen die nicht passenden Eintraege ausgeblendet worden und die Markierung besteht dementsprechend aus mehreren Bereichen. Die Anzahl der Bereiche wird daraufhin mit "Areas.Count" ermittelt und eine For-Next-Schleife loescht jeden Bereich mit "Delete". Geschützte Zellen per VBA bearbeiten Können gesperrte Zellen eines geschützten Tabellenblatts mit einem VBA-Makro manipuliert werden? Ohne weiteres ist das nicht möglich. Aber es gibt einen Trick, mit dem der Anwenderschutz bestehen bleibt, während VBA-Prozeduren uneingeschränkten Zugriff auf die Zellen des geschützten Blatts erhalten. Der Trick besteht darin, die "Protect"-Methode zusammen mit dem Parameter "UserInterfaceOnly" aufzurufen - zum Beispiel: ActiveSheet.Protect UserInterfaceOnly:=True Wenn Sie diese Zeile in Ihrem Makrocode einfügen, können Sie im nachfolgenden Programmcode in der gewohnten Weise auf das Tabellenblatt zugreifen, so als wäre es gar nicht geschützt. Für den Anwender ist das Blatt jedoch weiterhin geschützt. Grafiken in Excel bearbeiten Versionen: Excel 97, 2000 und 2002 FRAGE: Ich möchte ein eingescanntes Foto in ein Tabellenblatt einfügen. Im Prinzip klappt das problemlos. Nur hat das Foto einen Rahmen, den ich gerne entfernen möchte. Wenn ich jedoch die Eckpunkte der Grafik mit der Maus verschiebe, ändert sich nur die Größe, - das Foto selbst bleibt gleich. Muss ich immer erst ein Grafikprogramm bemühen, um Bilder entsprechend vorzubereiten oder kann ich das auch in Excel erledigen? K. Wegener Home Home ANTWORT: Wenn Sie ein Foto erst einmal eingescannt oder direkt von einer Digitalkamera überspielt haben, können Sie die weitere Bearbeitung komplett in Excel erledigen. Natürlich ersetzt Excel kein Grafikprogramm mit Effekt- und Retuschewerkzeugen. Dennoch sind die Bearbeitungsfunktionen recht ansehnlich. So lösen Sie auch Ihr Problem mit den unerwünschten Rahmen. Dafür nutzen Sie das "Zuschneide-Tool" aus der Symbolleiste Grafik. Wenn diese Symbolleiste nach einem Mausklick auf die Grafik nicht angezeigt wird, blenden Sie sie mit dem Befehl Ansicht-Symbolleisten-Grafik ein. Etwa in der Mitte der Symbolleiste finden Sie das Symbol Zuschneiden. Aktivieren Sie es per Mausklick und zeigen Sie dann auf einen der Rahmenpunkte der Grafik. Der Mauszeiger nimmt darüber dieselbe Form an wie das Symbol in der Symbolleiste. Wenn Sie den Rahmenpunkt jetzt mit der Maus in Richtung Grafikmittelpunkt ziehen, entfernt Excel den entsprechenden Bildbereich. Am besten sind dafür die mittleren Rahmenpunkte geeignet, da sie eine beliebige Größenänderung erlauben. Ein "Zuschneiden" der Eckpunkte ist nur dann sinnvoll, wenn der zu entfernende Bereich symmetrisch zu den Bildproportionen ist. Probieren Sie es aus, dann werden Sie merken, was damit gemeint ist. Um den Zuschneidemodus zu beenden, klicken Sie erneut auf das Symbol Zuschneiden in der Grafik-Symbolleiste. Die Rahmenpunkte der Grafik funktionieren dann wieder in der herkömmlichen Art und Weise: Sofern Sie die Eckpunkte mit der Maus ziehen, ändern Sie die Größe unter Beibehaltung des Seitenverhältnisses; sofern Sie einen der Rahmenmittelpunkte ziehen, stauchen oder dehnen Sie die Grafik in der entsprechenden Richtung. Große Tabellenbereiche komfortabel markieren Versionen: Excel 97, 2000 und 2003 Wenn Sie einen größeren Tabellenausschnitt mit der Maus auswählen möchte, wird die Markierung mit hoher Geschwindigkeit erweitert, sobald der rechte oder untere Fensterrand erreicht ist. Das ganze lässt sich schwer kontrollieren, denn auch der Versuch, die Markierung zu verkleinern, läuft wieder mit hoher Geschwindigkeit ab. Für die Markierung von umfangreichen Bereichen gibt es daher drei empfehlenswerte Techniken: · · · Home Wenn Sie die Markierung im sichtbaren Tabellenausschnitt nur langsam spalten- oder zeilenweise erweitern, erhöht sich die Geschwindigkeit nur geringfügig, sobald Sie an den Fensterrand gelangt sind. So lässt sich sehr genau kontrollieren, welche Zellen ausgewählt werden. Eine wenig bekannte Technik sieht folgendermaßen aus: Klicken Sie auf die Zelle in der linken oberen Ecke der gewünschten Markierung. Dann verwenden Sie die Bildlaufleisten, um in die rechte untere Ecke der gewünschten Markierung zu scrollen. Schließlich drücken Sie die Umschalt-Taste und halten sie gedrückt, während Sie in die rechte untere Ecke der Markierung klicken. Sollten Sie den genauen Bezug der Zelle in der rechten unteren Ecke der Markierung kennen, geht es auch folgendermaßen: Klicken Sie auf die Zelle in der linken oberen Ecke der Markierung. Dann drücken Sie F5, geben den Bezug der Zelle in der rechten Home unteren Ecke der gewünschten Markierung ein, drücken die Umschalt-Taste und halten sie gedrückt, während Sie auf Ok klicken. Größte Werte aus einem Bereich ermitteln Versionen: Excel 97, 2000 und 2002 FRAGE: Ich möchte umfangreiche Datenmengen schnell auswerten. Gibt es beispielsweise eine schnelle Methode, die fünf größten Werte aus einem bestimmten Bereich zu ermitteln? J. Ulrich ANTWORT: Dieses Problem läßt sich über die Tabellenfunktion KGRÖSSTE() lösen, also ohne jegliche Programmierung. Nehmen wir einmal an, Sie haben Daten im Bereich A1:A100 eingegeben. Jetzt möchten sie die fünf höchsten Werte ermitteln. Geben Sie dazu die folgenden Tabellenfunktionen ein: =KGRÖSSTE($A$1:$A$100;1) =KGRÖSSTE($A$1:$A$100;2) =KGRÖSSTE($A$1:$A$100;3) =KGRÖSSTE($A$1:$A$100;4) =KGRÖSSTE($A$1:$A$100;5) Im ersten Argument geben Sie den Bereich an, aus dem die Max-Werte ermittelt werden sollen. Im zweiten Argument geben Sie den Rang an. Noch ein kleiner Tip: Natürlich gibt es auch eine Tabellenfunktion, die die kleinsten Werte aus einem Bereich ermittelt. Sie heißt entsprechend: KKLEINSTE() Inhaltsverzeichnis für Arbeitsmappen automatisch anlegen Versionen: Excel 97, 2000 und 2002/XP Bei Arbeitsmappen mit sehr vielen Tabellen geht schnell mal der Überblick verloren. So muss die gewünschte Tabelle erst in der ganzen Arbeitsmappe gesucht werden. Eine Hilfe dazu möchte ich Ihnen in dieser Kolumne vorstellen. Dabei wird eine neue Tabelle mit den Namen "Inhalt" ganz zu Beginn der Arbeitsmappe eingefügt. Danach werden die Namen aller Tabellen, die sich in der Arbeitsmappe befinden, nacheinander in diese Tabelle geschrieben. Direkt im Anschluss an einen solchen Eintrag, wird die jeweilige Zelle mit einem Hyperlink belegt, so dass Sie mit einem einzigen Mausklick auf die gewünschte Tabelle wechseln können: 1. Drücken Sie die Tastenkombination Alt+F11, um in die Entwicklungsumgebung zu gelangen. 2. Wählen Sie aus dem Menü Einfügen den Befehl Modul. Erfassen Sie folgendes Makro: Sub MappenInhaltZusammenstellen() Dim Tabelle As Worksheet Dim i As Integer Worksheets.Add.Move before:=Worksheets(1) ActiveSheet.Name = "Inhalt" Cells(2, 2).Value = "Enthaltene Blätter" Home Home i=3 For Each Tabelle In ActiveWorkbook.Worksheets If Tabelle.Name <> "Inhalt" Then Cells(i, 2).Value = Tabelle.Name Tabelle.Hyperlinks.Add Anchor:=Cells(i, 2), _ Address:="", SubAddress:= Tabelle.Name & _ "!A1", ScreenTip:="Hyperlink klicken", _ TextToDisplay:=Tabelle.Name i=i+1 End If Next Tabelle End Sub Fügen Sie im ersten Schritt eine neue Tabelle über die Methode "Add" ein. Verschieben Sie diese neue Tabelle über die die Methode "Move" an den Beginn Ihrer Arbeitsmappe. Geben Sie dabei die genaue Position über das Auflistungsobjekt "Worksheets" und dem Index "1" an. Geben Sie der neu eingefügten Tabelle über die Eigenschaft "Name" den Namen "Inhalt". Erfassen Sie jetzt eine Überschrift für diese Tabelle, indem Sie das Auflistungsobjekt "Cells" ansprechen und dabei die genau Zeilen- (erstes Argument) und Spaltenposition (zweites Argument) angeben. Durchlaufen Sie danach eine Schleife, mit deren Hilfe Sie jede einzelne Tabelle der Arbeitsmappe ansprechen und die Namen der einzelnen Tabelle in die Tabelle "Inhalt" übertragen. Im Anschluss daran werden die eingetragenen Tabellennamen über die Methode "Add" verlinkt, die Sie auf das Objekt "Hyperlinks" anwenden. So ist dann der direkte Sprung auf die gewünschte Tabelle möglich. Integrierte Dialoge von Excel Versionen: Excel 97, 2000 und 2002 Bei der Programmierung mit Dialogen müssen Sie nicht unbedingt eigene Dialoge erstellen. Oft reicht es auch aus, wenn Sie bereits vorhandene Dialoge in Excel für Ihre eigenen Projekte nutzen. So müssen Sie das Rad nicht neu erfinden. Der am häufigst eingesetzte integrierte Dialog ist der Öffnen-Dialog. Normalerweise können Sie ExcelArbeitsmappen auch direkt mit einem Makro öffnen, ohne den Öffnen-Dialog einzusetzen. Stehen jedoch mehrere Arbeitsmappen zur Auswahl, zwischen denen sich der Anwender entscheiden muss, verwenden Sie den integrierten Öffnen-Dialog und lassen den Anwender die gewünschte Arbeitsmappe auswählen. Der Vorteil liegt auf der Hand: Sie brauchen sich um bestimmte Dinge, wie das Anzeigen der Arbeitsmappen im Dialog oder auch das Markieren und Öffnen der Mappen, nicht selbst zu kümmern. Die gesamte Funktionalität ist schon vorhanden: Sub DialogÖffnen() Dim b As Boolean b = Application.Dialogs(xlDialogFindFile).Show MsgBox b End Sub Home Home Definieren Sie zuerst einmal eine Variable vom Typ Boolean, um zu ermitteln, ob eine Datei geöffnet worden ist oder nicht. Wurde über den Öffnen-Dialog eine Datei geöffnet, steht in der Variablen b der Wert Wahr. Wurde dagegen im Dialog Öffnen auf die Schaltfläche Abbrechen geklickt, meldet die Variable b den Wert Falsch. Ein weiteres Beispiel ist der Dialog Suchen, den Sie wie folgt aufrufen: Sub DialogSuchen() Application.Dialogs(xlDialogFormulaFind).Show End Sub Tipp: Wenn Sie sich informieren möchten, welche integrierten Dialoge es in Excel gibt, und wie sie heißen, rufen Sie in der Entwicklungsumgebung den Objektkatalog auf und schauen unter der Rubrik "xlBuiltinDialog" nach. Internet-Tabellen ganz einfach übernehmen Versionen: Excel 97, 2000 und 2002/XP Zinssätze, Währungs- und Aktienkurse, Preislisten... Es gibt nichts, was Sie im Internet nicht finden können. Interessant wäre eine schnelle und komfortable Methode, derartige Informationen aus dem Internet Explorer direkt und ohne Umwege zur weiteren Bearbeitung nach Excel zu übernehmen. Eine Drag & Drop-Technik in Excel 2000/2002 hilft weiter: 1. Starten Sie Excel und öffnen bzw. erstellen Sie die Arbeitsmappe für die Internetdaten. 2. Markieren Sie im Internet Explorer die Tabelle, die Sie nach Excel übernehmen möchten. 3. Bewegen Sie den Mauszeiger über die Markierung, drücken Sie die linke Maustaste und halten Sie sie gedrückt, während Sie die Markierung in die Taskleiste auf das Excel-Symbol ziehen. 4. Warten Sie, bis sich das Excel-Fenster geöffnet hat, bewegen Sie den Mauszeiger über die linke obere Zelle des Zielbereichs und lassen Sie die Maustaste los. Die Daten aus dem Explorer erscheinen daraufhin mit allen Formatierungen in Ihrer Excel-Arbeitsmappe. Komfortable Navigation mit der Excel-Lupe Versionen: Excel 97, 2000 und 2002 Excel bietet reichlich Platz für Ihre Daten. So sind Tabellen mit mehreren hundert Zeilen und entsprechend vielen Spalten keine Seltenheit. Doch je größer ein Tabellenmodell wird, desto schwieriger wird es auch, schnell zum gerade benötigten Bereich zu springen. Wenn Sie den Zoom-Faktor verkleinern, können Sie die Zahlen nicht mehr lesen. Und wenn Sie mit der Originalgröße arbeiten, dauert das Blättern ungebührlich lange. Ein Ausweg aus dem Dilemma ist die Lupenfunktion, die wir in diesem Beitrag vorstellen. Damit teilen Sie den Excel-Bildschirm in zwei Fenster auf. In dem einen Fenster sehen Sie Ihre Tabelle in einer verkleinerten Darstellung, so dass Sie sich schnell zu einem bestimmten Zellbereich bewegen können. In dem anderen Fenster erscheinen die gerade markierte Zelle sowie der umgebende Bereich in der Home Home Originalgröße. So können Sie bequem die Zellinhalte lesen und/oder Eingaben vornehmen. Um die Excel-Lupe einzurichten, gehen Sie folgendermaßen vor: · · Legen Sie eine neue Excel-Datei an und wechseln Sie mit Alt+F11 in den Visual Basic-Editor. Öffnen Sie mit Einfügen-Klassenmodul das Fenster eines neuen Klassenmoduls. Über das Klassenmodul definieren Sie eine neue Objektklasse mit speziellen Eigenschaften und Methoden. So können Sie später das aktuelle Tabellenblatt als Objekt an die Klasse übergeben und mit den Eigenschaften und Methoden des Klassenmoduls manipulieren. · Weisen Sie der neuen Klasse zuerst einen eindeutigen Namen zu, indem Sie im Eigenschaftenfenster des Visual Basic-Editors im Feld "(Name)" die Bezeichnung "clsLupe" eingeben. · Danach setzen Sie den Cursor wieder in das Codefenster des Klassenmoduls und deklarieren eine Objektvariable namens "objBlatt": Public WithEvents objBlatt As Worksheet · Beachten Sie den Zusatz "WithEvents"! Er erlaubt die Überwachung von Ereignissen, die von dem zugrunde liegenden Objekt, in diesem Fall von einem Tabellenblatt, ausgelöst werden. Mit den weiteren Codezeilen des Klassenmoduls bestimmen Sie genau, was bei einem bestimmten Ereignis passieren soll. · Unter der Deklarationszeile legen Sie drei Konstanten fest. Sie bestimmen a) die Breite des Lupenfensters, b) die Höhe des Lupenfensters und c) die Hintergrundfarbe, mit der die gerade markierte Zelle hervorgehoben wird: Const LUPENBREITE As Long = 200 Const LUPENHOEHE As Long = 200 Const CURSORFARBE = 36 · Wenn Sie beim Praxiseinsatz feststellen, dass das Fenster zu breit oder hoch ist oder dass die Hintergrundfarbe nicht zu Ihren eigenen Zellformatierungen passt, können Sie diese Werte individuell anpassen. · In die nächsten drei Zeilen tragen Sie Variablendeklarationen ein, die von mehreren Prozeduren des Klassenmoduls benötigt werden. Sie müssen deshalb auf Modulebene deklariert werden. Dim objZoomfenster As Window Dim objAlteAuswahl As Range Dim varZellfarbe As Variant · Es folgt die Prozedur, die beim Aufruf/Initialisieren der Klasse ausgeführt wird: Private Sub Class_Initialize() Dim objOriginal As Window Dim lngExcelBreite As Long lngExcelBreite = Application.UsableWidth Set objOriginal = ActiveWindow With objOriginal .WindowState = xlNormal .Left = 2 .Top = 2 Home Home .Width = lngExcelBreite-LUPENBREITE .Height = Application.UsableHeight .NewWindow End With Set objZoomfenster = ActiveWindow With objZoomfenster .WindowState = xlNormal .Caption = "Blattlupe" .Left = lngExcelBreite-LUPENBREITE .Top = 2 .Width = LUPENBREITE .Height = LUPENHOEHE .Zoom = 100 End With objOriginal.Activate SetzeLupe Selection End Sub Der Prozedurcode dient in erster Linie dazu, die Fenster für das Tabellenblatt und den Lupenbereich anzuordnen. Beim Lupenfenster handelt es sich um ein neues Fenster der aktuellen Mappe, das oben rechts platziert wird und auf einen Zoomfaktor von 100% eingestellt wird. Beachten Sie noch die letzte Zeile "SetzeLupe Selection". Damit rufen Sie eine Hilfsprozedur auf, die den im Lupenfenster angezeigten Bereich gleich an die aktuelle Zellmarkierung im normalen Tabellenfenster anpasst. Der genaue Prozedurcode folgt später. · Darunter fügen Sie die Prozedur ein, die beim Beenden der Klasse ausgeführt wird: Private Sub Class_Terminate() objZoomfenster.Close If Not objAlteAuswahl Is Nothing Then objAlteAuswahl.Interior.ColorIndex = varZellfarbe End If Application.ScreenUpdating = True End Sub · · Home Die Prozedur schließt das Fenster mit der Blattlupe. Anschließend wird die Hintergrundfarbe der zuletzt markierten Zelle wieder auf ihren ursprünglichen Zustand gesetzt (entsprechende Vorarbeit leistet wiederum die Hilfsprozedur "SetzeLupe"). Und zuletzt aktualisieren Sie die Bildschirmanzeige. Mit der nächsten Prozedur steuern Sie die Aktualisierung des Lupenfensters. Darin soll immer die Umgebung der im anderen Fenster markierten Zelle angezeigt werden. Der programmiertechnische Aufwand ist erfreulich gering, da Sie auf die eingangs deklarierte Objektvariable zurückgreifen können, die dank "WihtEvents" alle Ereignisse eines "Worksheet"Objekts (eines Tabellenblatts) zur Verfügung stellt. So lautet die Prozedur für die Lupenaktualisierung: Home Private Sub objBlatt_SelectionChange_ (ByVal Target As Range) SetzeLupe Target End Sub · Nun fehlt nur noch die schon häufiger herangezogene Hilfsprozedur "SetzeLupe": Private Sub SetzeLupe(objAuswahl As Range) Dim intZeile As Integer, intSpalte As Integer If Not objAlteAuswahl Is Nothing Then objAlteAuswahl.Interior.ColorIndex = varZellfarbe End If Set objAlteAuswahl = objAuswahl.Cells(1, 1) If ActiveWindow.Caption <> objZoomfenster.Caption Then varZellfarbe = _ objAuswahl.Cells(1, 1).Interior.ColorIndex objAuswahl.Cells(1, 1).Interior.ColorIndex = _ CURSORFARBE intZeile = objAuswahl.Row intSpalte = objAuswahl.Column With objZoomfenster If intZeile > 2 Then .ScrollRow = intZeile-2 Else .ScrollRow = 1 End If If intSpalte > 1 Then .ScrollColumn = intSpalte-1 Else .ScrollColumn = 1 End If End With Application.ScreenUpdating = True objAuswahl.Select End If End Sub Die erste If-Abfrage prüft, ob ein Objekt namens "objAlteAuswahl" gesetzt ist. Wenn das der Fall ist, wurde bereits mit dem Lupenfenster gearbeitet. Dann muss bei einer neuen Zellmarkierung die Hintergrundfarbe der vorherigen Zelle wieder hergestellt werden. Danach speichert die Prozedur die momentane Auswahl in der global verfügbaren Variablen "objAlteAuswahl". Mit der zweiten If-Abfrage stellen Sie fest, ob die Bearbeitung im Original- oder im Lupenfenster erfolgt. Wenn Sie ohnehin in der vergrößerten Darstellung arbeiten, muss die Ansicht nicht weiter angepasst werden. Nur wenn Sie in der Originaltabelle eine neue Zelle markieren, hebt die Prozedur die Auswahl farblich hervor und merkt sich die bisherige Farbzuweisung in der Variablen "varZellfarbe". Home Home Im folgenden With-Block passen Sie mit ScrollRow- und ScrollColumn-Anweisungen den sichtbaren Zellbereich im Lupenfenster an. Damit es nicht zu Fehlern kommt, testen If-Abfragen, ob Sie sich bereits am linken oder oberen Rand der Tabelle befinden. Normalerweise ist die Blattlupe immer so eingestellt, dass zwei Zeilen über und eine Spalte links neben der aktuellen Zelle zu sehen sind. Der Rest der Prozedur bereinigt lediglich die Bildschirmanzeige. Die Objektklasse für die Lupenfunktion ist damit fertig gestellt. Sie brauchen jetzt nur noch zwei Prozeduren, die die Funktion ein- bzw. ausschalten. Dafür legen Sie mit dem Befehl Einfügen-Modul ein neues Standardmodul an. Füllen Sie das zugehörige Codefenster mit folgenden Zeilen: Dim objZoom As New clsLupe Sub ZoomStart() Set objZoom.objBlatt = ActiveSheet End Sub Sub ZoomEnde() Set objZoom = Nothing End Sub Zu Beginn stellen Sie mit einer globalen Objektvariablen einen Verweis auf die "Lupenklasse" her. In der Prozedur "ZoomStart" nutzen Sie die Eigenschaft "objBlatt", um Excel mitzuteilen, welche Ereignisse überwacht werden sollen - hier also die Ereignisse des aktiven Blattes. Wenn Sie die Lupenfunktion nicht mehr benötigen, rufen Sie die Prozedur "ZoomEnde" auf. Sie setzt die Objektvariable auf "Nothing", womit die Klasse terminiert wird. Beenden Sie den Visual Basic-Editor und speichern Sie die Datei mit dem eben eingefügten Programmcode. In späteren Excel-Sitzungen müssen Sie dann nur dafür sorgen, dass diese Datei geöffnet ist. Anschließend können Sie die Lupenfunktion in jeder anderen Arbeitsmappe nutzen. Konkret setzen Sie die Lupenfunktion folgendermaßen ein: 1. Sorgen Sie - wie bereits erwähnt - dafür, dass die Datei mit der "Lupenklasse" geöffnet ist. 2. Öffnen Sie die Arbeitsmappe, in der Sie die Navigation mit Hilfe der Excel-Lupe vereinfachen wollen. Verringern Sie, wenn das noch nicht der Fall ist, den Zoom-Faktor, damit möglichst viele Zellen sichtbar sind. 3. Drücken Sie Alt+F8, um das Dialogfeld Makro anzuzeigen. In der Liste verfügbarer Makros finden Sie auch die beiden Prozeduren zum Ein- oder Ausschalten der Lupenfunktion. Doppelklicken Sie je nach Bedarf auf "ZoomStart" oder "ZoomEnde". Damit die Excel-Lupe keinen Fehler verursacht, muss der Blattschutz der aktuellen Tabelle ausgeschaltet sein! Tipp: Um den Zugriff auf das Lupenfenster zu beschleunigen, richten Sie eine neue Symbolleiste mit zwei Schaltflächen ein, denen Sie die oben genannten Makros zuweisen. Danach steht Ihnen die Blattlupe direkt per Mausklick zur Verfügung. Home Home Komfortabler Umgang mit großen Markierungen Versionen: Excel 97, 2000 und 2002 Wenn Sie einen umfangreichen Bereich in einer Tabelle markiert haben, ist die nachträgliche Überprüfung der ausgewählten Zellen etwas mühselig, wenn Sie die aktuelle Markierung erhalten möchten. Eine Möglichkeit besteht im Einsatz der Rollbalken, aber es gibt auch wenig bekannten Shortcut: drücken Sie Strg+Umsch+', um im Uhrzeigersinn nacheinander in die vier Ecken der aktuellen Markierung zu springen. Kopf- und Fußzeilentricks für Excel Versionen: Excel 97, 2000 und 2002 Viele Fragen, die uns bei der Helpline von SmartTools Publishing erreichen, drehen sich rund um das Thema Kopf- und Fußzeilen. Im folgenden einige Tipps zur Lösung der häufigsten Probleme: Kompletten Pfad einer Arbeitsmappe ausgeben Die Ausgabe des Speicherortes einer Excel-Datei ist ab Version 2002 endlich über den speziellen Platzhalter "&[Pfad]" möglich. In Excel 97 und 2000 müssen Sie sich noch mit einigen Tricks behelfen. Am komfortabelsten dabei ist der Einsatz des kostenlosen "Jwalk Pfadinfo-Assistenten", den Sie unter der folgenden Adresse herunterladen können: http://www.add-in-world.com/katalog/pfadinfo2001/ Nach der Installation steht Ihnen eine neue Funktion zur Verfügung, über die Sie den aktuellen Pfad automatisch in die Kopf- oder Fußzeile einfügen lassen können. Start-Seitenzahl bestimmen Die Seitennummerierung, die Sie über das Platzhalterzeichen "&[Seite]" festlegen, beginnt in Excel immer mit "1". Eine einfache Möglichkeit, um wie in Word eine beliebige andere Start-Seitenzahl zu verwenden (um beispielsweise mehrere Arbeitsmappen zusammenzuführen), gibt es leider nicht. Aber Sie können ein undokumentiertes Feature von Excel nutzen, denn in der Kopf- und Fußzeilendefinition ist die Verwendung von Plus- und Minuszeichen erlaubt. Soll beispielsweise die Nummerierung mit "10" beginnen, geben Sie ein: &[Seite]+10 Möchten Sie die ersten drei Seiten zwar ausdrucken, die Nummerierung aber erst auf der vierten Seite mit "1" beginnen verwenden Sie die folgende Definition: &[Seite]-3 Achtung: Leider funktioniert dieser Tipp nicht in Excel 2002! Kopf- und Fußzeile für die komplette Arbeitsmappe Wenn Sie das Menü Datei-Seite einrichten anwählen und die gewünschten Kopf- und Fußzeilen definieren, wirkt sich das immer nur auf das aktuelle Tabellenblatt aus und nicht wie viele Anwender Home Home meinen, auf die komplette Arbeitsmappe. Möchten Sie auf jedem Blatt dieselben Kopf- und Fußzeilen verwenden, nutzen Sie einfach den folgenden Trick: 1. Wechseln Sie auf das Tabellenblatt mit der Kopf- und Fußzeile, die Sie für die komplette Arbeitsmappe übernehmen möchten. 2. Drücken Sie die Strg-Taste und halten Sie sie gedrückt, während Sie nacheinander auf die auf die Register der Tabellen klicken, die dieselbe Kopf- und Fußzeile erhalten sollen. 3. Wählen Sie das Menü Datei-Seite einrichten an und bestätigen Sie einfach mit Ok. 4. Excel übernimmt daraufhin die Kopf- und Fußzeilen der aktuellen Tabelle für alle markierten Blätter. Kopf- und Fußzeilen-Standard definieren Sie haben es satt, nach dem Anlegen einer neuen Arbeitsmappe, jedes Mal wieder die gleiche Kopf- oder Fußzeile definieren zu müssen? Mit wenig Aufwand erreichen Sie, dass neue Arbeitsmappen in Zukunft immer sofort die gewünschten Kopf- und Fußzeilen aufweisen: 1. Legen Sie eine neue Arbeitsmappe an und passen Sie die Kopf- und Fußzeilen an. Entweder für die komplette Datei oder auf Wunsch auch für jedes Blatt individuell. 2. Sichern Sie die Datei unter dem Namen MUSTER.XLT im Verzeichnis XLSTART. Wichtig dabei: Markieren Sie vorher im Speichern-Dialog als Dateityp den Eintrag "Mustervorlage". Wenn Sie danach eine neue Datei anlegen, erstellt Excel eine Kopie der MUSTER.XLT und Sie können in Ihrer Arbeitsmappe sofort mit den vordefinierten Kopf- und Fußzeilen arbeiten. Laufende Summe innerhalb einer Zelle Versionen: Excel 97, 2000 und 2002 Für viele Anwendungsbereiche wäre es nützlich, wenn Excel eine laufende Summe innerhalb einer bestimmten Zelle führen könnte. Wenn also beispielsweise die Zelle C10 den Wert 100 enthält und Sie hier noch einmal die Zahl 100 eingeben, sollte nach Return automatisch der Wert 200 erscheinen. Standardmäßig hat Excel leider keine entsprechende Funktion zu bieten, aber mit Hilfe entsprechender VBA-Prozeduren können Sie sie "nachbauen". · Öffnen Sie die Arbeitsmappe, in der Sie eine oder mehrere laufende Summe innerhalb einer Zelle führen wollen. · Wechseln Sie mit Alt+F11 in die VBA-Entwicklungsumgebung und fügen Sie ein neues Modul zur aktuellen Arbeitsmappe hinzu. · Geben Sie hier die folgenden Prozeduren ein: Sub procLaufendeSummeErstellen() Dim intReturn As Integer With ActiveCell If .Comment Is Nothing Then .AddComment Else intReturn = MsgBox("Die Zelle enthält bereits " & _ "einen Kommentar. Möchten Sie ihn überschreiben?", _ vbYesNo + vbQuestion, "SmartTools Excel Weekly") If intReturn = vbNo Then Exit Sub Home Home End If .Comment.Text "LS_" & Str(ActiveCell.Value) End With End Sub Sub procLaufendeSummeLoeschen() With ActiveCell If .Comment Is Nothing Then Exit Sub .Comment.Delete End With End Sub · Suchen Sie im Projekt-Explorer nach dem Namen Ihrer Arbeitsmappe und dann in der Kategorie "Microsoft Excel Objekte" nach dem Namen der Tabelle für die laufenden Summen. · Wenn Sie den Tabellennamen per Doppelklick auswählen, öffnet Excel automatisch das Modul zu dieser Tabelle. Hier geben Sie die folgende Prozedur ein: Private Sub Worksheet_Change(ByVal Target As Range) Dim strAlteNotiz As String Dim lngAlterWert As Long With Target If .Comment Is Nothing Then Exit Sub If Left(.Comment.Text, 3) = "LS_" Then strAlteNotiz = .Comment.Text lngAlterWert = Val(Right(strAlteNotiz, _ Len(strAlteNotiz) - 3)) Application.EnableEvents = False .Value = .Value + lngAlterWert .Comment.Text "LS_" & Str(.Value) Application.EnableEvents = True End If End With End Sub Sie können die Arbeitsmappe nun mit Strg+S speichern, die VBA-Entwicklungsumgebung schließen und nach Excel zurückkehren. Um nun die laufende Summe innerhalb einer (oder mehrerer Zellen) einzusetzen, gehen Sie folgendermaßen vor: Home Home 1. Klicken Sie auf die Zelle, in der Sie die laufende Summe führen möchten. 2. Rufen Sie das Menü Extras-Makro-Makros auf, markieren Sie den Eintrag "procLaufendeSummeErstellen" und klicken Sie auf Ausführen. Wiederholen Sie diesen Schritt mit jeder Zelle, in der eine laufende Summe geführt werden soll. 3. Die Arbeitsmappe ist damit fertig eingerichtet. Sobald Sie einen Wert in eine der im zweiten Schritt markierten Zellen eingeben, wird er zum aktuellen Zellinhalt hinzuaddiert. Um nachträglich zusätzliche Zellen für eine laufende Summe zu verwenden, führen Sie einfach das Makro "procLaufendeSummeErstellen" aus, während die entsprechende Zelle markiert ist. Um zu verhindern, dass eine laufende Summe in einer Zelle weitergeführt wird, klicken Sie diese Zelle an und starten das Makro "procLaufendeSummeLoeschen". Kurz zur Funktionsweise unseres Tricks: Im ersten Schritt wird das erwähnte Makro für jede Zelle aufgerufen, in dem eine laufende Summe geführt werden soll. Dabei wird dieser Zelle eine Notiz zugewiesen, die mit dem Kürzel "LS_" beginnt. Direkt hinter dem Kürzel erscheint der augenblicklich in die Zelle eingetragene Wert. Enthält die Zelle beispielsweise den Wert 100, weist die Prozedur eine Notiz mit dem Inhalt "LS_100" zu. Das Herzstück des Tricks ist die Prozedur "Worksheet_Change". Sie wird immer dann aufgerufen, wenn Sie den Inhalt einer Zelle ändern. In diesem Fall prüft sie dann, ob die Zelle eine Notiz enthält, die mit den Zeichen "LS_" beginnt. Ist das nicht der Fall, passiert nichts; andernfalls wird der alte Zellinhalt anhand des zweiten Teils der Notiz ermittelt, zu der neuen Eingabe addiert und das Ergebnis als neuer Inhalt in die Zelle geschrieben. Damit die laufende Summe auch danach noch funktioniert, muss der Inhalt der neue Wert natürlich auch wieder in die Notiz zurückgeschrieben werden. Beachten Sie übrigens die Anweisung "Application.EnableEvents", mit deren Hilfe wir vor dem Einfügen des neuen Wertes in die aktuelle Zelle das Auslösen von Ereignissen in Excel unterbinden. Andernfalls würde das Setzen des neuen Wertes durch unser Makros wieder das "Change"-Ereignis auslösen und das Makro würde sich in eine Endlosschleife begeben. Sofort nach der Änderung werden die Ereignisse wieder aktiviert. Das Makro zum Entfernen der laufenden Summe ist recht kurz, da lediglich die Zellnotiz mit der entsprechenden Kennzeichnung gelöscht werden muss. Jede künftige Änderung in der Zelle bleibt ohne folgen, weil nur eine Notiz mit dem Kürzel "LS_" die laufende Summe auslösen kann. Laufwerke auslesen in VBA Sub Show_all_Drives() '(c) ramses Dim myFSO As Object, myDrv As Object, drvCount, drvStr As String, vName As String, drvTyp As String Set myFSO = CreateObject("Scripting.FileSystemObject") Set drvCount = myFSO.Drives On Error Resume Next drvStr = "" For Each myDrv In drvCount Debug.Print myDrv.DriveLetter Select Case myDrv.DriveType Case 0: drvTyp = "Unknown" Case 1: drvTyp = "Removable" Case 2: drvTyp = "Fixed" Case 3: drvTyp = "Network" Home Home Case 4: drvTyp = "CD-ROM" Case 5: drvTyp = "RAM Disk" End Select drvStr = drvStr & drvTyp & ": " & myDrv.DriveLetter & " - " If myDrv.DriveType = 3 Then vName = myDrv.ShareName Else vName = myDrv.VolumeName End If drvStr = drvStr & vName & vbCrLf Next MsgBox drvStr End Sub Kann gebraucht werden um alle Laufwerke auszulesen und damit weiter Aktionen zu verbinden. Leere Zelle in einem Bereich finden Versionen: Excel 97, 2000 und 2002 FRAGE: Je umfangreicher eine Tabelle, desto schwieriger ist es, den Überblick zu wahren. Ich möchte zum Beispiel immer wieder feststellen, ob es in einem bestimmten Bereich noch eine leere Zelle gibt. Kann man das über ein Makro lösen? F. Jansen ANTWORT: Verwenden Sie für diese Aufgabenstellung das folgende kleine Makro: Sub ErsteLeereZelle() Dim Bereich As Range Dim Zelle As Range Set Bereich = Range("B3:O120") For Each Zelle In Bereich If Zelle.Value = "" Then MsgBox "Erste leere Zelle " _ & Zelle.Address: Zelle.Select Next Zelle End Sub Der Bereich B3:O120 wird nun Zelle für Zelle durchlaufen - der Mauszeiger stoppt an der ersten gefundenen leeren Zelle. Letztes Speicherdatum in Zelle schreiben Versionen: Excel 97, 2000 und 2002 FRAGE: Wie kann ich dafür sorgen, daß beim Speichern einer Arbeitsmappe das Speicherdatum in einer Zelle hinterlegt wird? M. Schuder Home Home ANTWORT: Sie können dafür sorgen, daß beim Speichern der Datei das Datum in Zelle A1 ausgeben wird. Dazu folgende Vorgehensweise: 1. Drücken Sie die Tastenkombination Alt+F11, um in die Entwicklungsumgebung zu gelangen. 2. Führen Sie einen Doppelklick auf den Eintrag "DieseArbeitsmappe" im Project-Explorer durch 3. Geben Sie das folgende Ereignis in den Codebereich ein: Private Sub Workbook_BeforeSave(ByVal _ SaveAsUI As Boolean, Cancel As Boolean) Range("A1").Value = Date & " " & Time End Sub In Zukunft wird automatisch beim Speichern der Arbeitsmappe das aktuelle Datum (der Speicherung) in die Zelle A1 geschrieben. Lineare Gleichungssysteme Versionen: Excel 97, 2000 und 2002/XP FRAGE: Excel bietet ja Tabellenfunktionen für die unterschiedlichsten Aufgabenbereiche. Im Moment stehe ich aber vor einem Problem, für das es anscheinend keine spezielle Funktion gibt. Ich möchte ein Gleichungssystem mit mehreren Unbekannten lösen. Ein Beispiel: · · · x + 4y + z = 7 3x + 2y + 4z = -1 2x + 5y + 4z = 4 Wissen Sie, ob es eine allgemeingültige Excel-Lösung für dieses Problem gibt und wie sie aussieht? H. Feldmann ANTWORT: Ein solches System aus linearen Gleichungen können Sie mit Matrixformeln lösen. Voraussetzung für das im Anschluss vorgestellte Verfahren ist, dass die Anzahl der Gleichungen mit der Anzahl der Unbekannten identisch ist. Das ist in Ihrem Fall gegeben: Sie haben drei Gleichungen und drei Unbekannte x, y und z. Um die Aufgabe in einer Excel-Tabelle zu lösen, müssen Sie zunächst die Koeffizienten der Variablen in einen zusammenhängenden Zellbereich schreiben. Im von Ihnen aufgeführten Beispiel geben Sie also Folgendes in die Zellen A1:C3 eines Tabellenblatts ein (ein fehlender Koeffizient entspricht dem Faktor 1): |ABC ----------1| 1 4 1 2| 3 2 4 3| 2 5 4 Rechts daneben in den Bereich D1:D3 tragen Sie die konstanten Ergebnisse der Gleichungen ein – also 7 Home Home in D1, -1 in D2 und 4 in D3. Zur Ermittlung der drei Koeffizienten nutzen Sie eine Matrixformel, die Sie in den Bereich E1:E3 eingeben. Dazu markieren Sie die drei Zellen. Danach schreiben Sie =MMULT(MINV(A1:C3);D1:D3) in die Zelle. Zur Eingabe drücken Sie schließlich gleichzeitig die Tasten Strg+Umschalt+Return. Nur mit dieser Tastenkombination wertet Excel die Eingabe als Matrixformel aus, was daran zu erkennen ist, dass die Gleichung von geschweiften Klammern umgeben ist: {=MMULT(MINV(A1:C3);D1:D3)} Sie erhalten das Ergebnis 1 für die Variable x, 2 für y und -2 für z. Die Formel bildet zunächst die inverse Matrix des Koeffizienten-Arrays: "MINV(A11:C13)". Danach errechnet sie mit der MMULT-Funktion das Produkt aus der inversen Matrix und der Matrix der konstanten Gleichungsergebnisse. Das Ergebnis-Array verrät die Lösung für Ihre Gleichungssysteme. Falls es keine Lösung gibt, gibt die Formel den Fehler "#WERT!" aus. Listen gruppieren und durch Seitenwechsel trennen Versionen: Excel 97, 2000 und 2002/XP FRAGE: Wir arbeiten mit einer umfangreichen Excel-Datei (ca. 4.500 Zeilen). Ich möchte nun automatisch nach jedem Kostenstellenwechsel eine leere Zeile, oder einen Seitenumbruch einfügen. Gibt es einen komfortablen Weg, um das zu automatisieren? L. Richter ANTWORT: Excel bietet genau für diesen Zweck eine nützliche Funktion an, die aber noch viel zu selten genutzt wird. Gehen Sie folgendermaßen vor: 1. Markieren Sie eine beliebige Zelle in der Liste. 2. Wählen Sie das Menü Daten-Sortieren an und sortieren Sie die Liste nach der Spalte, nach deren Inhalt Ihre Liste auch gruppiert werden soll. In diesem Fall handelt es sich dabei um das Feld "Kostenstelle". 3. Rufen Sie das Dialogfeld Daten-Teilergebnisse auf. 4. Markieren Sie das gewünschte Feld in der Liste Gruppieren nach. 5. Entscheiden Sie sich nun noch für ein Feld (Teilergebnis addieren zu), für das Sie unter jeder Gruppe eine Auswertung (Unter Verwendung von) erstellen möchten (beispielsweise die Betragssumme oder die Anzahl der Zeilen). 6. Wichtig ist nun, dass Sie das Kontrollkästchen Seitenwechsel zwischen Gruppen aktivieren. Außerdem sollten Vorhandene Teilergebnisse ersetzen und Ergebnisse unterhalb der Daten anzeigen eingeschaltet sein. 7. Nachdem Sie Ihre Einstellungen mit Ok bestätigt haben, fügt Excel automatisch unter jeder Gruppe einen Seitenumbruch sowie die gewünschte Auswertung ein. Sie können also Ihre Tabelle so ausgeben, dass beispielsweise jede Kostenstelle auf einer neuen Seite beginnt. Home Home Noch ein wichtiger Tipp für den Ausdruck: Standardmäßig erscheinen die Spaltenüberschriften nur auf der ersten Seite des Ausdrucks. Damit Sie auf jeder Seite erscheinen, geben Sie im Dialogfeld Datei-Seite einrichten auf dem Register "Tabelle" den Bezug der Beschriftungszeile in das Feld Wiederholungszeilen ein. Zum Beispiel für Zeile 2: 2:2 Makros und Funktionen immer verfügbar. Versionen: Excel 97, 2000 und 2002 In Excel Weekly stellen wir Ihnen immer wieder kleine VBA-Routinen und Funktionsmakros vor, mit denen Sie Excel um nützliche neue Fähigkeiten erweitern können. Vielleicht haben Sie auch noch das eine oder andere eigene Makro entwickelt und kleine Prozeduren von Kollegen erhalten. Mit der Zeit verfügen Sie über eine ansehnliche Sammlung von VBA-Programmen, auf die Sie möglichst schnell und ohne großen Aufwand zugreifen möchten. Dabei sind auch Sie wahrscheinlich auf zwei häufige Probleme gestoßen: · Das Modul, in das Sie ein Makro eingeben, ist an eine Arbeitsmappe gebunden. Nur wenn diese Datei geöffnet ist, steht auch das Makro zur Verfügung. · Bei Funktionsmakros ergibt sich noch ein zusätzliches Problem: Eine benutzerdefinierte Funktion kann in einer Formel nur dann mit ihrem einfachen Funktionsnamen verwendet werden, wenn sich die Formel in derselben Datei befindet wie das entsprechende Makro. Beim Einsatz in einer anderen Arbeitsmappe müssen Sie immer zusätzlich den Namen der Datei angeben, in der das Makro gespeichert ist. Also zum Beispiel: =MeineFunktionen.xls!Testrechnung(B6) Wir möchten Ihnen in dieser Ausgabe zeigen, wie Sie Ihre Makros in Zukunft effizient verwalten. Die wichtigsten Ziele: · Ihre am häufigsten benötigten Makros sollen voll automatisch nach dem Start von Excel zur Verfügung stehen. Weniger häufig eingesetzte Makros lassen sich bei Bedarf mit wenigen Mausklick zusätzlich aktivieren. · Benutzerdefinierte Funktionen sollen sich in jeder Arbeitsmappe grundsätzlich ohne vorangestellten Dateinamen einsetzen lassen. Wenn Sie sich schon einmal mit dem Thema "Verfügbarkeit von Excel-Makros" beschäftigt haben, sind Sie mit Sicherheit auf die sogenannte "persönliche Makro-Arbeitsmappe" von Excel gestoßen. Dabei handelt es sich um eine ganz normale Excel-Arbeitsmappe mit einem oder mehreren Visual BasicModulen. In diese Module können Sie alle Prozeduren aufzeichnen, kopieren oder eingeben, auf die Sie jederzeit zugreifen wollen. Die persönliche Makro-Arbeitsmappe wird unter dem Namen PERSONL.XLS im XLSTART-Verzeichnis abgelegt. Nach dem Start von Excel wird sie automatisch geladen, so dass alle hier gespeicherten Prozeduren sofort zur Verfügung stehen. Von der Datei selber merken Sie aber nichts, weil sie standardmäßig ausgeblendet ist. Über das Menü Fenster-Einblenden können Sie sie sichtbar machen, aber in der Regel ist das nicht notwendig, weil Sie die Module auch im ausgeblendeten Zustand im VBAEditor bearbeiten können. Home Home Auf den ersten Blick ist die persönliche Makro-Arbeitsmappe bereits die beste Lösung für die universelle Bereitstellung von Makros in Excel, aber es gibt einige Nachteile: · · Funktionsmakros aus der persönlichen Makroarbeitsmappe können ebenfalls nur mit vorangestelltem Dateinamen aufgerufen werden. Die Makro-Arbeitsmappe wird jedes Mal komplett geladen. Das Auslagern und nachträgliche Aktivieren weniger häufig benötigter Makros ist nur mit einigem Aufwand möglich. Wenig bekannt ist die Tatsache, dass es eine interessante Alternative gibt: Verwenden Sie in Zukunft Add-Ins anstelle der persönlichen Makro-Arbeitsmappe. Im folgenden zeigen wir Schritt für Schritt, wie Sie dazu vorgehen müssen und Sie werden sehen, dass es viel einfacher ist, als Sie bisher dachten. 1. Erstellen Sie eine neue Arbeitsmappe und wechseln Sie mit Alt+F11 in den VBA-Editor. 2. Wenn Sie bereits eine PERSONL.XLS mit Makros angelegt haben, verwenden Sie jetzt den Project-Explorer, um diese Module in die neue Arbeitsmappe zu übernehmen. Ziehen Sie die Module einfach bei gedrückter Strg-Taste in das neue VBA-Projekt. 3. Geben Sie die VBA-Makros und benutzerdefinierten Funktionen in ein oder mehrere Module der neuen Arbeitsmappe ein, die Ihnen in Zukunft immer zur Verfügung stehen sollen. 4. Verlassen Sie den VBA-Editor mit Datei-Schließen und zurück zu Microsoft Excel. 5. Wählen Sie in Excel das Menü Datei-Eigenschaften an. Geben Sie dann in das Feld Titel die Zeichenkette ein, die im Add-In-Manager für Ihr neues Add-In erscheinen soll. Zum Beispiel: "VBA-Bibliothek". Unter Kommentare können Sie noch weitere Anmerkungen eingeben, die beim Markieren des entsprechenden Eintrags ebenfalls im Add-In-Manager erscheinen. Bestätigen Sie Ihre Eingaben mit Ok. 6. Klicken Sie nun das Diskettensymbol an und markieren Sie in der Liste Dateityp den Eintrag "Microsoft Excel-Add-In". In den Versionen 2000 und 2002 wechselt Excel daraufhin automatisch in das "Add-Ins"-Verzeichnis, das bei der Installation angelegt wurde. Es empfiehlt sich, diesen Vorschlag anzunehmen, weil es sich dabei auch um das Verzeichnis handelt, das der Add-In-Manager beim Hinzufügen neuer Add-Ins als erstes anzeigt. In Excel 97 wird zur Speicherung das aktuelle Verzeichnis angeboten. Wechseln Sie auf Wunsch in ein anderes Verzeichnis, das Sie speziell für Add-Ins verwenden möchten. 7. Geben Sie den gewünschten Dateinamen für das Add-In ein und bestätigen Sie mit Speichern. 8. Excel erstellt daraufhin das Add-In aus der aktuellen Arbeitsmappe. Die im ersten Schritt angelegte Datei bleibt erhalten, kann an dieser Stelle aber ohne Speicherung geschlossen werden, weil Sie sie nicht mehr benötigen. 9. Wählen Sie das Menü Extras-Add-Ins-Manager an. 10. Klicken Sie auf Durchsuchen und wählen Sie das soeben erstellte Add-In aus. Excel zeigt es daraufhin in der Liste der verfügbaren Add-Ins im Add-In-Manager mit einem aktivierten Kontrollkästchen an. Beenden Sie den Vorgang mit Ok. 11. Sollten Sie bisher eine persönliche Makro-Arbeitsmappe eingesetzt haben, deren Module nun in das Add-In übernommen wurden, löschen oder verschieben Sie die Datei PERSONL.XLS aus dem XLSTART-Verzeichnis, damit sie nicht mehr automatisch geladen wird. Home Home Alle Makros aus dem Add-In stehen Ihnen in Zukunft automatisch direkt nach dem Start von Excel in allen Arbeitsmappen zur Verfügung. Das gleiche gilt für die benutzerdefinierten Funktionen, bei denen Sie außerdem auf den vorangestellten Dateinamen verzichten können. Weitere nützliche Tipps und Hinweise zu Add-Ins: · · · Wenn Sie das Add-In um weitere Makros erweitern oder vorhandene Makros bearbeiten möchten, wechseln Sie einfach in den VBA-Editor und greifen über den Project-Explorer auf die Module zu. Verwenden Sie dann das Disketten-Symbol im Editor, um die Änderungen zu sichern. Sie können das Add-In jederzeit aus dem Speicher entfernen, indem Sie den Add-InManager aufrufen und das Kontrollkästchen vor dem entsprechenden Eintrag entfernen. Bitte beachten Sie dabei, dass in diesem Fall das Add-In auch beim nächsten Start von Excel nicht mehr geladen wird. Dazu müssen Sie das Kontrollkästchen im Add-InManager erst wieder einschalten. Für Funktionen und Makros, die Sie nur selten benötigen, können Sie weitere Add-Ins erstellen, die Sie standardmäßig im Add-In-Manager nicht aktivieren und nur bei Bedarf hinzuschalten. Maximale Anzahl Zeilen in Excel 65536 Markierung der letzten benutzten Zelle z.B. in Spalte D Dim i As Integer i = Range("D65536").End(xlUp).Row Range("D" & i).Select Mehrere Drucker komfortabel nutzen Versionen: Excel 97, 2000 und 2002 FRAGE: Gibt es eine einfache Möglichkeit, den Druckauftrag für eine Tabelle je nach Bedarf an verschiedene Drucker zu senden? Der normale Weg über Datei-Drucken ist mir einerseits zu umständlich und andererseits verstellt Excel dabei jedes Mal den Standarddrucker, so dass die Drucken-Schaltfläche in der Symbolleiste nicht in der gewünschten Weise funktioniert. H. Kuhlage ANTWORT: Abhilfe schaffen VBA-Makros, in denen Sie das aktuelle Tabellenblatt jeweils auf unterschiedlichen Geräten ausdrucken lassen. Mit zwei zusätzlichen Codezeilen sorgen Sie außerdem dafür, dass der Standarddrucker beibehalten wird. Hier die genaue Vorgehensweise: · · Öffnen Sie eine neue, leere Arbeitsmappe. Wechseln Sie mit Alt+F11 in den Visual Basic-Editor und legen Sie im Projekt der neuen Datei ein Modul an, indem Sie das Menü Einfügen-Modul anwählen. · Geben Sie Prozeduren nach folgendem Muster ein: Sub <Drucker>() Dim strAktDrucker As String strAktDrucker = Application.ActivePrinter ActiveSheet.PrintOut ActivePrinter:="<Druckerbez.>" Application.ActivePrinter = strAktDrucker Home Home End Sub · Derartige Prozeduren richten Sie für jeden verfügbaren Drucker ein. Dabei müssen Sie nur jeweils die in eckigen Klammern gesetzten Ausdrücke ändern. In der ersten Zeile geben Sie anstelle von "<Drucker>" einen Prozedurnamen ein, der Rückschlüsse auf den Zieldrucker zulässt. Ansonsten ist der Name frei wählbar. In der vierten Zeile müssen Sie präziser vorgehen. Anstelle von <Druckerbez.>" müssen Sie den Druckernamen exakt so angeben, wie er im Dropdown-Feld des Dialogfelds Drucken erscheint. Wenn dort zum Beispiel ein Name wie "HP Deskjet 550C Printer" angezeigt wird, müssen Sie in der Prozedur auch diese vollständige Bezeichnung eintragen. Das VBA-Makro funktioniert nicht korrekt, wenn Sie nur den Druckertyp, also etwa "HP Deskjet 550C", eingeben. Beachten Sie außerdem, dass es sich bei dem "ActivePrinter"-Parameter um einen Textwert handelt, der in Anführungszeichen eingeschlossen sein muss. · Nachdem Sie Prozeduren für jeden angeschlossenen Drucker eingegeben haben, verlassen Sie den Visual Basic-Editor per Datei-Schließen und zurück zu Microsoft Excel. · Speichern Sie die in Schritt 1 angelegte Arbeitsmappe mit den Druckermakros unter einem Namen Ihrer Wahl. Lassen Sie die Datei aber weiterhin geöffnet! · Um die Druckausgabe zu beschleunigen, richten Sie Symbolleisten-Schaltflächen ein, die die zuvor erstellten Druckermakros aufrufen. Dazu wählen Sie im Menü Ansicht erst Symbolleisten und dann Anpassen an. · Erstellen Sie der Übersichtlichkeit halber eine neue Symbolleiste, indem Sie auf der Registerkarte Symbolleisten die Schaltfläche Neu anklicken. Geben Sie anschließend einen Namen wie "Druckerauswahl" ein und bestätigen Sie mit Ok. · Wechseln Sie im Dialogfeld Anpassen auf die Registerkarte Befehle und markieren Sie im Listenfeld Kategorien den Eintrag "Makros". · Nun ziehen Sie "Schaltfläche anpassen" (Excel 97/2000) bzw. "Benutzerdefinierte Schaltfläche" (Excel 2002) mit der Maus aus dem rechten Listenfeld in die leere Symbolleiste, die Sie in Schritt 7 erstellt haben. Daraufhin erscheint die neue Schaltfläche in Form eines "Smileys" in der Symbolleiste. · Klicken Sie die Schaltfläche mit der rechten Maustaste an, um ein Kontextmenü zu öffnen. Wählen Sie den Befehl Makro zuweisen an und aktivieren Sie im daraufhin angezeigten Dialogfeld den Namen des ersten Druckmakros per Doppelklick. · Öffnen Sie erneut das Kontextmenü der Schaltfläche mit der rechten Maustaste und überschreiben Sie den Vorgabetext im Feld Name durch die zum vorher ausgewählten Makro passende Druckerbezeichnung. · Damit die Druckerbezeichnung in der Symbolleiste angezeigt wird, öffnen Sie noch einmal das Kontextmenü der Schaltfläche. Wählen Sie dieses Mal den Befehl Nur Text (immer) an. · Wiederholen Sie die Schritte 9 bis 12 für alle Druckmakros, so dass die Symbolleiste am Ende Schaltflächen für alle verfügbaren Drucker enthält. · Beenden Sie das Dialogfeld Anpassen mit der Schaltfläche Schließen. Ab sofort bestimmen Sie mit den Schaltflächen der neuen Symbolleiste direkt per Mausklick, auf welchem Drucker die aktuelle Tabelle ausgedruckt wird. Da der Standarddrucker jedes Mal wieder hergestellt wird, können Sie parallel jederzeit die normale Drucken-Schaltfläche in der Excel-Symbolleiste einsetzen. Sie funktioniert genau so wie Sie es gewohnt sind. Die Symbolleiste zur Druckerauswahl öffnet Excel in der nächsten Sitzung übrigens automatisch, selbst wenn Sie die Mappe mit den Druckmakros nicht geladen haben. Das holt Excel nach, sobald Sie eines Home Home der Drucker-Symbole anklicken. Aufgrund der Makrozuordnung weiß Excel, in welcher Arbeitsmappe die entsprechenden Prozeduren zu finden sind. Mehrfachauswahl in VBA auswerten Versionen: Excel 97, 2000 und 2002 FRAGE: In einem VBA-Makro soll die Anzahl der in einem Tabellenblatt markierten Zeilen ermittelt werden. Dafür nutze ich die Anweisung "Selection.Rows.Count". Leider ist das Ergebnis nicht immer korrekt. Wenn es sich bei der Markierung nämlich um eine Mehrfachauswahl mit nicht aneinander grenzenden Zellbereichen handelt, erhalte ich nur die Zeilenanzahl des ersten Bereichs. Ist das ein Bug in Excel? Und wie komme ich an die tatsächliche Anzahl der markierten Zeilen? H. Schiermeyer ANTWORT: Bei einer Mehrfachauswahl berücksichtigt "Selection.Rows.Count" in der Tat nur den ersten markierten Bereich. Das Gleiche gilt übrigens auch für "Selection.Columns.Count". Nur "Selection.Cells.Count" liefert die korrekte Anzahl aller markierten Zellen. Um die Zeilen in allen markierten Bereichen zu zählen, müssen Sie die einzelnen "Areas" der Mehrfachauswahl in einer For-Schleife durchlaufen und dabei jeweils die Zeilen ermitteln. Eine entsprechende VBA-Prozedur könnte folgendermaßen aussehen: Sub Zeilenanzahl1() Dim objTeilbereich As Range Dim lngZeilenzahl As Long For Each objTeilbereich In Selection.Areas lngZeilenzahl = lngZeilenzahl + _ objTeilbereich.Rows.Count Next objTeilbereich MsgBox lngZeilenzahl End Sub Was diese Prozedur nicht berücksichtigt, sind überlappende Bereiche in der Mehrfachauswahl. Wenn Sie zum Beispiel die Zellen A1:A10 und C8:D17 markiert haben, erhalten Sie eine Zeilenanzahl von "20". Die Prozedur merkt also nicht, dass die Zeilen 8 bis 10 in beiden Bereichen der Mehrfachauswahl enthalten sind. Um zu ermitteln, wie viele "echte" Zeilen in dem Tabellenblatt markiert sind, verwenden Sie eine Prozedur wie diese: Sub Zeilenanzahl2() Dim objZeilenbereich As Range Dim objTeilbereich As Range Dim lngZeilenzahl As Long For Each objTeilbereich In Selection.Areas If objZeilenbereich Is Nothing Then Set objZeilenbereich = objTeilbereich.EntireRow Home Home Else Set objZeilenbereich = Union(objZeilenbereich, _ objTeilbereich.EntireRow) End If Next objTeilbereich For Each objTeilbereich In objZeilenbereich.Areas lngZeilenzahl = lngZeilenzahl + _ objTeilbereich.Rows.Count Next objTeilbereich MsgBox lngZeilenzahl End Sub Sie arbeiten in der Prozedur mit einem zusätzlichen Range-Objekt namens "objZeilenbereich", das jeweils die kompletten Zeilen der Teilbereiche in der Mehrfachauswahl umfasst. Da es sich auch dabei um nicht aneinander grenzende Zellbereiche handeln kann, müssen Sie die Zeilenbereiche am Ende erneut mit einer For-Schleife durchlaufen, um herauszufinden, wie viele unterschiedliche Zeilen im Tabellenblatt markiert sind. Im Beispiel mit der Mehrfachauswahl A1:A10;C8:D17 erhalten Sie dann eine Anzahl von "17" Zeilen. Nachnamen aus einer Zeichenkette ermitteln Versionen: Excel 97, 2000, 2002/XP und 2003 Wenn Sie Excel auch als Datenbank benutzen oder für Listen oder beliebige Aufstellungen Namen verwenden, dann kennen Sie das leidige "Nachnamen"-Problem. Immer wieder gibt es Situationen, in denen Sie gezielt auf den Nachnamen einer Person zugreifen wollen, aber genau dann ist natürlich nur der komplette Name in eine Zelle eingegeben. Nun wäre es ein leichtes, die Textfunktionen von Excel zum Auslesen des Nachnamens zu verwenden, wenn jeder Name immer eindeutig aus zwei Teilen bestehen würde: dem Vor- und dem Nachnamen. Aber die Realität sieht natürlich anders aus: doppelte Vornamen und andere Spezialfälle verhindern den Einsatz einer einfachen Formel. Glücklicherweise bietet Excel die Möglichkeit, das Programm durch beliebige benutzerdefinierte Funktionen zu erweitern. Erstellen Sie also ein neues Visual Basic-Modul, und geben Sie die folgende Funktion ein: Function Nachname(GanzerName) For I = 0 To Len(GanzerName) - 1 Verkehrt = Verkehrt & Mid(GanzerName, _ Len(GanzerName) - I, 1) Next I Nachname = Right(GanzerName, InStr(1, Verkehrt, " ", 0)) End Function In Zukunft können Sie ganz einfach den Nachnamen aus jedem beliebigen Namen ermitteln, indem Sie eine Formel mit der folgenden Syntax eingeben: =NACHNAME(<Bezug>) Home Home Die Funktionsweise unseres Visual Basic-Programms ist ganz einfach: Mit einer For-Next-Schleife kehren wir die gesamte Zeichenkette um. Aus "Peter Michael Müller" wird also "rellüM leahciM reteP". Danach sucht "Mid" nach dem ersten Leerzeichen in der umgedrehten Version des Namens, so dass sich anschließend mit der Right-Funktion der Nachname ermitteln lässt. Namensdefinitionen im Überblick Versionen: Excel 97, 2000 und 2002 FRAGE: Ihren Tip aus der Ausgabe 31/2001 habe ich nicht verstanden. Was hat der ZoomFaktor für das Arbeitsblatt mit den Namensdefinitionen zu tun? Für einen Überblick über die vergebenen Namen, lasse ich normalerweise eine entsprechende Liste in die Tabelle einfügen. C. Hesselschwerdt ANTWORT: Nach dem Versand des letzten Newsletters haben uns zahlreiche Mails mit diesem Tenor erreicht. Um das Mißverständnis aufzuklären: · · Über das Dialogfeld Einfügen-Namen-Einfügen und die Schaltfläche Liste einfügen haben Sie natürlich die Möglichkeit, eine Liste aller vergebenen Namen mit den zugehören Bereichsbezügen zu erstellen. Die von uns beschriebene Technik, bei der Sie einfach nur den aktuellen Zoomfaktor auf 39% setzen, erfüllt einen anderen Zweck: Die Namen werden in blauer Schrift hinter den Bereichen in der Tabelle angezeigt, denen sie zugeordnet wurden. Sie verschaffen sich so einen Überblick, welche Namen sich auf welche Bereiche der Tabelle beziehen. Optimale Spaltenbreite per Mausklick Versionen: Excel 97, 2000 und 2002/XP FRAGE: Gibt es eigentlich Alternativen für den Befehl Format-Spalte-Optimale Breite bestimmen? Dafür, dass der Befehl bestimmt nicht nur von mir häufig benötigt wird, finde ich ihn ziemlich tief in der Menüstruktur versteckt. U. Weber ANTWORT: Die schnellste Methode, die gerade markierte(n) Spalte(n) auf die optimale Breite einzustellen, besteht darin, doppelt auf den rechten Rand eines markierten Spaltenkopfes zu klicken. Wenn Sie mehrere Spalten markiert haben, ist es völlig egal, bei welchem Spaltenkopf Sie diese Aktion ausführen, - Hauptsache, es handelt sich um einen der markierten Spaltenköpfe. Umständlich gestaltet sich das Mausverfahren höchstens, wenn Sie die Spaltenbreite schon vorher verändert hatten und der rechte Rand wegen einer sehr großen Breite nicht mehr auf dem Bildschirm zu sehen ist. Dann müssten Sie erst mit der Bildlaufleiste nach rechts blättern. Um das zu vermeiden, können Sie mit wenigen Handgriffen eine Schaltfläche in die Home Home Symbolleiste von Excel einfügen. Und so gehen Sie vor: 1. Wählen Sie Ansicht-Symbolleisten-Anpassen an. 2. Klicken Sie auf das Excel-Menü Format, darin auf Spalte und schließlich auf den Befehl Optimale Breite bestimmen (Optimale Breite festlegen in Excel 2002), genau so, als wenn Sie den Befehl aufrufen wollten. 3. Nun drücken Sie die Strg-Taste und halten sie fest. Dann ziehen Sie das UntermenüElement Optimale Breite bestimmen an eine beliebige Stelle in der Standard- oder der Format-Symbolleiste. Ein senkrechter Balken kennzeichnet die Einfügeposition. 4. Lassen Sie erst die Maustaste und danach auch die Strg-Taste los, sobald Sie die passende Position für den Spaltenbreitenbefehl gefunden haben. Das Ziehen bei gedrückter StrgTaste erstellt eine Kopie des Menüelements. 5. Wenn Sie wollen, können Sie die neue Symbolleistenschaltfläche mit der rechten Maustaste anklicken, um über ein Kontextmenü die Beschriftung im Feld Name zu ändern. Oder Sie nutzen im Kontextmenü den Befehl Schaltflächensymbol ändern, um ein Symbol zuzuweisen. Die Platz sparende Symboldarstellung erreichen Sie anschließend, indem Sie im Kontextmenü den Befehl Standard aufrufen. 6. Nach Abschluss aller Anpassungen klicken Sie im Dialogfeld Anpassen auf die Schaltfläche Schließen. Ab sofort ist die optimale Spaltenbreite nur noch einen Mausklick entfernt. Perfekter Ausdruck mit dem kostenlosen Bericht-Manager Versionen: Excel 97, 2000 und 2002 In unserer letzten Ausgabe haben wir Ihnen den kostenlosen Ansichten-Manager vorgestellt, der standardmäßig mit Excel ausgeliefert wird. Er sorgt dafür, dass Sie unterschiedliche Versionen und Layouts Ihrer Tabellen mit wenigen Mausklicks speichern und jederzeit wieder abrufen können. Weitere Arbeitserleichterung bringt der "Bericht-Manager". Er sorgt dafür, dass Sie die definierten Ansichten im Handumdrehen zu Papier bringen. Anstatt erst eine Ansicht auszuwählen und auszudrucken, dann die nächste Ansicht auszuwählen und auszudrucken usw., können Sie im Bericht-Manager mehrere Ansichten zusammenfassen und gemeinsam an den Drucker schicken. Allerdings gehört der Bericht-Manager nicht zum Standard-Befehlsumfang von Excel. Es handelt sich um ein Add-In, das Sie gegebenenfalls nachinstallieren müssen. Überprüfen Sie den aktuellen Zustand Ihrer Excel-Installation, indem Sie im Menü Extras je nach Excel-Version AddIn-Manager (97), Add-Ins-Manager (2000) bzw. Add-Ins (2002) aufrufen. Wenn Sie in der Liste Verfügbare Add-Ins den Eintrag "Bericht-Manager" finden, sorgen Sie dafür, dass er mit einem Häkchen versehen ist, und bestätigen Sie die Auswahl mit Ok. Falls der "Bericht-Manager" nicht in der Liste auftaucht, klicken Sie auf Abbrechen und beenden Sie Excel. Beim Einsatz von Excel 97 und Excel 2000 müssen Sie dann über die WindowsSystemsteuerung eine Wartungsinstallation von Excel oder Microsoft Office starten und das Excel-Add-In "Bericht-Manager" nachrüsten. – Falls Sie mit Excel 2002 arbeiten, müssen Sie den Bericht-Manager aus dem Internet herunterladen; er befindet sich nicht mehr auf den Installations-CDs von Excel respektive Office. Über den folgenden Link gelangen Sie direkt zur Home Home entsprechenden Download-Seite: http://office.microsoft.com/germany/downloads/2002/rptmgr.aspx Nachdem Sie den Bericht-Manager per Programm-CD oder Internet installiert haben, vergewissern Sie sich, dass der zugehörige Eintrag im Add-In-Manager aktiviert ist (siehe oben). Aus einer Excel-Tabelle starten Sie das Zusatzwerkzeug dann über das Menü Ansicht und den Befehl Bericht-Manager. Klicken Sie auf Hinzufügen, um einen neuen Bericht anzulegen. Im nächsten Dialogfeld geben Sie eine aussagekräftige Bezeichnung in das Feld Berichtsname ein. Anschließend wählen Sie im mittleren Bereich das Blatt aus, das in den Bericht eingeschlossen werden soll. Im darunter stehenden Dropdown-Feld Ansicht können Sie nun eine der benutzerdefinierten Ansichten auswählen, die Sie zuvor eingerichtet haben. Um beim vorherigen Beispiel zu bleiben: Sie könnten eine der Einzelstatistiken für ein bestimmtes Jahr auswählen. Danach klicken Sie auf Hinzufügen, um die Auswahl in den unteren Dialogfeldbereich zu übernehmen. Nach demselben Prinzip fügen Sie weitere Ansichten zum Bericht hinzu. Mit Hilfe des zweiten Dropdown-Felds im mittleren Bereich können Sie sogar Szenarien integrieren, um Seiten mit unterschiedlichen Analyseansätzen auszudrucken (Szenarien wurden im Excel WeeklyNewsletter vom 3.7.2002 ausführlich beschrieben). Alle Ansichten und Szenarien die Sie als Bereiche dieses Berichts definieren werden zu einem einzigen Druckauftrag zusammengefasst und auf separaten Seiten ausgegeben. Mit dem Kontrollfeld Fortlaufende Seitenzahl können Sie die Seiten entsprechend nummerieren. Sobald Sie den Bericht zusammengestellt haben, schließen Sie das Dialogfeld mit Ok. Etwaige Makrofehler quittieren Sie einfach mit Weiter. Sie gelangen zurück zum Dialogfeld BerichtManager, das Ihnen mit der Schaltfläche Drucken sofort Gelegenheit bietet, den Bericht zu Papier zu bringen. Wenn Sie den Druckvorgang erst später starten wollen, können Sie das Dialogfeld auch wieder Schließen. Excel speichert Berichte gemeinsam mit der Arbeitsmappe, so dass Sie per Ansicht-Bericht-Manager jederzeit auf Ihre Berichte zugreifen können. Prüfen auf markierten Bereich Versionen: Excel 97, 2000 und 2002 FRAGE: Ich habe einige kleine VBA-Makros entwickelt, die mir bei der täglichen Arbeit helfen. Leider werden sie manchmal mit einer Fehlermeldung abgebrochen, wenn beim Start des Makros gerade kein Bereich markiert, sondern ein Diagramm oder ein Grafikobjekt ausgewählt war. Wie kann ich das unterbinden? O. Muhr ANTWORT: Die VBA-Funktion "TypeName" hilft weiter, denn mit ihrer Hilfe können Sie Informationen über die aktuelle Auswahl abfragen. Solange eine oder mehrere Zellen markiert sind, liefert die Funktion das Ergebnis "Range", so daß Sie den beschriebenen Fehler beispielsweise wie folgt abfangen könnten: Home Home If TypeName(Selection) <> "Range" Then MsgBox "Bitte waehlen Sie einen Bereich aus!" Exit Sub End If Quartalsnummer für ein Datum berechnen Versionen: Excel 97, 2000 und 2002 FRAGE: Ich möchte in einer Tabelle ermitteln, in welches Quartal ein bestimmtes Datum fällt. Eine ExcelFunktion dazu konnte ich nicht finden. Kann man sich irgendwie behelfen? H. König ANTWORT: Die Lösung ist eine Formel nach folgendem Muster: =AUFRUNDEN(MONAT(<Datumszelle>)/3;0) Es liegt auf der Hand, dass Sie zunächst den Monat des Datums berechnen müssen. Diesen Wert teilen Sie durch 3, weil ein Quartal aus drei Monaten besteht. Anschließend setzen Sie die Funktion AUFRUNDEN ein, um auf die nächste ganze Zahl (der zweite Parameter hat den Wert "0") zu runden. Und damit haben Sie bereits das Quartal zum Datum. Zum Ausprobieren geben Sie beispielsweise "24.12.2002" in Zelle A1 ein. Um das zugehörige Quartal auszugeben, tragen Sie dann in Zelle B1 diese Formel ein: =AUFRUNDEN(MONAT(A1)/3;0) Excel liefert den Wert "4": das Datum liegt also im vierten Quartal des Jahres. Quersumme bilden =SUMME(TEIL(A1;ZEILE(INDIREKT("A1:A"&LÄNGE(A1)));1)*1) Eingabe der Formel mit Strg/Shift/Enter Rangfolge mit gewichteten Kriterien Versionen: Excel 97, 2000 und 2002/XP FRAGE: Vor einiger Zeit hatten Sie schon einmal eine Leseranfrage beantwortet, in der es um die Feststellung einer Rangfolge und das anschließende Sortieren ging. Dort beschrieben Sie den Einsatz einer RANG-Funktion, mit der sich die Platzierung anhand der erzielten Gesamtpunktzahl errechnen lässt. Bei den Tabellen, die ich bearbeite, kann es aber vorkommen, dass Punktgleichheit herrscht. Dann entscheidet ein zweites Kriterium. Wenn in dieser Sparte auch Gleichheit herrscht, kommt ein drittes Kriterium zum Tragen usw. Die RANG-Funktion ermittelt die Platzierung aber offenbar nur anhand einer Bedingung, sodass bei gleicher Punktzahl derselbe Rang erscheint. Gibt es eine Lösung, die eine eindeutige Platzierung in Abhängigkeit von mehreren Kriterien errechnet? W. Brosé Home Home ANTWORT: Um eine Platzierung anhand mehrerer gewichteter Kriterien zu ermitteln, müssen Sie einige Hilfsberechnungen in das Tabellenmodell einbauen. Nehmen Sie zum Beispiel eine Fußballtabelle: Die Platzierung ergibt sich zunächst aus der Punktzahl (Sieg, Unentschieden, Verloren). Wenn zwei Mannschaften dieselbe Punktzahl aufweisen, entscheidet normalerweise die Tordifferenz. Wenn die auch identisch ist, werden die geschossenen Tore herangezogen. Die Daten der Fußballtabelle können Sie wie folgt in ein Excel-Tabellenblatt eingeben: · · · · · Spalte B: Mannschaftsnamen Spalte C: geschossene Tore Spalte D: Gegentore Spalte E: Tordifferenz per Formel "Spalte C minus Spalte D" Spalte F: Punkte Nun müssen Sie eine Wertigkeit ins Spiel bringen. Die geringste Bedeutung haben die "Plus-Tore", mehr Gewicht hat die Tordifferenz und die höchste Wertungsstufe kommt der Punktzahl zu. Diese Gewichtung erreichen Sie, indem Sie die einzelnen Ergebnisse mit geeigneten Faktoren multiplizieren. Geeignete Faktoren sind immer so hoch, dass der Maximalwert einer Bewertungskategorie nie so hoch wird, wie der kleinste Wert der nächst höheren Stufe. Im Fall einer Fußballtabelle bieten sich Hunderterpotenzen an: Die Tore fließen mit einfacher Wertung ein (0te-Potzenz), die Tordifferenz multiplizieren Sie mit 100 (1er-Potenz) und die Punkte mit 10.000 (2erPotenz). Auf diese Weise wird eine Mannschaft schlecht abschneiden, selbst wenn sie eine Tordifferenz von +99, dabei aber nur 1 Punkt erzielt hat. Denn die Tordifferenz "wiegt" in der Gesamtwertung 9.900 Punkte und die Punktzahl 10.000. Eine Mannschaft, die eine schlechte Tordifferenz von +1, dafür aber 60 Punkte hat, ist korrekterweise besser platziert, da in der Gesamtwertung 100 plus 600.000 Punkte herauskommen. Die Hilfsformeln können Sie in die Spalten H bis J Ihres Tabellenblatts eingeben: · · · Spalte H: Werteübernahme aus Spalte C (zum Beispiel "=C2") Spalte I: Spalte E multipliziert mit 100 (zum Beispiel "=E2*100") Spalte J: Spalte F multipliziert mit 10.000 (zum Beispiel "=F2*10000") Eine für die genaue Platzierung relevante Punktzahl ergibt sich dann aus der Summe der gewichteten Kriterien: Spalte K: Summe der Spalten H bis J (zum Beispiel: "=SUMME(H2:J2)") Die Ergebnisse aus Spalte K nutzen Sie dann in der gewohnten Form in einer RANG-Funktion. Wenn Sie beispielsweise Mannschaftsergebnisse in den Zeilen 2 bis 19 erfasst haben, geben Sie in Zelle A2 folgende Platzierungsformel für die erste Mannschaft ein: =RANG(K2;$K$2:$K$19) Home Home Die Formel müssen Sie nur noch nach unten in die Zellen aus Spalte A kopieren, - fertig ist die genaue Platzierung nach mehreren Kriterien. Eine Sortierung nach Spalte A sorgt schließlich für die passende Reihenfolge. RealLastCell Function Function RealLastCell(TheSheet As Worksheet) As Range ' Returns a single-cell range object that represents ' the intersection of the last non-empty row and the ' last non-empty column Dim ExcelLastCell As Range Dim Row As Long, Col As Integer Dim LastRowWithData As Long, LastColWithData As Integer Application.ScreenUpdating = False ' ExcelLastCell is what Excel thinks is the last cell Set ExcelLastCell = TheSheet.Cells.SpecialCells(xlLastCell) ' Determine the last row with data in it LastRowWithData = ExcelLastCell.Row Row = ExcelLastCell.Row Do While Application.CountA(TheSheet.Rows(Row)) = 0 And Row <> 1 Row = Row - 1 Loop LastRowWithData = Row ' Determine the last column with data in it LastColWithData = ExcelLastCell.Column Col = ExcelLastCell.Column Do While Application.CountA(TheSheet.Columns(Col)) = 0 And Col <> 1 Col = Col - 1 Loop LastColWithData = Col ' Create the range object Set RealLastCell = TheSheet.Cells(Row, Col) End Function Rechnen mit Uhrzeiten Versionen: Excel 97, 2000 und 2002 Das Rechnen mit Zeitangaben ist in Excel grundsätzlich kein Problem und viele Anwender nutzen diese Möglichkeiten beispielsweise zur Arbeitszeiterfassung oder für Abrechnungen aller Art. Die zahlreichen Anfragen an unsere Helpline zeigen allerdings, dass es viele Sonderfälle gibt, in denen man entweder ein wenig tricksen muss, um zum Ziel zu kommen. In diesem und im nächsten Tipp der Woche finden Sie daher einige nützliche Hinweise und fertige Formeln zu so häufigen Problemen wie dem Rechnen mit negativen Zeitangaben, dem Rechnen über Datumsgrenzen, der Darstellung von Zeiten über 24 Stunden, der Umwandlung von Uhrzeiten in Dezimalzahlen (und umgekehrt) oder dem Runden von Zeiten auf die nächsten x Minuten. Home Home Beginnen wir aber mit einigen Grundlagen, die Ihnen helfen werden, die Funktionsweise der Tipps besser zu verstehen. Obwohl Excel eine Uhrzeit in der Form "12:00" darstellen kann, wird sie intern nicht so verarbeitet. Für jede Uhrzeit zwischen 0:00 Uhr und 24:00 Uhr gibt es einen Dezimalwert zwischen 0 und 1. Also zum Beispiel: · · · 0,25 = 6:00 Uhr (=1/4 des Tages) 0,5 = 12:00 Uhr (=die Hälfte des Tages) 0,75 = 18:00 Uhr (=3/4 des Tages) Auf dieser Basis lässt sich jede beliebige Uhrzeit bis auf die Sekunde abbilden. Sie können das ganz einfach testen, indem Sie eine beliebige Uhrzeit in eine Excel-Zelle eingeben und dann das Menü FormatZellen anwählen, um Zahlenformat "Standard" zuzuweisen. Excel zeigt dann automatisch die Dezimalzahl an, die hinter der eingegebenen Uhrzeit steckt. Das einfache Rechnen mit Uhrzeiten ist auf Grundlage von diesem System kein Problem. Geben Sie beispielsweise in ein leeres Arbeitsblatt in A1 "12:00" als Arbeitsbeginn und in A2 "18:00" als Arbeitsende ein (jeweils ohne Anführungszeichen). Über die Formel: =A2-A1 erhalten Sie dann die Anzahl der gearbeiteten Stunden: 6:00 Excel rechnet dabei ganz einfach: =0,75-0,5 Das Ergebnis 0,25 entspricht wie oben erwähnt der Uhrzeit "6:00". Allerdings, und das ist die erste Besonderheit, die beim Rechnen mit Uhrzeiten zu beachten ist, können Sie Uhrzeiten nicht direkt in einer Formel verwendet. Die folgende Formel wird daher mit einem Fehler quittiert: =18:00-12:00 Die Uhrzeiten sind lediglich spezielle Formatierungen, mit denen nicht gerechnet werden kann. In einer Formel müssen Sie eine Uhrzeit daher zunächst über die Funktion ZEITWERT in die dezimale Entsprechung umwandeln. Korrekt wäre daher die folgende Formel: =ZEITWERT("18:00")-ZEITWERT("12:00") An diesen Beispielen erkennen Sie schon, dass das Rechnen mit Uhrzeiten nur bei ganz simplen Additionen und Subtraktionen wirklich einfach ist. Möchten Sie beispielsweise einen Arbeitslohn auf Grundlage der berechneten Arbeitszeit ermitteln, fangen die Probleme schon an, denn die Multiplikation von "6:00" mit einem Stundenlohn von beispielsweise 15 EUR führt natürlich nicht zu dem korrekten Ergebnis. Für diese und andere Anwendungen ist es daher notwendig, die Uhrzeiten in eine Dezimalzahl zu verwandeln (zum Beispiel 8,5 für 8:30). Zu diesem Zweck bringen Sie die Dezimalzahl, die hinter der Home Home Uhrzeit steht durch die Multiplikation mit 24 Stunden auf eine 24-Stunden-Basis: =ZEITWERT("6:00")*24 Das Ergebnis ist in diesem Fall "6" und diese Zahl können Sie dann ganz einfach mit einem Stundensatz multiplizieren. Genauso einfach ist es, eine Dezimalzahl in einer Uhrzeit umzuwandeln: dazu dividieren Sie die Zahl einfach durch 24. Zum Beispiel: =9,5/24 Das Ergebnis: 9:30 (nach entsprechender Formatierung über Format-Zellen). Im zweiten Teil dieses Tipps beschäftigen wir uns nächste Woche mit den folgenden Themen: · · · · Negative Zeitangaben Rechnen über Tagesgrenzen Zeitangaben über 24 Stunden Runden auf die nächsten x Minuten (zum Beispiel auf die nächsten 15 Minuten für die Abrechnung von Dienstleistungen). Relative Bereichsnamen in Ihren Formeln Versionen: Excel 97, 2000 und 2002 Die Definition von Bereichsnamen ist die ideale Methode, um schnell bestimmte Bereiche in der Tabelle anzuwählen und um leicht lesbare Formeln zu erstellen. Wenn Sie nach dem Markieren eines Bereiches das Menü Einfügen-Namen-Festlegen (Excel 97) oder Einfügen-Namen-Definieren (Excel 2000/2002) anwählen, ist der Bereichsbezug in dem Feld Bezieht sich auf immer in absoluter Form angegeben. Zum Beispiel: ='Tabelle1'!$C$4:$C$8 Auf diese Weise stellen Sie sicher, daß bei Verwendung des Bereichsnamens immer dieselben Zellen angesprochen werden. Wenn Sie also zum Beispiel dem oben angegebenen Bereich den Namen "Filiale1" zuordnen, werden mit =SUMME(Filiale1) immer die Werte in den Feldern C4:C8 summiert und zwar unabhängig davon, an welcher Stelle Sie diese Formel eintragen. Wenig bekannt ist die Tatsache, daß Sie durchaus die Möglichkeit haben, einem Namen einen relativen Bezug zuzuweisen. Ein solcher Name verhält sich dann auch genauso wie ein relativer Zellbezug: Abhängig von der Position in der Tabelle werden immer andere Felder angesprochen. Relative Bereichsnamen können Ihnen daher sowohl bei der Erstellung von Formeln als auch bei der Markierung von Bereichen behilflich sein. Dazu zwei Beispiele: Home Home · Wenn Ihre Tabellen immer ähnlich aufgebaut sind, können Formeln mit Hilfe von relativen Bereichsnamen sehr viel schneller erstellt werden. Sie definieren beispielsweise einen Namen, der sich immer auf die 10 Felder oberhalb der aktuellen Cursorposition bezieht und können den Namen dann in jeder Zelle der Tabelle verwenden, um die zehn darüberliegenden Zellen zu summieren. · Wenn Sie regelmäßig eine bestimmte Anzahl von Zellen relativ zur aktuellen Cursorposition markieren müssen, legen Sie einen entsprechenden relativen Bereichsnamen fest. Zum Beispiel: Der Name "Rechts4" bezieht sich auf die vier Zellen neben der aktuellen Cursorposition. Sie können dann jederzeit F5 (Gehezu) drücken und den Eintrag "Rechts4" anwählen, um die vier Zellen neben dem Cursor auszuwählen. Zur Definition eines relativen Bereichsnamens gehen Sie folgendermaßen vor: 1. Markieren Sie zunächst einen Bereich, der in Umfang und Position dem gewünschten relativen Bereich entspricht. 2. Wählen Sie das Menü Einfügen-Namen-Festlegen (Excel 97) oder Einfügen-Namen-Definieren (Excel 2000/2002) an. 3. Geben Sie unter Namen in der Arbeitsmappe den gewünschten Bereichsnamen ein. 4. Markieren Sie den Bereichsbezug in dem Feld Bezieht sich auf, bei dem es sich im Augenblick noch um einen absoluten Bezug handelt. 5. Drücken Sie dreimal die Taste F4. Danach hat Excel den absoluten in einen relativen Bezug umgewandelt und Sie können das Dialogfeld mit Return verlassen. Der Name verhält sich in Zukunft wie ein relativer Bereichsbezug: Der ausgewählte oder angesprochene Bereich hängt von der aktiven Zelle bzw. der Zelle mit der Formel ab. Rundungsformel auf 0.05 (Währung) =Runden((Zelle)/5;2)*5 Der Zellwert wird durch 5 geteilt, anschliessend die Anzahl Stellen, hier immer 2, definiert und das ganze Ergebnis mit 5 multiplizert. Ist das Ergebnis der esrten Division eine ungerade Zahl (1,3,5,...) so gibt die Multiplikation anschliessend einen „5er Wert“, ist das Ergebnis gerade, dann einen „0er Wert“. Runden nach Schweizer Regeln Versionen: Excel 97, 2000 und 2002 FRAGE: Ich habe ein Problem mit der RUNDEN-Funktion von Excel. In der Schweiz hilft sie mir leider nicht weiter, denn wir runden immer auf 0,5 Rappen. Also bei 0,67 auf 0.65 oder bei 0.68 auf 0.7. Wie kann ich Excel diese Rundung beibringen? B. Krattiger ANTWORT: Diese Frage erhalten wir sehr häufig von unseren Schweizer Lesern. Excel bietet diese spezielle Rundungsform standardmäßig nicht an, aber über die folgende Formel kommen Sie zum Ziel (dabei ist A1 der Bezug auf die Zelle mit dem Wert, den Sie runden möchten): =RUNDEN(A1*2;1) / 2 Um diese Berechnung als feste Funktion zu integrieren, verwenden Sie die folgende VBA-Funktion: Function RundenCH(Wert) RundenCH = Application.Round(Wert * 2, 1) / 2 Home Home End Function Nachdem Sie sie wie in unserer Ausgabe 4/2002 beschrieben in ein Add-In eingefügt haben, können Sie in Zukunft in Ihren Tabellen die Funktion "RundenCH" verwenden. Zum Beispiel: =RundenCH(A1) Rundungsformel auf beliebige Werte Funktion OBERGRENZE(Zahl;Schritt) Die Formel rundet grundsätzlich auf, und zwar auf das nächste Vielfache des Wertes, den man als Schritt eingibt. Um der Formel auch abrunden beizubringen hilft folgendes (Zahl- die Hälfte der Schrittzahl;Schritt) Beispiel: OBERGRENZE(Zelle-0.025;0.05) rundet jeden Rappenbetrag auf 5 Rappen auf oder ab. Seitenumbrüche pro Kategorieebene einfügen Versionen: Excel 97, 2000 und 2002/XP FRAGE: Kann ich Seitenwechsel so setzen, dass Excel automatisch eine neue Seite beginnt, wenn sich der Text oder der Wert in einer Spalte ändert? In meinem Fall habe ich eine Tabelle angelegt, in der in Spalte A bestimmte Hauptkategorien stehen. In den rechts anschließenden Spalten folgen entsprechende Details. Die Daten sind nach den Hauptkategorien sortiert. Der Übersichtlichkeit halber soll nun jede Kategoriegruppe auf einer neuen Seite beginnen. I. Breuer ANTWORT: Bevor Sie die Seitenumbrüche manuell in der Seitenumbruchvorschau festlegen, setzen Sie einfach das im Anschluss aufgelistete VBA-Makro ein. Um den Programmcode einzugeben, öffnen Sie die Arbeitsmappe, in der Sie die kategorienabhängigen Umbrüche setzen wollen, und wechseln Sie mit Alt + F11 in den Visual Basic-Editor. Dann erstellen Sie mit Einfügen-Modul ein neues VBA-Modul. In das zugehörige Codefenster tragen Sie die folgenden Programmanweisungen ein: Sub Seitenumbruch() Dim lngSuchspalte As Long Dim lngErsteZeile As Long Dim lngLetzteZeile As Long Dim i As Long Dim LetzterWert, AktuellerWert lngSuchspalte = 1 lngErsteZeile = 2 lngLetzteZeile = ActiveSheet.UsedRange _ .SpecialCells(xlCellTypeLastCell).Row LetzterWert = ActiveSheet _ Home Home .Cells(lngErsteZeile, lngSuchspalte).Value For i = lngErsteZeile To lngLetzteZeile AktuellerWert = ActiveSheet.Cells(i, _ lngSuchspalte).Value If Not AktuellerWert = LetzterWert _ And Not IsEmpty(AktuellerWert) Then ActiveSheet.HPageBreaks.Add _ Before:=ActiveSheet.Cells(i, lngSuchspalte) End If LetzterWert = AktuellerWert Next i End Sub Passen Sie die Prozedur gleich an Ihre Bedürfnisse an, indem Sie die Werte der Variablen "lngSuchspalte" und "lngErsteZeile" entsprechend einstellen. "lngSuchspalte" bezeichnet die Spalte, in der die Texte oder Werte stehen, die den Seitenumbruch bestimmen. Die Zahl, die Sie der Variablen zuweisen, steht für die Spaltennummer: 1 für Spalte A, 2 für Spalte B usw. "lngErsteZeile" bezeichnet die Zeile, in der die Prozedur mit der Untersuchung beginnen soll. Wenn Ihre Tabelle zum Beispiel einen Kopfbereich mit allgemeinen Beschriftungen oder Spaltenüberschriften enthält, können Sie diese Zeilen von der Gruppierungssuche ausnehmen. Weisen Sie "lngErsteZeile" die Zeilennummer zu, in der die eigentlichen Daten beginnen. Ab dieser Zeile durchläuft die Prozedur alle Zellen der mit "lngSuchspalte" angegebenen Spalte bis zum Ende des Datenbereichs und prüft dabei, ob sich der Wert der aktuellen Zelle von dem der darüber stehenden Zelle unterscheidet. Berücksichtigt wird dabei auch der Fall, dass Sie die Kategoriebezeichnung immer nur am Beginn einer neuen Kategoriegruppe eingegeben haben und die Folgezellen ansonsten leer gelassen haben ("Not IsEmpty(AktuellerWert)"). Falls ein Unterschied vorliegt, fügt die Prozedur einen Seitenumbruch ein. Nach Eingabe des Programmcodes kehren Sie zur Excel-Arbeitsmappe zurück und lassen sich die Tabelle mit den auszudruckenden Daten anzeigen. Starten Sie das VBA-Makro, indem Sie Alt + F8 drücken und im Makro-Dialogfeld den Makronamen "Seitenumbruch" mit einem Doppelklick anwählen. Das Resultat sehen Sie sofort in der Seitenansicht. Beachten Sie in Excel 97 jedoch, dass beim Skalieren (Befehl Datei-Seite einrichten, Registerkarte Papierformat) nur der Prozentsatz der Verkleinerung eingestellt wird. Wenn Sie mit der Option Anpassen arbeiten, um zum Beispiel die Druckbreite an das Papierformat anzupassen, berücksichtigt Excel 97 die Seitenumbrüche nicht. So lösen Sie die Verknüpfung zwischen Diagramm und Tabelle Versionen: Excel 97, 2000 und 2002 Home Home Jedes Diagramm, das Sie in Excel erstellen, ist standardmäßig mit dem Tabellenbereich verknüpft, auf deren Grundlage Sie die Grafik erstellt haben. Der Vorteil: Wenn Sie eine oder mehrere Zahlen in Ihrer Tabelle anpassen, wird das Diagramm automatisch auf den neuesten Stand gebracht. Nun gibt es aber Situationen, in denen Sie zwar Daten ändern, das Diagramm aber (beispielsweise aus Dokumentationsgründen) in seinem alten Zustand erhalten möchten. Zu diesem Zweck müssen Sie die Verknüpfung zwischen dem Diagramm und den Daten entfernen. Sie haben dazu zwei Möglichkeiten, die wir Ihnen in diesem Tipp vorstellen möchten: Bei der ersten Technik machen Sie sich die wenig bekannte Tatsache zu Nutze, dass Excel sowohl Tabellenbereiche als auch Diagramme als Bitmap-Grafik in die Zwischenablage kopieren kann: Zu diesem Zweck markieren Sie das gewünschte Diagramm, drücken Sie die UmschaltTaste und halten Sie sie gedrückt, während Sie das Menü Bearbeiten-Bild kopieren anwählen (dieses Menü steht nur zur Verfügung, wenn Sie die Umschalt-Taste gedrückt halten; daher haben Sie es wahrscheinlich bisher noch nicht bemerkt). Bestätigen Sie im nachfolgenden Dialogfeld einfach die Standardeinstellungen mit Ok und schon befindet sich eine Kopie Ihres Diagramms als Bitmap-Grafik in der Zwischenablage. Über das Menü Bearbeiten-Einfügen bzw. Strg+V können Sie die Grafik auf jedem beliebigen Tabellenblatt einfügen. Damit steht Ihnen nun eine Kopie Ihres Diagramms zur Verfügung, die keinerlei Verbindung zum ursprünglichen Datenbereich hat. Wenn Sie Werte in Ihrer Tabelle ändern, wird die ursprüngliche Version des Diagramms angepasst und die Kopie bleibt unverändert. Der Nachteil bei dieser Vorgehensweise besteht allerdings darin, dass die Diagrammkopie als Bitmap-Grafik in keiner Weise mehr bearbeitet werden kann. Sie haben also beispielsweise nicht die Möglichkeit, den Diagrammtitel zu ändern, eine Legende einzufügen oder die Farben der Datenreihen anzupassen. Hier kann aber unsere zweite Technik weiterhelfen: Bei genauerer Betrachtung basiert ein Diagramm wie ein Kalkulationsmodell auf Formeln. Wenn Sie in einem beliebigen Diagramm einmal eine Datenreihe anklicken, so werden Sie feststellen, dass in der Bearbeitungszeile eine Formel "=DATENREIHE" erscheint. Über die Parameter dieser Formel wird die Verknüpfung zwischen Tabelle und Diagramm hergestellt sowie Excel mitgeteilt, wo Beschriftungen und Daten zu finden sind. Sie können nun wie in einer Tabelle die Formeln im Diagramm durch ihre aktuellen Ergebnisse ersetzen. Auf diese Weise lösen Sie die Verknüpfung zwischen Tabelle und Diagramm, so dass wie gewünscht die aktuelle Darstellung unabhängig von einer Aktualisierung der Daten erhalten bleibt: 1. Klicken Sie die erste Datenreihe in Ihrem Diagramm an, so dass in der Bearbeitungszeile die DATENREIHE-Formel zu sehen ist. 2. Markieren Sie die komplette Formel in der Bearbeitungszeile mit der Maus. 3. Drücken Sie F9 und bestätigen Sie mit Return. Excel ersetzt die Formel daraufhin durch eine Matrix mit den Werten, auf deren Basis das Diagramm zurzeit dargestellt wird. 4. Beginnen Sie für jede weitere Datenreihe in Ihrem Diagramm wieder mit Schritt 1. Das Ergebnis ist ein Diagramm ohne Verbindung zu Ihrer Tabelle, das sich aber dennoch mit den gewohnten Funktionen bearbeiten und ändern lässt. Übrigens: Wenn Sie wie bei unserer ersten Technik das Diagramm sowohl mit als auch ohne Verknüpfungen benötigen, legen Sie einfach vor dem Entfernen der DATENREIHE-Formeln Home Home eine Kopie an. Verwenden Sie dazu die gewohnten Menüs Bearbeiten-Kopieren und Bearbeiten-Einfügen. Speichern von Arbeitsmappen verhindern Versionen: Excel 97, 2000 und 2002 In der letzten Ausgabe der Excel-Kolumne habe ich Ihnen eine Lösung vorgestellt, mit der Sie verhindern können, daß eine Tabelle bzw. die komplette Arbeitsmappe gedruckt werden kann. In dieser Aufgabe verrate ich Ihnen, wie Sie eine Arbeitsmappe vor der Veränderung schützen können, ohne daß Sie diese Arbeitsmappe mit einem Paßwort belegen müssen. Um einen derartigen Schutz herzustellen, befolgen Sie die nächsten Arbeitsschritte: · · · Wechseln Sie mit der Tastenkombination Alt+F11 in die Entwicklungsumgebung von Excel. Im Projekt-Explorer klicken Sie den Eintrag "DieseArbeitsmappe" doppelt an. Erfassen Sie danach folgendes Ereignismakro: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As _ Boolean, Cancel As Boolean) Cancel = True End Sub Wenden Sie das Ereignis "Workbook_BeforeSave" an, um den Augenblick abzupassen, an dem der Anwender versucht die Arbeitsmappe zu speichern. Innerhalb dieses Ereignisses setzen Sie dann das Argument Cancel auf den Wert True. Damit verhindern Sie effektiv jede Speicherung der Arbeitsmappe. Selbst wenn der Anwender versucht den Befehl Speichern unter aus dem Menü Datei zu wählen wird es ihm nicht gelingen dieses Arbeitsmappe zu speichern. Die optimale Lösung wäre jetzt, wenn Sie über einen kleinen Trick selbst die Arbeitsmappe jederzeit speichern könnten. So könnten Sie beispielsweise kurz vor dem Speichern der Arbeitsmappe prüfen, ob in einer bestimmten Zelle ein bestimmter Wert steht. Wenn ja, dann können Sie die Speicherung zulassen, wenn nicht dann brechen Sie das Ereignismakro und somit die Speicherung der Arbeitsmappe ab. Der Code für diese Aufgabe sieht wie folgt aus: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As _ Boolean, Cancel As Boolean) If Sheets("Tabelle1").Range("A1").Value <> 1 Then Cancel = True End If End Sub Im obigen Ereignismakro fragen Sie den Inhalt der Zelle A1 ab. Steht in Zelle A1 der Wert 1, dann kann die Arbeitsmappe gespeichert werden. In allen anderen Fällen nicht. Selbstverständlich werden Sie bei Ihrer Lösung nicht unbedingt die Zelle A1 verwenden, sondern eine etwas weniger auffällige Zelle in mitten Ihrer Tabelle. Wenn Sie jetzt noch diese Zelle mit der Schriftfarbe weiß belegen, dann ist diese Zahl überhaupt nicht sichtbar und fällt somit nicht auf. Ein kleiner Trick mit großer Wirkung! Home Home Standard-Dialog von Excel per VBA anzeigen Versionen: Excel 97, 2000 und 2002 FRAGE: Ich möchte in meinen Makros einige der Standard-Dialoge (zum Beispiel zur Auswahl der Schriftart) von Excel verwenden. Wie kann ich das erreichen? H. Bruns ANTWORT: Die Lösung ist die "Application.Dialogs"-Methode von Excel. Sie übergeben dann nur noch eine Konstante, die den gewünschten Dialog definiert und können dann beispielsweise die Schriftart-Auswahl mit der folgenden Zeile aufrufen: Application.Dialogs(xlDialogFormatFont).Show Wenn Sie diesen Befehl eingeben, wird nach der Eingabe der öffnenden Klammer automatisch eine Liste der verfügbaren Konstanten angezeigt. Anhand der Namen können Sie den zugehörigen Dialog in der Regel eindeutig identifizieren. Startposition beim Öffnen einer Arbeitsmappe Versionen: Excel 97, 2000 und 2002 Standardmäßig werden Excel-Arbeitsmappen so in der Konstellation gespeichert, wie sie beim letzten Mal gesichert wurden. Befinden Sie sich beispielsweise auf der Tabelle3 und haben dort Änderungen vorgenommen und diese gespeichert, dann werden Sie sich nach dem nächsten Öffnen der Arbeitsmappe genau in dieser Tabelle wiederfinden. In diesem Punkt verhält sich Excel genau anders als Word. Word öffnet ein Dokument immer mit dem Mauszeiger am Dokument-Anfang. Excel dagegen nicht! Diese Feature ist in vielen Fällen wohl ganz nützlich, doch nicht immer. Stellen Sie sich einmal vor, Sie haben eine Arbeitsmappe, in der in der ersten Tabelle Beschreibungen hinterlegt sind, wie Sie die verschiedene Tabelle der Arbeitsmappe bearbeiten müssen. In diesem Fall wäre es für einen Anwender sehr verwirrend, wenn er nach dem Öffnen eine andere Tabelle zu sehen bekommen würde. Dieses Problem können Sie umgehen, indem Sie ein Ereignis in Excel einstellen. Dazu gehen Sie folgendermaßen vor: · · Drücken Sie Alt+F11, um in die Entwicklungsumgebung von Excel zu gelangen. Im Projekt-Explorer klicken Sie zweimal auf den Eintrag "DieseArbeitsmappe". Damit haben Sie Zugriff auf alle Ereignisse der Arbeitsmappe. · Erfassen Sie folgendes Ereignismakro: Private Sub Workbook_Open() On Error GoTo fehler Sheets("Tabelle1").Activate Exit Sub fehler: MsgBox "Diese Tabelle gibt es nicht!" End Sub Sicherheitshalber bauen Sie eine On Error - Anweisung ein, um zu Verhindern, dass das Makro abstürzt, wenn die Tabelle beispielsweise umbenannt oder gelöscht wurde. Home Home Noch ein kleiner Tipp: Sie haben auch die Möglichkeit, die Tabelle nicht über Ihren Namen, sondern über den Index anzusprechen. So bedeutet die Anweisung Sheets(1).Activate, dass die erste Tabelle in der Arbeitsmappe aktiviert werden soll. Statusmeldungen während der Makroausführung Versionen: Excel 97, 2000 und 2002 FRAGE: Ist es eigentlich möglich, während der Ausführung eines VBA-Makros Meldungen in der Statusleiste auszugeben? In meinem konkreten Fall geht es um ein Makro, das umfangreiche Berechnungen durchführt und deshalb relativ viel Zeit in Anspruch nimmt. Nun will ich verhindern, dass Anwender denken, der Rechner sei abgestürzt, weil er scheinbar nicht mehr reagiert. So wäre es hilfreich, wenn während der Berechnungen ein kleiner Hinweis in der Statusleiste erscheint. H. Schönfelder ANTWORT: Mit der "StatusBar"-Eigenschaft des Application-Objekts können Sie beliebige Zeichenfolgen definieren, die in der Statusleiste angezeigt werden. Damit nach Abarbeitung eines langen Makros wieder die normale Statusleiste (mit dem Text "Bereit") angezeigt wird, setzen Sie die Eigenschaft am Ende auf den Wert "False". Hier ein kleines Beispielmakro, das nichts weiter macht als eine Variable hochzuzählen. Während dieses Vorgangs sehen Sie in der Statusleiste einen Text wie "Bearbeite <x> von 100000". "x" wird jeweils auf den aktuellen Wert der Zählervariablen gesetzt. Sub LangesMakro() Dim Max As Long Dim i As Long Max = 100000 For i = 1 To Max Application.StatusBar = "Bearbeite " & i & _ " von " & Max Next i Application.StatusBar = False End Sub Wenn Sie das Makro ausführen, informiert Sie die Statusleiste über den aktuellen Status. Es ist sinnvoll, eine Meldung mit wechselnden Werten auszugeben. Bei der Anzeige von statischem Text könnte ein Anwender ebenfalls meinen, der Rechner sei abgestürzt. Sobald die For-Schleife abgearbeitet ist, stellen Sie per "Application.StatusBar = False" wieder den ursprünglichen Zustand der Statusleiste her. So wird deutlich, dass das Makro beendet ist. Summenfunktion mit mehr als 30 Argumenten Versionen: Excel 97, 2000 und 2002 Home Home FRAGE: Ich muss in einer Abrechnungstabelle diverse Zellen addieren. Bislang klappte das mit einer Summenfunktion ohne Probleme. Seit kurzem teilt mir Excel aber mit, dass ich zu viele Argumente an die Funktion übergebe. Inzwischen habe ich herausgefunden, dass SUMME() maximal 30 Argumente akzeptiert. Was kann ich machen, wenn ich mehr als 30 nicht zusammenhängende Zellen addieren will? K. Haberer ANTWORT: Die Schwierigkeit liegt darin, dass Sie offensichtlich Zellen addieren müssen, die nicht zu Bereichen zusammengefasst werden können. Ansonsten ließe sich die Anzahl der Argumente natürlich dadurch reduzieren, dass Einzeladressen zu Bereichen wie "A10:A15" zusammengefasst werden. Um mehr als 30 einzelne Zellen in einer Summenfunktion anzugeben, müssen Sie Excel überlisten, indem Sie die Adressen auf andere Weise gruppieren. Das erreichen Sie mit Klammerausdrücken. Wenn Sie zum Beispiel nur jede zweite Zelle in Spalte A summieren wollen, könnten Sie folgende Formel einsetzen: =SUMME((A1;A3;A5;A7;A9);(A11;A13;A15;A17;A19);A21;A23; ...) Hier gruppieren Sie jeweils die Zellen A1 bis A9 und A11 bis A19. Ab Zelle A21 kommen in diesem Beispiel wieder normale Einzeladressen zum Einsatz. Die Klammerausdrücke wertet Excel jeweils als ein einziges Argument der Summenfunktion, so dass Sie die Standardbegrenzung auf 30 Einzelzellen leicht umgehen können. SVERWEIS Beispiel Schulnoten per Excel-Tabelle ermitteln Versionen: Excel 97, 2000 und 2002 FRAGE: Als Lehrer möchte ich einen Test gerne am Computer auswerten. Dazu habe ich eine ExcelTabelle mit den Schülernamen und den erreichten Punktzahlen angelegt. Wie schaffe ich es jetzt, dass Excel automatisch die entsprechende Note zuordnet? F. Schmitz ANTWORT: Davon ausgehend, dass die maximal erreichbare Punktzahl sowie die Punktgrenzen für die einzelnen Noten feststehen, kommen Sie mit einer SVERWEIS-Funktion am schnellen zum Ziel. Sie können die Schülernamen und die erreichten Punkte dann zum Beispiel in die Spalten A und B eines Tabellenblatts eintragen. Spalte C lassen Sie frei für die Notenformel. In einem anderen Bereich - etwa rechts daneben in den Spalten E und F - müssen Sie anschließend die Punktgrenzen für die Noten definieren. Das könnte wie folgt aussehen: ab Note 06 18 5 25 4 35 3 42 2 Home Home 47 1 Für die linke Spalte wurde bewusst die Spaltenüberschrift "ab" gewählt. Da Sie keine Grenzen wie "von 0 bis 17 Punkten" eingeben können, müssen Sie immer die Untergrenzen der jeweiligen Notenstufe eintragen. Im obigen Beispiel gibt es etwa ab 35 Punkten eine "3", auch mit 41,9 Punkten gibt es noch eine "3" und erst mit 42 Punkten erreicht die Schülerin/der Schüler eine "2". Nachdem Sie die Grenzen definiert und in die rechts angrenzenden Zellen die jeweiligen Noten eingegeben haben, stellen Sie die Benotungsformel auf - im Beispielmodell in Spalte C. Wenn die erste Zeile Spaltenüberschriften enthält, beginnen Sie in Zelle C2, in die Sie folgende SVERWEIS-Formel eintragen: =SVERWEIS(B2;$E$2:$F$7;2) Damit suchen Sie die erreichte Punktzahl (Zelle B2) in der ersten Spalte des Bereichs E2:F7 (hier als absoluter Zellbezug). Als Ergebnis lassen Sie den Wert aus Spalte "2" des Suchbereichs (also aus Spalte F) ausgeben, der rechts neben der Fundstelle steht. Falls SVERWEIS keine exakte Entsprechung findet, liefert es den Zeileneintrag zur nächst kleineren Zahl. Das erklärt, warum Sie jeweils die Untergrenzen der Notenbereiche angeben müssen. Wenn Sie die Adresse der Suchmatrix wie in der Beispielformel als absoluten Bezug eingeben, können Sie die Formel ohne weitere Anpassungen in die darunter liegenden Zellen kopieren. Unser Tipp: Wenn Sie die Notengrenzen nicht neben die Schülerbewertungen schreiben wollen, können Sie sie selbstverständlich auch in einem separaten Tabellenblatt eingeben. Anschließend müssen Sie nur den Zellbezug in der SVERWEIS-Formel anpassen. Tabellen komfortabel auswerten Versionen: Excel 97, 2000 und 2002 FRAGE: Wenn ich Zellen in einer Excel-Tabelle markiere, wird in der Statuszeile bekanntlich die Summe der Zellinhalte angezeigt. Sind auch andere Auswertungen mit dieser Funktion möglich? G. Jakubowski ANTWORT: Diese unter der Bezeichnung "AutoBerechnung" bekannte Funktion, bietet noch fünf weitere Auswertungsmöglichkeiten: · · · · · Home "Mittelwert" liefert den Durchschnitt der ausgewählten Zellen. "Zählen" berechnet die Anzahl der ausgefüllten Zellen im markierten Bereich. Eine Zelle gilt als ausgefüllt, wenn sie eine Formel, Zahl oder Zeichenkette enthält. Im Gegensatz zu "Zählen" zeigt "Anzahl" nur die Anzahl der Zellen an, die eine Zahl oder Formel enthalten. "Maximum" zeigt den größten Wert im markierten Bereich. "Minimum" ermittelt den kleinsten Wert. Home Der Wechsel der Funktion ist einfach: Klicken Sie mit der rechten Maustaste auf die Statusleiste, um ein Kontextmenü aufzurufen, in dem alle verfügbaren Optionen angezeigt werden; Sie müssen nur noch den gewünschten Eintrag anklicken. Übrigens: Die "AutoBerechnung" funktioniert nicht nur mit zusammenhängenden Bereichen, sondern auch für beliebige Zellen in einer Tabelle. Klicken Sie die gewünschten Zellen dazu einfach bei gedrückter Strg-Taste an und in der Statuszeile erscheint das Ergebnis. Tabellen-Bereiche komfortabel vergleichen Versionen: Excel 97, 2000 und 2002 Möchten Sie voll automatisch die Werte in zwei Bereichen vergleichen und gezielt die Zellen mit Unterschieden markieren lassen? Mit der bedingten Formatierung kommen Sie weiter. Nehmen wir beispielsweise an, daß Sie am Ende letzten Jahres ein Budget für das erste Quartal 2001 erstellt haben. Die Ist-Werte wurden ebenfalls in eine Tabelle eingetragen, die genauso aufgebaut ist wie der Budgetentwurf. Mit den folgenden Schritten erreichen Sie, daß in den IstZahlen die Zellen markiert werden, in denen das Budget überschritten wurde: 1. Markieren Sie den Bereich mit Ist-Zahlen, und rufen Sie das Menü Format-Bedingte Formatierung auf. 2. Klicken Sie in der ersten Dropdown-Liste auf den Eintrag "Zellwert ist", und markieren Sie in der zweiten Liste "größer als". 3. In das letzte Feld geben Sie eine Formel mit einem Bezug zur linken oberen Zelle des Bereiches mit Budget-Zahlen ein. Für unser Beispiel ist das die Zelle C5, so daß die Formel folgendermaßen lautet: =C5 4. Klicken Sie auf Format und legen Sie das Format fest, mit dem Excel die Zellen mit überschrittenen Budgetbeträgen markieren soll. 5. Nachdem Sie mit Ok bestätigt haben, können Sie das Format mit einem weiteren Klick auf Ok zuweisen. Excel hebt daraufhin die Zellen hervor, deren Wert größer ist als in der vergleichbaren Zelle im Budgetbereich. Sie können diese Technik natürlich auch einsetzen, um beliebige andere Bedingungen prüfen zu lassen. Die einzige Voraussetzung ist, daß die zu vergleichenden Bereiche genau gleich aufgebaut sind. Besonders erwähnenswert ist noch die Tatsache, daß Sie den Vorgang nicht wiederholen müssen, wenn sich Werte ändern. Excel vergleicht die Bereiche in Zukunft voll automatisch und hebt gegebenenfalls neue Zellen hervor oder entfernt Formatierungen. Tabellenblatt verbergen Kann ich ein Tabellenblatt so verbergen, dass es nicht mehr eingeblendet werden kann? Sie können ein Blatt als "Very Hidden" kennzeichnen. Damit bleibt das Blatt zumindest dem normalen Excel-Anwender gänzlich verborgen. Um die Ansichtsoption einzuschalten, können Sie folgende VBAAnweisung verwenden: Sheets("Tabelle1").Visible = xlVeryHidden Ein Tabellenblatt mit der Eigenschaft "Very Hidden" kann mit dem Befehl Format-Blatt-Einblenden nicht wieder sichtbar gemacht werden, da der Tabellenname gar nicht erst in der Liste des Dialogfelds erscheint. Für jeden, der sich mit VBA auskennt, ist dieser "Schutz" natürlich ein leicht zu überwindendes Home Home Hindernis. Sheets("Tabelle1").Visible = True Wobei der Name der Tabelle bekannt sein muss. Tabellenblätter absolut sicher verstecken Versionen: Excel 97, 2000 und 2002 FRAGE: Über das Menü Format-Blatt-Ausblenden gibt es bekanntlich die Möglichkeit, ein Tabellenblatt zu verstecken, so daß es nicht mehr im Register der Arbeitsmappe angezeigt wird. Allerdings muß ein Anwender nur das Menü Format-Blatt-Einblenden anwählen, um es wieder sichtbar zu machen. Gibt es außerdem Schutz der Arbeitsmappe noch eine andere Möglichkeit, um das zu verhindern? B. Schmit ANTWORT: Tatsächlich bietet Excel die Möglichkeit, einem Tabellenblatt den Status "very hidden" zuzuweisen, damit es nicht mehr im Dialogfeld Format-Blatt-Einblenden zu sehen ist. Dazu gehen Sie folgendermaßen vor: 1. Drücken Sie Alt+F11, um die VBA-Entwicklungsumgebung aufzurufen. 2. Im Projektfenster erscheinen in einer Baumstruktur die Module, UserForms und Objekte alle geöffneten Arbeitsmappen. Unter dem Projekt der gewünschten Datei markieren Sie in der Kategorie "Microsoft Excel Objekte" den Namen des Blattes, das Sie ausblenden möchten. 3. Drücken Sie F4, um das Eigenschaftenfenster einzublenden. 4. Scrollen Sie an das Ende des Fensters und stellen Sie die Eigenschaft "Visible" auf "xlSheetVeryHidden". 5. Verlassen Sie den VBA-Editor mit Datei-Schließen und zurück zu Microsoft Excel. Das Tabellenblatt ist damit ausgeblendet und kann auch nicht mehr über Format-BlattEinblenden sichtbar gemacht werden. Der einzige Weg führt über die VBA-Umgebung, was die meisten Anwender davon abhalten wird, auf die versteckten Informationen zuzugreifen. Um den Zugriff absolut unmöglich zu machen, wählen Sie in der Entwicklungsumgebung das Menü Extras-Eigenschaften von VBAProject an und definieren Sie auf der Registerkarte "Schutz" ein Paßwort. Tagessaldo komfortabel berechnen Versionen: Excel 97, 2000 und 2002 FRAGE: Ich erfasse in einer Excel-Tabelle die Umsätze auf meinem Bankkonto. Als Zusatzinformation möchte ich gerne den jeweiligen Tagessaldo berechnen. Es soll also nicht der Kontostand nach jeder Buchung sondern nur der Abschlusssaldo jedes einzelnen Tages ausgegeben werden. Geht das auch, ohne komplexe Formeln aufstellen zu müssen? M. Durmus ANTWORT: Für diese Aufgabe eignet sich am besten die Teilergebnis-Funktion von Excel. Damit gliedern Sie gleichzeitig Ihre Tabelle, so dass Sie sich bei Bedarf ausschließlich die Tagessaldi anschauen können. Um die Tabellenzeilen sinnvoll gliedern zu können, benötigen Sie in diesem Fall eine Home Home Datumsspalte. Wichtig ist außerdem, dass Ihre Liste Spaltenüberschriften wie "Datum", "Buchungstext", "Betrag" usw. enthält. Falls Sie die Kontobewegungen nicht ohnehin chronologisch erfassen, sortieren Sie die Liste dann zunächst nach dem Datum. Dazu markieren Sie eine beliebige Zelle innerhalb Ihres "Kontobuchs" und wählen das Menü Daten-Sortieren an. Legen Sie die Spalte mit dem Datum als erstes Sortierkriterium fest. Anschließend rufen Sie im Menü Daten den Befehl Teilergebnisse auf. Im zugehörigen Dialogfeld stellen Sie das Dropdown-Feld Gruppieren nach auf die Datumsspalte ein. Im zweiten Dropdown-Feld ist normalerweise schon "Summe" vorgegeben, so dass Sie hier keine Änderungen vornehmen müssen. In der Liste, die je nach Excel-Version mit Bezogen auf oder mit Teilergebnisse addieren zu überschrieben ist, versehen Sie die Spalte der Kontoumsätze mit einem Häkchen. Bei allen anderen Spaltenüberschriften entfernen Sie das Häkchen. Nach einem Klick auf Ok erhalten Sie die gewünschten Tagessaldi. Außerdem gliedert Excel die Tabelle. Ein Mausklick auf die Gliederungsebene der Tagessaldi genügt, um die Details auszublenden und nur die Ergebniszeilen anzuzeigen. Text- ins Zahlenformat umwandeln Versionen: Excel 97, 2000 und 2002 FRAGE: Wenn ich Dateien aus meiner Finanzsoftware zur weiteren Bearbeitung in Excel lade, muss ich immer wieder feststellen, dass einige Zahlenspalten als Texte dargestellt werden. Ich habe es schon mit verschiedenen Austauschformaten versucht. Weder das dBase-Format noch Text- beziehungsweise CSV-Dateien brachten nennenswerte Verbesserungen. Gibt es ein besseres Format für den Datenaustausch oder kann ich die Textwerte wenigstens aus Excel heraus in ein Zahlenformat umwandeln? Ich wäre für jede Lösung dankbar. B. Schönfelder ANTWORT: Beim Importieren von Fremdformaten kommt es häufig vor, dass Zahlenwerte nicht als solche übernommen werden. Sie werden wie Zeichenfolgen behandelt, was daran zu erkennen ist, dass Sie linksbündig in den Zellen ausgerichtet sind. Nur selten nützt es etwas, mit dem Befehl Format-Zellen das Zahlenformat auf "Standard" zurückzusetzen. Dennoch ist diese Methode einen Versuch wert. Falls Sie damit nicht weiter kommen und falls die falsch formatierten Zahlenwerte in einer einzelnen Spalte stehen, sollten Sie folgendes Verfahren ausprobieren: 1. Markieren Sie die Spalte, in der Zahlenwerte fälschlicherweise im Textformat erscheinen. 2. Wählen Sie im Menü Daten den Befehl Text in Spalten an. 3. Wie beim Importieren einer Textdatei können Sie nun die Spalteneinträge konvertieren. Dazu aktivieren Sie auf der ersten Seite des Assistenten die Option Getrennt. 4. Nachdem Sie mit der Schaltfläche Weiter zum zweiten Schritt der Datenumwandlung gelangt sind, markieren Sie als Trennzeichen das Kontrollkästchen Tab (Excel 97) bzw. Tabstopp. Falls noch andere Kontrollkästchen aktiviert sind, entfernen Sie die entsprechenden Häkchen. Dann gehen Sie mit Weiter zur letzten Seite des Assistenten. 5. Achten Sie darauf, dass im Bereich Datenformat der Spalten die Option Standard markiert ist und klicken Sie dann auf Ende (Excel 97) bzw. Fertig stellen. Home Home In den meisten Fällen wandelt Excel die Spalte anschließend in echte Werte um, sodass sie rechtsbündig in den Zellen stehen. Unter Umständen müssen Sie mit dem Befehl Format-Zellen nur noch das Zahlenformat anpassen, damit alle Dezimalstellen angezeigt werden. Sollten Sie mit der Textkonvertierung nicht das gewünschte Resultat erzielen oder sollten die fraglichen Werte nicht untereinander in einer Spalte stehen, können Sie es mit der folgenden Methode versuchen: 1. Suchen Sie eine leere Zelle im Tabellenblatt mit den falsch formatierten Zahlenwerten. 2. Geben Sie die Zahl "1" in diese Zelle ein. 3. Markieren Sie die Zelle mit dem Wert 1 und drücken Sie die Tastenkombination Strg + C, um den Wert zu kopieren. 4. Nun markieren Sie die Zellen mit dem unbrauchbaren Textformat. Es kann sich auch um eine Mehrfachmarkierung handeln, die Sie mit der Maus bei gedrückter Strg-Taste auswählen. 5. Wählen Sie im Menü Bearbeiten den Befehl Inhalte einfügen an. 6. Daraufhin öffnet sich ein Dialogfeld, in dem Sie die Option Multiplizieren markieren. Nach einen Klick auf Ok multipliziert Excel alle markierten Zellen mit dem Wert 1, was dazu führt, dass die Ergebnisse nicht mehr als Text sondern als Zahl ausgegeben werden. Als Excel 2002-Anwender steht Ihnen womöglich eine noch einfachere Umwandlungsfunktion zur Verfügung. Sofern Excel erkennt, dass es sich bei dem Zellinhalt um eine Zahl handelt, diese jedoch als Text angezeigt wird, finden Sie oben links in der betreffenden Zelle einen kleinen Fehlerindikator. Sobald Sie eine so markierte Zelle mit der Maus anklicken, erscheint direkt daneben ein "Smarttag". Nun genügt ein weiterer Mausklick auf das Smarttag, um ein Kontextmenü mit Optionen zur Fehlerbeseitigung zu öffnen. Um das Formatierungsproblem zu lösen, wählen Sie den Befehl In eine Zahl umwandeln an. Auf diese Weise lassen sich übrigens auch ganze Zellbereiche bearbeiten. Textwerte mit Zahlen oder Formeln kombinieren Versionen: Excel 97, 2000 und 2002 FRAGE: Gibt es eine Möglichkeit, in einer Zelle einen feststehenden Text mit dem Inhalt einer beliebigen anderen Zelle zusammenzufassen? - Konkret möchte ich eine Spaltenüberschrift erstellen, in der so etwas wie "Arbeitsstunden (à 32 Euro)" steht. Dabei soll sich die Preisangabe nach dem Inhalt einer anderen Zelle richten. K. Dremel ANTWORT: In Excel können Sie beliebige Verknüpfungen mit dem Operator "&" erstellen. Der Operator kann mit festen Text- oder Zahlenwerten, mit Zellbezügen und sogar mit Tabellenfunktionen eingesetzt werden. Angenommen, Zelle B2 enthält den Wert "32". Nun möchten Sie in Zelle D4 eine Spaltenüberschrift eingeben, die sich auf den Inhalt von Zelle B2 bezieht. Um bei dem Beispiel aus Ihrer Frage zu bleiben, geben Sie in D4 folgende Formel ein: Home Home ="Arbeitsstunden (à "&B2&" Euro)" Als Spaltenüberschrift erscheint der gewünschte Text. Und wenn Sie in Zelle B2 einen anderen Wert (beispielsweise "25") eingeben, ändert sich auch die Beschriftung in Zelle D4 - in diesem Fall in "Arbeitsstunden (à 25 Euro)". Wie Sie an der Formel erkennen, setzen Sie den Operator "&" genau so wie einen herkömmlichen mathematischen Operator (etwa "+" oder "-") ein. Bei Angabe eines Zellbezuges geht im Formelergebnis jedoch die Formatierung der ursprünglichen Zelle verloren. Sie beseitigen das Problem, indem Sie die Tabellenfunktion TEXT zusammen mit dem "&"-Operator einsetzen. Nehmen Sie als Grundlage wieder das oben genannte Beispiel, wobei Sie Zelle B2 das EuroWährungsformat zuweisen. In der Tabelle erscheint der Wert dann als "32,00 €". Auf die Verknüpfungsformel in Zelle D4 hat das keinen Einfluss; dort sehen Sie nur den unformatierten Wert "32". Um auch hier zwei Dezimalstellen plus Währungssymbol anzuzeigen, ändern Sie die Formel in D4 in: ="Arbeitsstunden (à "&TEXT(B2;"#.##0,00 €;-#.##0,00 €")&")" Nun erhalten Sie die gewünschte Spaltenüberschrift "Arbeitsstunden (à 32,00 €)". VBA-Code per Knopfdruck aus einer Excel-Datei entfernen Versionen: Excel 97, 2000 und 2002/XP FRAGE: Ich suche nach einer Möglichkeit, alle Elemente, die irgendwie mit Programmierung zu tun haben, aus einer Arbeitsmappe zu entfernen. Leider gibt es keinen Befehl, mit dem sich alle Makros entfernen ließen. Und mit meinen Programmierkenntnissen habe ich bislang keinen Weg gefunden, auf den VB-Editor mit seinen Modulen, UserForms usw. zuzugreifen. Wissen Sie Rat? K. Soderberg ANTWORT: Es ist korrekt, dass es in Excel keinen Befehl zum Löschen aller Makros, Module oder ähnlichem gibt. So bleibt Ihnen nur, selbst eine VBA-Prozedur zu entwickeln, die diese Aufgabe für Sie erledigt. Dass Sie auf der Suche nach einer Möglichkeit, die Komponenten im Visual Basic-Editor anzusprechen, bislang nicht fündig geworden sind, mag daran liegen, dass Sie es nur mit dem üblichen Objektmodell versucht haben. Die Standardobjekte von Excel und VBA enthalten keine Bezeichner für Module, UserForms usw. Wenn Sie aber einen Verweis auf die erweiterten VBA-Objekte einrichten, können Sie die entsprechenden Komponenten bearbeiten und auch löschen. Die folgenden Schritte zeigen, wie Sie eine Prozedur in der "Persönlichen Makroarbeitsmappe" anlegen, die nicht nur alle Elemente aus dem VBA-Projekt einer Datei löscht, sondern auch den Code aus den integrierten Objekten (beispielsweise "DieseArbeitsmappe" oder "Tabelle1") sowie alle Verweise auf fremde Objektbibliotheken entfernt und anschließend auch noch Blätter beseitigt, die Makrovorlagen oder Excel 5.0-Dialoge enthalten. 1. Starten Sie Excel und wählen Sie das Menü Extras-Makro-Aufzeichnen an. Home Home 2. Als Makroname geben Sie "CodeEntfernen" ein. Außerdem aktivieren Sie im Dropdown-Feld Makro speichern in den Eintrag "Persönliche Makroarbeitsmappe". Falls die Mappe noch nicht existiert, legt Excel sie automatisch an. Und da die "Persönliche Makroarbeitsmappe" immer automatisch mit Excel geladen wird, steht Ihnen die anschließend eingegebene Prozedur jederzeit zur Verfügung. 3. Klicken Sie auf Ok, um die Makroaufzeichnung zu starten. - Beenden Sie den Vorgang jedoch sofort wieder, indem Sie in der Aufzeichnungs-Symbolleiste auf Aufzeichnung beenden klicken. Diese ersten drei Schritte dienen allein dem Zweck, die "Persönliche Makroarbeitsmappe" verfügbar zu machen. 4. Um den "richtigen" Prozedurcode einzugeben, wechseln Sie mit der Tastenkombination Alt + F11 in den Visual Basic-Editor. 5. Dort rufen Sie Extras-Makros auf und im daraufhin angezeigten Dialogfeld öffnen Sie ganz unten das Dropdown-Feld Makros in. Aktivieren Sie den Eintrag "VBAProject (PERSONL.XLS)". Danach markieren Sie den Makronamen "CodeEntfernen". Ein Mausklick auf die Schaltfläche Bearbeiten öffnet schließlich ein Codefenster mit dem zugehörigen Prozedurgerüst. 6. Bevor Sie den Prozedurcode ändern, müssen Sie den Verweis auf die erweiterten VBA-Objekte einrichten. Dazu wählen Sie Extras-Verweise an. Danach suchen Sie in der Liste verfügbarer Verweise nach dem Eintrag "Microsoft Visual Basic for Applications Extensibility" (in Excel 2000 und 2002 mit dem Versionszusatz "5.3"). Versehen Sie den Verweis per Mausklick mit einem Häkchen und bestätigen Sie die Erweiterung mit Ok. 7. Nun wenden Sie sich wieder dem Codefenster zu, in dem Sie den Prozedurcode durch folgende Zeilen ersetzen: Sub CodeEntfernen() Dim objKomponente As VBComponent Dim objKomponenten As VBComponents Dim objVBAProjekt As VBProject Dim objVerweis As Reference Dim objBlatt As Worksheet Dim objDialogblatt As DialogSheet If ActiveWorkbook.Name <> ThisWorkbook.Name Then Set objVBAProjekt = ActiveWorkbook.VBProject Set objKomponenten = objVBAProjekt.VBComponents For Each objKomponente In objKomponenten With objKomponente Select Case .Type Case vbext_ct_StdModule, _ vbext_ct_ClassModule, _ vbext_ct_MSForm objKomponenten.Remove objKomponente Case vbext_ct_Document .CodeModule.DeleteLines _ 1, .CodeModule.CountOfLines End Select End With Next For Each objVerweis In objVBAProjekt.References Home Home If Not objVerweis.BuiltIn Then objVBAProjekt.References.Remove objVerweis End If Next Application.DisplayAlerts = False For Each objBlatt In Excel4MacroSheets objBlatt.Delete Next For Each objDialogblatt In DialogSheets objDialogblatt.Delete Next Application.DisplayAlerts = True End If End Sub · Verlassen Sie den VB-Editor über das Menü Datei und den Befehl Schließen und zurück zu Microsoft Excel. Jetzt können Sie eine beliebige Arbeitsmappe öffnen, aus der Sie die überflüssigen Code-Elemente entfernen wollen. Die Prozedur "CodeEntfernen" befreit sie auf Knopfdruck von dem Ballast. Dazu wählen Sie in Excel Extras-Makro-Makros an. Anschließend starten Sie die Prozedur "PERSONL.XLS!CodeEntfernen" per Doppelklick. Dieses Verfahren funktioniert bei allen Arbeitsmappen bis auf die "Persönliche Makroarbeitsmappe". Die If-Abfrage am Anfang der Prozedur sorgt dafür, dass sich der Prozedurcode nicht selbst zerstören kann. Achten Sie beim Beenden von Excel unbedingt darauf, die Änderungen an der "Persönlichen Makroarbeitsmappe" zu speichern. Excel blendet selbstständig eine entsprechende Meldung ein, die Sie dann mit Ja beantworten. Verknüpfungen optimal im Griff Versionen: Excel 97, 2000 und 2002 Verknüpfungen zwischen Arbeitsmappen lassen sich in Excel mit wenigen Mausklicks erstellen. Wenn Sie von dieser Möglichkeit häufig Gebrauch machen, werden Ihnen die folgenden Tips zur Lösung von zwei häufig auftretenden Problemen sicherlich nützlich sein: Bei Tabellen, die Sie vor längerer Zeit erstellt haben, stehen Sie häufig vor der Frage, welche Formeln überhaupt Verknüpfungen verwenden. Es gibt sogar Situationen, in denen Sie gezielt die Bezüge auf externe Dateien entfernen wollen, doch ein oder zwei Verknüpfungen lassen sich einfach nicht ausfindig machen und beim Öffnen der Datei werden Sie jedesmal wieder fragt, ob eine Aktualisierung erwünscht ist. Mit der folgenden Technik suchen Sie gezielt nach den Formeln, die einen Bezug auf externe Dateien enthalten (bitte beachten Sie, daß die folgende Technik auch in Excel 2002 funktioniert, Ihnen hier aber neue Möglichkeit rund um Verknüpfungen zur Verfügung stehen, die wir im Home Home Bonus-Tip dieser Ausgabe näher erläutern): 4. Markieren Sie den Bereich, den Excel durchsuchen soll. Um alle Zellen und Formeln zu durchsuchen, müssen Sie keine Markierung vornehmen. 5. Wählen Sie das Menü Bearbeiten-Suchen an, oder drücken Sie Strg+F. 6. Geben Sie in das Feld Suchen nach das Ausrufezeichen "!" (ohne Anführungszeichen) ein und markieren Sie in der Dropdown-Liste Suchen in den Eintrag "Formeln". Außerdem sollten Sie sicherstellen, daß das Kontrollkästchen Nur ganze Zellen suchen (Excel 97/2000) oder Gesamten Zellinhalt vergleichen (Excel 2002) nicht aktiviert ist! 7. Nach Weitersuchen setzt Excel den Cursor auf die erste Zelle mit einer Verknüpfung. Wenn es sich dabei um eine Verknüpfung handelt, die Sie entfernen möchten, verlassen Sie den Suchen-Dialog mit Schließen und ersetzen den externen Bezug durch einen konstanten Wert. Danach können Sie Bearbeiten-Suchen erneut aufrufen und die Suche fortsetzen. Handelt es sich bei der Fundstelle noch nicht um den gesuchten Bezug, setzen Sie den Vorgang einfach mit Weitersuchen fort. Unser zweiter Tip beschäftigt sich mit der schnellsten Technik zum Prüfen und Öffnen der verknüpften Datei. So wollen Sie häufig feststellen, welche Bedeutung ein bestimmter externer Bezug hat und wie er sich in der Quelltabelle errechnet. Neben dem manuellen Öffnen der entsprechenden Datei, bietet sich zunächst einmal der Weg über das Dialogfeld BearbeitenVerknüpfungen an. Hier werden alle Dateien aufgelistet, zu denen Verknüpfungen bestehen. Sie markieren lediglich den gewünschten Eintrag und klicken auf Quelle öffnen, um auf die entsprechende Datei zugreifen zu können. Der Nachteil dabei: Sie müssen manuell die Zelle bzw. den Bereich ausfindig machen, aus dem Daten ausgelesen werden. Interessant ist daher die folgende Technik, bei der die Quelldatei nicht nur geöffnet, sondern gleichzeitig auch der entsprechende Bereich markiert wird: 1. Wählen Sie das Menü Extras-Optionen an, und wechseln Sie auf die Registerkarte "Bearbeiten". 2. Schalten Sie das Kontrollkästchen Direkte Zellbearbeitung aktivieren aus, und bestätigen Sie mit Ok. 3. Klicken Sie nun ganz einfach die Zelle zweimal an, die den externen Bezug auf die gewünschte Datei enthält. Excel öffnet die Datenquelle daraufhin und markiert den verknüpften Bereich bzw. die verknüpfte Zelle. Der einzige Nachteil dieser Technik: Sie müssen auf die direkte Zellbearbeitung verzichten. Wenn Sie also zweimal auf eine Zelle klicken oder F2 drücken, nehmen Sie die Änderungen am aktuellen Zellinhalt nicht mehr direkt im Arbeitsplatz, sondern in der Bearbeitungszeile vor. Verlaufsbalken in Ihren VBA-Makros Versionen: Excel 97, 2000 und 2002/XP Werden in Excel längere Makros abgearbeitet, sollten Sie sich überlegen, ob Sie nicht einen Fortschrittsbalken anbieten möchten. Bei länger laufenden Makros ist es empfehlenswert, den Anwender während des Makroablaufs mit gelegentlichen Meldungen in der Statusleiste oder sogar einem Verlaufsbalken über die einzelnen Schritte bzw. den Verlauf des Makros in Kenntnis zu setzen. Eine Methode für die Erstellung eines Laufbalkens ist die Nutzung eines zusätzlichen Steuerelements, Home Home das Sie in Windows bestimmt schon öfters gesehen haben, wenn Sie Programme installiert haben. Das Steuerelement "Microsoft Progressbar Control" können Sie für den Einsatz bei UserForms aktivieren, indem Sie das Symbol Weitere Steuerelemente in der Toolbox anklicken und das Steuerelement aus der Liste auswählen. Fügen Sie dieses Steuerelement und eine Schaltfläche in einer neuen Userform ein. Fügen Sie zusätzlich noch eine Schaltfläche in die Userform ein und führen Sie einen Doppelkick auf diese Schaltfläche durch. Hinterlegen Sie dann den folgenden Code: Private Sub CommandButton1_Click() Dim i As Integer Me!ProgressBar1.Min = 0 Me!ProgressBar1.Max = 10000 For i = Me!ProgressBar1.Min To Me!ProgressBar1.Max Me!ProgressBar1.Value = i i=i+1 Next Me!ProgressBar1.Value = 0 End Sub Mithilfe der Eigenschaften Min bzw. Max bestimmen Sie den Start- bzw. Endwert des Steuerelements. Mit diesen beiden Informationen können Sie sich dann eine Schleife zusammenstellen, die so lange durchlaufen wird, bis Max-Wert erreicht ist. Läuft Ihnen der Fortschrittbalken zu schnell, erhöhen Sie den Max-Wert einfach. Den Fortschrittbalken bekommen Sie automatisch zum Laufen, wenn Sie die Eigenschaft "Value" des Fortschrittbalkens füttern. Verweis auf letzte Zeile in anderem Tabellenblatt (dynamisch) Ich möchte aus einer Tabelle auf die jeweils letzte Zeile einer anderen Verweisen, wobei die Tabelle, die die Informationen liefert, laufend ergänzt wird. mal davon ausgehend, das die Zeilen in der Quelltabelle lückenlos ausgefüllt sind: =INDIREKT("tabelle2!A"&ANZAHL2(Tabelle2!A:A)) Werte und Bereiche komfortabel überwachen Versionen: Excel 97, 2000, 2002/XP und 2003 Umfangreiche Kalkulationsmodelle haben Sie am besten im Griff, wenn Sie die Schlüsselergebnisse aus einer oder mehreren Tabellen möglichst einfach kontrollieren können. Wie entwickeln sich beispielsweise die Kosten einer Werbeaktion, wenn Sie bestimmte Parameter ändern oder wie viele Budgetpositionen müssen Sie noch ändern, bis das gewünschte Ergebnis erzielt ist? Excel aktualisiert die Formeln mit diesen Informationen zwar immer automatische, sobald Sie die Ausgangswerte ändern, aber in der Regel müssen Sie nach einer Änderung zunächst wieder in den entsprechenden Bereich scrollen, das Tabellenblatt wechseln oder gar eine andere Datei aktivieren, um das aktuelle Ergebnis zu prüfen. In diesem Tipp der Woche möchten wir Ihnen einige interessante Techniken vorstellen, mit deren Hilfe Sie wichtige Werte in Ihren Kalkulationsmodellen schneller und komfortabler überwachen können. Unabhängig davon, ob sich die gewünschten Informationen in derselben Tabelle oder in einer verknüpften Datei befinden, haben Sie die aktuellen Formelergebnisse immer um Blick und Home Home können die Auswirkungen jeder Änderung sofort beobachten. Und so müssen Sie dazu vorgehen: 1. Markieren Sie die Zellen, die Sie überwachen möchten. Bitte beachten Sie, dass eine Mehrfachauswahl an dieser Stelle nicht erlaubt ist. Wenn sich die fraglichen Werte also in mehreren nicht zusammenhängenden Bereichen befinden, müssen Sie noch einen zusätzlichen Arbeitsschritt einplanen. Legen Sie entweder in einem ungenutzten Bereich einer bereits vorhandenen oder in einer neuen Tabelle einen Bereich an, in dem Sie die gewünschten Informationen in mehreren untereinander liegenden Zellen zusammenfassen. Sie verwenden dabei einfach Formel in der Form "=H6", um beispielsweise das aktuelle Ergebnis aus Zelle H6 zu übernehmen. 2. Wählen Sie das Menü Bearbeiten-Kopieren an. 3. Scrollen Sie jetzt in den Tabellenbereich, in dem Sie die Inhalte der markierten Zellen zur Überwachung anzeigen möchten. Auf Wunsch kann es sich dabei um ein anderes Tabellenblatt oder sogar eine andere Arbeitsmappe handeln. Klicken Sie eine beliebige Zelle in dem Bereich an, in dem die Informationen eingefügt werden sollen. Dabei kann es sich auch um ausgefüllte Zellen handeln, denn die Inhalte werden beim nachfolgenden Einfügen nicht überschrieben! 4. Drücken Sie die Umschalt-Tasten und halten Sie sie gedrückt, während Sie das Menü Bearbeiten anwählen. 5. Sie finden hier nun ein neues Menü Verknüpftes Bild einfügen (Excel 2000/2002/2003) bzw. Verknüpfte Grafik einfügen (Excel 97), das Sie nun anwählen. 6. An der ausgewählten Position erscheint daraufhin eine Grafik mit den Inhalten des markierten Bereiches. Sie können dieses Bild ganz einfach mit der Maus anklicken und an eine beliebige Position verschieben. Die Inhalte sind mit den entsprechenden Zellen verknüpft, so dass Sie jede Änderung im Blick haben. Wenn Sie diese interessante Möglichkeit häufiger nutzen möchten, sollten Sie einen weiteren Trick kennen: Sie können die Symbolleiste von um ein kleines Kamera-Symbol erweitern, mit dessen Hilfe Sie eine verknüpfte Grafik mit Zellinhalten noch schneller anlegen können: 1. Klicken Sie mit der rechten Maustaste in eine beliebige Symbolleiste und wählen Sie das Kontextmenü Anpassen an. 2. Wechseln Sie auf die Registerkarte "Befehle" und markieren Sie den Eintrag "Extras" in der Liste Kategorien. 3. Suchen Sie in der Liste Befehle nach dem Eintrag "Kamera". Klicken Sie ihn an und ziehen Sie ihn bei gedrückter linker Maustaste an die gewünschte Position in einer der aktuellen Symbolleisten von Excel und lasse Sie die Maustaste los. Wenn Sie in Zukunft einen Bereich überwachen möchten, markieren Sie die gewünschten Zellen, klicken auf das Kamera-Symbol und klicken dann an die Stelle, an der die Grafik erscheinen soll. Schneller und einfacher geht es nicht... Unabhängig davon, welche der oben beschriebenen Techniken Sie verwenden, erhalten Sie in beiden Fällen als Ergebnis eine Grafik mit den gewünschten Zellinhalten. Sie haben daher wie bei jeder anderen Grafik die Möglichkeit, das Kontextmenü Grafik formatieren zu nutzen, um den überwachten Bereich durch eine spezielle Formatierung (Linien/Farben) hervorzuheben. Sowohl das Menü Bearbeiten-Verknüpffte Grafik einfügen als auch das Kamera-Symbol stehen Home Home Ihnen durchgängig in allen Excel-Versionen von 97 bis 2003 zur Verfügung. In Excel 2002/XP und 2003 gibt es zusätzlich noch eine interessante Alternative: 1. Klicken Sie eine beliebige Symbolleiste mit der rechten Maustaste an und wählen Sie den Eintrag "Überwachungsfenster" aus. 2. Excel blendet daraufhin eine Liste ein, in die Sie beliebig viele Zellen/Bereiche zur ständigen Überwachung aufnehmen können. Zu diesem Zweck klicken Sie einfach auf Überwachung hinzufügen, markieren den gewünschten Bereich und bestätigen mit Hinzufügen. 3. Im Überwachungsfenster erscheinen daraufhin die Bezüge der entsprechenden Zellen samt aktuellen Ergebnis und eventuell vorhandener Formel. Außerdem können Sie den Namen der Arbeitsmappe und der entsprechenden Tabelle ablesen. Möchten Sie später eine dieser Überwachungen entfernen, markieren Sie den entsprechenden Listeneintrag und klicken auf Überwachung löschen. Übrigens: Sobald Sie eine Arbeitsmappe schließen, verschwinden automatisch die entsprechenden Einträge im Überwachungsfenster. Die von Ihnen festgelegten Überwachungszellen bleiben aber gespeichert und erscheinen wieder im Fenster, sobald Sie die Arbeitsmappe öffnen. Werteanzahl und Summe je nach Auswahlkriterium Versionen: Excel 97, 2000 und 2002 FRAGE: Ich habe eine Liste mit Bestellungen angelegt und möchte jetzt wissen, wie viele Bestellungen in einem bestimmten Preissegment liegen, beispielsweise alle Bestellungen mit einem Umfang zwischen 100 und 200 Euro. Trotz diverser Experimente bin ich nicht weiter gekommen. Können Sie mir helfen? U. Basedow ANTWORT: Die Lösung ist eine Arrayformel, in der Sie die Zellinhalte mit Ihrem Auswahlkriterium vergleichen und anschließend die Summe aus allen Vergleichsergebnissen bilden. Das klingt komplizierter als es ist, vor allem wenn Sie sich folgendes Beispiel anschauen. Angenommen, Sie haben verschiedene Bestellsummen im Bereich C2:C20 eingegeben. Nun wollen Sie sich in Zelle E2 anzeigen lassen, wie viele dieser Bestellungen ein Volumen zwischen 100 und 200 Euro haben. Dazu tragen Sie in E2 folgende Formel ein: =SUMME((C2:C20>=100)*(C2:C20<=200)) Aber halt! Damit die Formel als Arrayformel erkannt wird, müssen Sie sie mit der Tastenkombination Strg+Umschalt+Return abschließen. Ihre Eingabe ist korrekt, wenn Excel die Formel in der Bearbeitungszeile mit geschweiften Klammern ({...}) umgibt. Dann erhalten Sie sofort die gesuchte Werteanzahl. Das Prinzip dahinter ist Folgendes: Excel vergleicht Zelle für Zelle des Bereichs C2:C20 mit den Auswahlkriterien. Das Ergebnis ist jeweils ein logischer Wert - entweder "Wahr" oder "Falsch". Das wiederum entspricht den mathematischen Werten "1" oder "0". Die Multiplikation lautet also entweder "0 * 0", "1 * 0", "0 * 1" oder "1 * 1". Nur im letzten Fall, das heißt wenn beide Vergleiche "Wahr" sind, liefert die Multiplikation den Wert "1". Home Home Da alle Zellen des angegebenen Bereichs geprüft werden, erhalten Sie schließlich eine Folge von Nullen und Einsen. Die Einzelwerte werden dann einfach von der Summenfunktion addiert und das Ergebnis entspricht der Anzahl der Zellen, die in den Kriterienbereich fallen. Aufgrund der Eingabe als Arrayformel kann Excel die Auswertung in einer einzigen Zelle vornehmen. Wenn Sie wollen, können Sie die Funktionalität sogar noch erweitern und in einer weiteren Zelle die Summe aller Bestellungen innerhalb eines bestimmten Wertebereichs ermitteln. Um zum Beispiel auszurechnen, wie hoch die Summe der Bestellungen zwischen 100 und 200 Euro ist, geben Sie in Zelle E3 diese Arrayformel (!) ein: =SUMME((C2:C20>=100)*(C2:C20<=200)*C2:C20) Wiederholen-Formate Versionen: Excel 97, 2000 und 2002 FRAGE: Nachdem ich eine Zelle beispielsweise fett formatiert habe, möchte ich das selbe Format möglichst schnell diversen anderen Zellen zuweisen. Praktisch wäre da der Einsatz der Wiederholen-Schaltfläche in der Excel-Symbolleiste. Leider funktioniert sie nicht. Nur das Rückgängig-Symbol ist verfügbar. Muss man erst einen Trick anwenden, um das WiederholenSymbol zu aktivieren? A. Elsner ANTWORT: Das von Ihnen beschriebene Verhalten lässt sich leider nicht abstellen. Das Wiederholen-Symbol ist erst verfügbar, sobald Sie eine Aktion mit der Rückgängig-Schaltfläche aus der Excel-Symbolleiste, mit dem entsprechenden Befehl im Menü Bearbeiten oder mit der Tastenkombination Strg+Z zurückgenommen haben. Um eine Formatierung trotzdem so schnell wie möglich in anderen Zellen zu wiederholen, wählen Sie entweder das Menü Bearbeiten-Wiederholen: <Aktion> an oder, - was wirklich schnell geht, - Sie drücken Strg+Y. Word 2002 verliert Zahlenformatierungen beim Seriendruck Versionen: Excel 97, 2000 und 2002 FRAGE: Seitdem ich Office XP einsetze, funktioniert der Seriendruck nicht mehr fehlerfrei. Wenn ich in einem Word-Serienbrief eine Excel-Tabelle als Datenquelle definiere, werden zwar die Felder erkannt und in Word eingefügt. Aber dabei gehen sämtliche Zahlenformate verloren. Währungsangaben erscheinen als reine Zahlenwerte und Datumsangaben im amerikanischen Format "Monat/Tag/Jahr". Wenn das Datum fehlt, zeigt Word sogar den unsinnigen Wert "12:00:00 AM" an. Wie kann ich die ursprüngliche Formatierung aus der Excel-Tabelle wieder herstellen? J. Schmidt ANTWORT: Grund für den Verlust der Zahlen- und Datumsformatierungen ist der Importfilter, den Word 2002 standardmäßig benutzt. Leider haben Sie im neu gestalteten "Seriendruck- Home Home Assistenten" keine Möglichkeit, die Importweise zu beeinflussen, was dazu führt, dass Sie im Word-Dokument unformatierte Zahlenwerte erhalten. Nur wenn Sie in den Word-Optionen einen Schalter setzen, erlaubt der Seriendruck-Assistent die manuelle Auswahl des Importverfahrens. Auf diese Weise kommen Sie zum gewünschten Resultat mit den Originalformatierungen aus der Excel-Tabelle. Und so gehen Sie vor: 1. Starten Sie Word und rufen Sie Extras-Optionen auf. 2. Aktivieren Sie auf der Registerkarte "Allgemein" das Kontrollkästchen Konvertierung beim Öffnen bestätigen. Übernehmen Sie die Änderung mit Ok. 3. Legen Sie ein neues Dokument für den Seriendruck an. 4. Starten Sie den Seriendruck-Assistenten per Extras-Briefe und Sendungen-SeriendruckAssistent. 5. Legen Sie die Optionen der ersten beiden Schritte nach Belieben fest, um zum Beispiel einen "Brief" im "aktuellen Dokument" zu erstellen. 6. In Schritt 3 des Assistenten öffnen Sie per Durchsuchen die Excel-Datei, die als Datenquelle dienen soll. Sie werden feststellen, dass Sie nicht sofort zum nächsten Schritt des Assistenten gelangen, sondern in einem Dialogfeld das Importverfahren auswählen können. Damit die Formatierungen aus Excel beibehalten werden, markieren Sie "MS-ExcelArbeitsblätter über DDE", was Sie mit Ok bestätigen. 7. Als nächstes bestimmen Sie den Tabellenbereich, der die Daten für den Serienbrief enthält idealerweise ein benannter Bereich. 8. Ein weiteres Dialogfeld präsentiert nun die verfügbaren Datensätze. Um alle Sätze in den Seriendruck einfließen zu lassen, fahren Sie einfach mit Ok fort. - Achten Sie aber auf die angezeigten Feldinhalte: Schon hier erkennen Sie, dass die Zahlenformate mit dem Original übereinstimmen. 9. Fahren Sie wie gewohnt im Seriendruck-Assistenten fort, um den Text und die Seriendruckfelder einzufügen. 10. In der Vorschau können Sie noch einmal überprüfen, ob die Zahlen- und Datumsangaben Ihren Vorstellungen entsprechen. Da Sie die Daten per DDE importiert haben, dürfte das Resultat Ihren Vorstellungen entsprechen. ZÄHLENWENN mit mehreren Bedingungen (273) Lösung Zu durchsuchende Spalten: A und B {=SUMME(WENN((A1:A100="x")*(B1:B100="y");1))} ohne WENN: {=SUMME((A1:A100="x")*(B1:B100="y"))} oder: {=SUMME(N(A1:A100&B1:B100="x"&"y"))} auch ohne Array möglich (ausgetüftelt von Jürgen Recker): =SUMMENPRODUKT((A1:A100="x")*(B1:B100="y")) Home Home Durch die Multiplikation(en) sind natürlich auch mehr als 2 Bedingungen kombinierbar. Zeichenketten komfortabel per VBA verarbeiten Versionen: Excel 2000 und 2002 Bei der Entwicklung von Lösungen oder einzelnen Funktionen zur Automatisierung Ihrer Arbeitsmappen stehen Sie immer wieder vor dem Problem, die Inhalte einer Zeichenkette wie zum Beispiel "Dr. Peter Hoffmann" in ihre einzelnen Bestandteile wie "Titel", "Vorname" und "Nachname" zerlegen zu müssen. Ab Excel 2000 können Sie dazu die wenig bekannte Funktion "Split()" einsetzen. Um sich mit der Arbeitsweise von "Split()" vertraut zu machen, geben Sie zunächst folgende Funktion in einem beliebigen Modul ein: Function SplitTest(strText As String) As Integer Dim X As Variant, I As Integer X = Split(strText) For I = 0 To UBound(X) Debug.Print X(I) Next I SplitTest = UBound(X) + 1 End Function Die Funktion erwartet als Parameter eine beliebige Zeichenkette. Diese wird dann über "Split()" in ein Array konvertiert. "UBound()" gibt anschließend Auskunft, wie viele Elemente das Array beinhaltet. Gezählt wird ab "0", so dass "UBound() +1" die Anzahl der Wörter in der Zeichenkette liefert. Diese Angabe verwenden wir hier, um die einzelnen Wörter in einer Schleife aus dem Array im Direktbereich auszugeben. Die Eingabe von ? SplitTest("Dies ist ein Test!") im Direktfenster (Strg+G) zeigt dann zum Beispiel folgendes Ergebnis: · · · · · Dies ist ein Test! 4 Um beispielsweise nur die Anzahl Wörter in einer Zeichenkette zu zählen, setzen Sie "Split()" folgendermaßen ein: Function SplitCount(strText As String) As Integer Dim X As Variant X = Split(strText) SplitCount = UBound(X) + 1 Home Home End Function Das Ergebnis ist die Anzahl Wörter oder "0", wenn die Zeichenkette leer ist. Ähnlich einfach können Sie mit "Split()" bestimmte Wörter aus einer Zeichenkette extrahieren: Function SplitExtract(strText As String, _ intNum As Integer) As String Dim X As Variant X = Split(strText) If intNum > 0 And intNum - 1 <= UBound(X) Then SplitExtract = X(intNum - 1) Else SplitExtract = "" End If End Function Wenn Sie im Direktbereich einmal ? SplitExtract("Dr. Peter Hoffmann",2) eingeben, wird als Ergebnis "Peter" ausgegeben. Die Kombination dieser beiden Funktionen können Sie beispielsweise einsetzen, um beim Import von Daten Elemente wie Titel, Vornamen und Nachnamen aus Adressen korrekt in Ihre Tabelle zu schreiben: If SplitCount(strInput) = 3 Then ..... ActiveSheet.Cells(1,2) = SplitExtract(strInput, 1) ActiveSheet.Cells(2,2)= SplitExtract(strInput, 2) ActiveSheet.Cells(3,2) = SplitExtract(strInput, 3) ..... Else 'nur Vorname und Nachname ..... ActiveSheet.Cells(2,2) = SplitExtract(strInput, 1) ActiveSheet.Cells(3,2) = SplitExtract(strInput, 2) ..... End If Die gezeigten Funktionen gehen jeweils davon aus, dass zwischen den Wörter immer ein Leerzeichen als Trennzeichen vorhanden ist. Oftmals werden aber andere Trennzeichen wie Kommas oder Semikolons verwendet. Soll "Split()" nach diesen Trennzeichen splitten, können Sie das über einen zweiten, optionalen Parameter angeben. Die folgende Funktion liefert beispielsweise die einzelnen Felder aus einer CSV-Zeile "Nachname;Vorname;Strasse;PLZ;Ort" als Array: Home Home Function SplitCSVFieldnames(strText As String, _ strSeparator As String) As Variant Dim X As Variant X = Split(strText, strSeparator) SplitCSVFieldnames = X End Function Ein Aufruf wie zum Beispiel der folgende erlaubt dann die Abarbeitung der einzelnen Felder je nach Anforderung: Sub Test() ..... Open "Test.txt" For Input As #1 Line Input #1, strInput arrFelder = SplitCSVFieldnamesd(strInput, ";") strNachname = arrFelder(0) strVorname = arrFelder(1) strStrasse = arrFelder(2) ..... End Sub Zeitangaben über 24 Stunden summieren Versionen: Excel 97, 2000 und 2002 FRAGE: Wir setzen Excel zur Erfassung von Arbeitszeiten ein. In einigen Fällen gibt es dabei Probleme: Wenn ich beispielsweise die Zeiten 10:00, 10:00 und 10:00 in eine Tabelle eingebe und summiere, ist das Ergebnis nicht wie erwartet 30:00 sondern 06:00. ANTWORT: Diese Frage gehört zweifellos ganz an den Anfang jeder FAQ-Sammlung. Excel wird in vielen Fällen zum Addieren von Zeitangaben eingesetzt. Dabei taucht immer wieder dasselbe Problem auf: Solange die addierten Zeitangaben kleiner als 24 Stunden sind, stimmt das Ergebnis. Bei größeren Werten wird immer nur der über 24 hinausgehende Anteil angezeigt. Die Lösung: Markieren Sie die Zelle, in der Sie die Zeiten summieren, wählen Sie das Menü Format-Zellen an, wechseln Sie auf die Registerkarte "Zahlen" und markieren Sie die Kategorie "Uhrzeit". In der Liste Formate wählen Sie den Eintrag "37:30:55" an und bestätigen mit Ok. Excel zeigt in der Tabelle daraufhin das korrekte Ergebnis an, weil Sie nun ein Zahlenformat ausgewählt haben, das Zeiten über 24 Stunden darstellen kann. Das standardmäßig von Excel verwendete Format ist nur für Uhrzeiten ausgelegt und endet dementsprechend mit 24:00 Uhr. Zellinhalte komplett löschen Versionen: Excel 97, 2000 und 2002 Home Home FRAGE: Wenn ich eine oder mehrere Zellen in einer Tabelle markiere und dann Entf zum Löschen drücke, werden die Zellinhalte wie gewünscht entfernt. Alle Formatierungen, die vorher zugewiesen waren, bleiben allerdings erhalten. Wie kann ich auch diese Zuweisungen löschen? G. Murat ANTWORT: Tatsächlich ist die Entf-Taste in Excel so belegt, daß nur die Zellinhalte und nicht die Formatierungen gelöscht werden. Um das zu erreichen, wählen Sie nach dem Markieren der gewünschten Zelle bzw. des Bereiches, das Menü Bearbeiten-Löschen-Alles an. Zirkelbezüge automatisch auflisten Versionen: Excel 97, 2000 und 2002 Vor allem in komplexen Kalkulationsmodellen kann es schnell passieren, daß Excel plötzlich eine Fehlermeldung über nicht auflösbare Zirkelbezüge anzeigt. Bei einem Zirkelbezug hängt die Berechnung einer Formel direkt oder indirekt vom Ergebnis der Zelle ab, in die Sie die Formel eingetragen haben, so daß eine normale Berechnung nicht möglich ist. So erzeugen Sie beispielsweise einen Zirkelbezug, wenn Sie die folgende Formel in Zelle B20 eintragen: =B20*2 In diesem Fall läßt sich die Ursache des Problems auf den ersten Blick erkennen, aber es gibt Modelle, in denen der Fehler nicht so eindeutig zu finden ist. Außerdem kommt ein Zirkelbezug selten allein, so daß die in der Statuszeile oder der Symbolleiste "Zirkelbezug" angezeigte Zelle wenig hilfreich ist. In dem folgenden Listing finden Sie daher eine VBA-Prozedur, die eine wertvolle Hilfe bei der Fehlersuche in umfangreichen Kalkulationsmodellen sein wird: Sub ZirkelbezuegeAuflisten() Set AktBlatt = ActiveSheet Sheets.Add Set NeuesBlatt = ActiveSheet Zielbereich = ActiveCell.Address AktBlatt.Activate Zeilenzähler = 0 On Error GoTo MakroNeuAufnehmen For Each Zelle In AktBlatt.UsedRange If Left(Zelle.Formula, 1) = "=" Then Ergebnis = Intersect(AktBlatt.Range(Zelle.Address), _ AktBlatt.Range(Zelle.Precedents.Address)) NeuesBlatt.Range(Zielbereich).Offset(Zeilenzähler, _ Home Home 0).Value = Zelle.Address(False, False) NeuesBlatt.Range(Zielbereich).Offset(Zeilenzähler, _ 1).Value = " " & Zelle.Formula Zeilenzähler = Zeilenzähler + 1 Weiter: End If Next Exit Sub MakroNeuAufnehmen: Resume Weiter End Sub Nachdem Sie auf eine beliebige Zelle innerhalb der entsprechenden Tabelle geklickt und das Makro gestartet haben, wird automatisch ein neues Arbeitsblatt erzeugt, in dem alle Zellen mit Zirkelbezügen sowie den entsprechenden Formeln aufgeführt sind. Die Funktionsweise des Makros ist schnell erklärt: In einer For-Each-Schleife wird jede Zelle des aktiven Bereiches (UsedRange) daraufhin überprüft, ob sie eine Formel enthält oder nicht. Sollte das der Fall stellt das Makro mit Hilfe der Intersect-Methode fest, ob es einen Schnittpunkt zwischen den Vorgängerzellen (Precedents) und dem aktuellen Bezug gibt. Wenn diese Konstellation eintritt, liegt ein Zirkelbezug vor und der Bezug sowie die Formel werden in das neue Arbeitsblatt eingetragen. Ist kein Schnittpunkt vorhanden, wäre das Ergebnis von "Intersect" normalerweise eine Fehlermeldung, aber in unserem Fall wird der Fehler mit Hilfe von "On Error Goto" auf eine Fehlerbehandlungsroutine gelenkt, die den nächsten Schleifendurchlauf startet. Zufallszahlen komfortabel erzeugen Versionen: Excel 97, 2000 und 2002 Sie suchen nach Testdaten für Ihr Kalkulationsmodell oder möchten verschiedene Präsentationsgrafiken mit beliebigen Zahlen erstellen? Bisher haben Sie die Werte manuell eingegeben, aber tatsächlich verfügt Excel über eine wenig bekannte Funktion, die diese Aufgabe voll automatisch übernehmen kann: 1. Wählen Sie das Menü Extras-Analyse-Funktionen an. Sollte dieser Menüpunkt nicht zur Verfügung stehen, müssen Sie das entsprechende Add-In zunächst aktivieren. Rufen Sie dazu das Dialogfeld Extras-Add-In-Manager (Extras-Add-Ins in Excel 2002) auf und schalten Sie das Kontrollkästchen neben dem Eintrag "Analyse-Funktionen" ein. Anschließend bestätigen Sie mit Ok. 2. Excel zeigt eine umfangreiche Liste mit Analysefunktionen an. Markieren Sie in diesem Fall den Eintrag "Zufallszahlengenerierung" und bestätigen Sie mit Ok. 3. Nach wenigen Augenblicken erscheint ein Dialogfeld, in dem Sie nun die gewünschten Parameter für die Zufallszahlen festlegen können. Als erstes geben Sie neben Anzahl der Home Home 4. 5. 6. 7. 8. Variablen die gewünschte Anzahl von Spalten und neben Anzahl der Zufallszahlen die Anzahl von Zeilen ein. Im Kombinationsfeld Verteilung werden Ihnen verschiedene Verfahren zur Generierung der Zufallszahlen angeboten, die Sie unter anderem auch zur Wahrscheinlichkeitsrechnung verwenden können. Für die Erzeugung von normalen Testdaten markieren Sie den Eintrag "Gleichverteilt". Legen Sie unter "Parameter" den Zahlenbereich für die Zufallszahlen fest. Geben Sie beispielsweise "10000" und "50000" ein, um Zufallszahlen in diesem Wertebereich zu generieren. Auf Wunsch können Sie einen Ausgangswert bestimmen, der für die Berechnung verwendet wird. Unter "Ausgabe" stehen werden Ihnen schließlich noch drei Optionen für das Ziel der Zufallszahlengenerierung angeboten: Lassen Sie die Werte entweder in einen beliebigen Bereich des aktuellen Tabellenblatts, in ein neues Tabellenblatt oder in eine neue Arbeitsmappe schreiben. Nachdem Sie Ihre Einstellungen mit Ok bestätigt haben, erstellt Excel voll automatisch die gewünschten Zufallszahlen. Zwei Zellen zusammenfügen mit Zeilenwechsel "=A1 & ZEICHEN(10) & A2" in C1 eintragen (natürlich ohne Anführungsstriche), anschliessend unter Zellformat =>Ausrichtung schauen, dass Zeilenumbruch aktiviert ist Home