2k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo!

ich habe als leidenschaftlicher Bastler mit eurer Hilfe eine Excel-Datei gebaut, die mir als Student sagt, wieviel Geld ich noch für den Monat übrig habe.

Die letzte eingebaute Funktion ist eine Archiv-Funktion, mit der per VBA die Ausgaben eines Monats in ein Archiv (extra Tabellenblatt) kopiert werden bevor, auf Knopfdruck, ein neuer Monat begonnen wird.

Das funktioniert auch alles Super!

Doch nach zwei Tagen ohne Änderungen, Fehlerbehebungen und sonstigen Tüfteleien an der Datei wird mir langweilig. Da muss noch was passieren.


Jetzt kam mir heute die Idee einer Suchfunktion für das Archiv. Ein möglicher Anwendungsfall wäre zum Beispiel die Berechnung der Ausgaben für "Tanken" über einen bestimmten Zeitraum.

Zu dem Aufbau meines Archiv Tabellenblattes:

Die Spalten A + B sind frei und werden bisher ausgeblendet, stehen also für etwaige notwendige Zwecke (vllt. Formular, Buttons etc.) zur Verfügung.

Die Spalten C+D sind für einen Monat (z.B. Dezember 2009).
Darunter folgen ein paar Informationen zu meinen festen Einkünften und Fixkosten in dem Monat.

Der nächste Monat der "archiviert" wird, wird folglich automatisch in die Zellen E+F kopiert usw.

Ab Zeile 15 (immer) geht es dann los:
In Zelle C15 (verbunden mit D15) steht das Datum vom ersten Tag es Monats (hier 01.12.2009). In den Zellen C16:C25 stehen die Beträge von Ausgaben die ich an dem Tag hatte (zum Beispiel "-38,19"). In den Zellen D16:C25 stehen die dazugehörigen Erklärungen (zum Beispiel "Tanken"). Es sind natürlich nicht alle Zellen belegt und an manchen Tagen auch mal gar keine.

Der nächste Tag folgt gleich darauf in Zeile C26 (auch verbunden mit D26). Wieder erst das Datum und dann zehn Zeilen für mögliche Ausgaben mit Erklärungen.

Das geht dann so weiter bis Zeile 355 (letzte evtl. genutzte Zeile).
15 Zeilen vorher + 31 Zeilen für Daten + 31x10 Zeilen für Ausgaben = 355. Bei kürzeren Monaten (28., 29., oder 30.Tage) sind die unteren Zellen halt einfach leer.

Ich habe mir schon Gedanken dazu gemacht, welche Funktionen ich mir sinnvoll vorstellen könnte:

1) Ich habe ein Suchfeld und zwei weitere Felder um einen Zeitraum zu definieren (von, bis). In das Suchfeld trage ich einen Suchbegriff ein. Es wird geprüft ob es sich bei dem Suchbegriff um ein Datum handelt, wenn nicht, soll im gesamten Tabellenblatt (wenn kein Zeitraum festgelegt ist, sonst nur von, bis) nach dem Suchbegriff gesucht werden. Die Tage an denen die "Exemplare" gefunden wurden sollen unter dem Suchfeld aufgelistet werden (in Spalte B). In Spalte A sollen die dazugehörigen Beträge aufgelistet werden. Super wäre es, wenn dann noch automatisch die Summe aus den Beträgen gebildet werden würde.

2) Handelt es sich, anders als in Fall 1) um ein Datum im Suchfeld soll das Datum im gesamten Blatt gesucht werden (die Felder "von" und "bis" müssen hier ignoriert werden) und mit Hyperlink irgendwo unter dem Suchfeld angezeigt werden.

3) Werden unlogische Suchbegriffe (z.B. Leerzeichen oder einzelne Ziffern, Buchstaben) eingegeben soll nichts geschehen. Ein Button wäre praktisch, der die Inhalte aus dem Suchfeld und den Feldern "von" und "bis" löscht. Bei einem neuen Suchvorgang müssen die Ergebnisse des vorherigen mit den Hyperlinks gelöscht werden (Falls nicht, könnte es passieren, dass vorher 10 Ergebnisse verlinkt und beim neuen Vorgang vielleicht nur noch 2 und die übrigen 8 Hyperlinks immer noch vorhanden sind.



Ich hoffe meine Beschreibung ist verständlich und nicht zu Abstrakt.
Ich erwarte und möchte keinen fertigen Code, würde mich über Hilfestellungen, Anregungen und Tipps allerdings sehr freuen.

Ich bin derzeit etwas im Prüfungsstress...erwartet also bitte nicht tägliche Beiträge von mir.

Würde mich freuen wenn daraus ein nettes kleines Projekt wird, das vielleicht auch anderen helfen kann.

Liebe Grüße,

mcscool88


P.S.: Ich bin absoluter VBA-Neuling, wie man vielleicht in meinen anderen Anfragen in der Kategorie "Tabellenkalkulation" sehen kann, also bitte: Habt Erbarmen! :D

7 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi mcscool88 ^^

zitat
wird mir langweilig

entferne erstmal die verbundenen zellen ^^

verbundene zellen sind der feind eines jeden makros :-)

gruss nighty
0 Punkte
Beantwortet von
Hallo nighty,

gibts es keinen weg darum herum zu kommen, dass ich die verbundenen zellen auflösen muss? die gehören zum layout wie schnee zum winter.

gruß mcscool88
0 Punkte
Beantwortet von
Hallo,

ich fang mal an:

1) wie kann ich denn in einem Tabellenblatt (von Spalte C bis zur letzten ausgefüllten Spalte) einen Begriff suchen, der in einer bestimmten Zelle (z.B. A3) steht?

2) Und wie kann ich prüfen ob es sich bei dem Wert in einer Zelle (z.B. A3) um ein Datum handelt?

Besten Dank im Voraus,

MfG mcscool88
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi mcscool88 ^^

*ich hasse schnee*

wenn der zu durchsuchende bereich keine verbundenen zellen hat geht es ja :-)

kommt jeder artikel nur einmal vor ,reicht die findmethode

sollten es groessere datenmengen sein ,ist vielleicht ein array besser

gruss nighty
0 Punkte
Beantwortet von mcscool188 Einsteiger_in (27 Punkte)
Hallo nighty,

ich habe soeben die verbundenen Zellen in meinem Tabellenblatt aufgelöst. SIeht zwar nicht mehr so schön aus..... :-)

Ich habe mittlerweile eine teilweise gut funktionierende Version. :D
Den Code zeige ich dir aber lieber nicht, ziemlicht chaotisch, wie immer wenn ich bastle^^
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi mcscool88 ^^

schön das du experimentierst :-))

dann ein paar tips ^^

um die uebersicht zu behalten,bieten sich functionen an,daher ein kleines beispiel

option explicit ist bei jedem makro pflicht

on error resume next ist so auch in ordnung,da er nur die funtion betrifft,die relativ ueberschaubar ist

Option Explicit
Sub BeipielEinerFunction()
If SheetExists("" & DeineVariable) = True Then
Rem ja
Else
Rem nein
End If
End Sub

Public Function SheetExists(strName As String) As Boolean
On Error Resume Next
SheetExists = Not Worksheets(strName) Is Nothing
End Function
0 Punkte
Beantwortet von mcscool188 Einsteiger_in (27 Punkte)
hallo nighty,

wie dir vielleicht schon aufgefallen ist, habe ich mir bei supportnet einen account geholt! :D

danke für dein beispiel. jetzt ist auch mir endlich klar, was funktionen sind und wozu sie gut sind.

gruß,
mcscool188
...