Bestimmten Bereich durchsuchen

Hallo Excel-Freunde,

nachdem ich für die Access-Programmierung hier schon viel Hilfe bekommen habe, hoffe ich, dass ihr mir auch helfen könnt. Ich beschäftige mich noch nicht wirkliche lange mit der VBA-Programmierung in Excel. Bisher konnte ich alle Makros über das Aufzeichnen abwickeln, aber jetzt stoß ich an meine Grenzen. Also hier mein Problem:

Ich habe eine Spalte A in der alle Maschinentypen stehen. In der Zeile 1 habe ich fortlaufend das Datum vom 01.01.08 - 30.06.08 stehen. So kann ich dann markieren, wann welche Maschine gebaut wird. Das heißt, wenn Maschine A1 am 21.04. gebaut wird, so mach ich dort ein Kreuz. Nun benötige ich eine Auswertung, welche Maschinen pro Monat gebaut wurden und diese Auswertung möchte ich gern über ein MAkro abbilden. Das Problem, was ich jetzt habe: Wie programmiere ich in Excel, dass nach eingabe des 01. des Monats in eine InputBox (z.B. 01.04.2008) alle MAschinen für den jeweiligen Monat markiert, kopiert und in ein neues Tabellenblatt schreibt. Dazu muss Excel ja das erste Kreuz und das letzte Kreuz innerhalb des Zeitraum erkennen, alle dazwischen liegenden Zeilen markieren, dann die Spalte A für die markierten Zeilen auslesen und die dann kopieren. Leider habe ich überhaupt keine Idee, wie man das realisieren könnte und bitte euch deswegen mir zu helfen.

Vielen Dank im Voraus.
Viele Grüße von Beate

Hi Beate,
lade mal bitte eine kleine Beispielmappe mit gleicher Tabellenstruktur hoch , z.B. hier:
http//:www.hostarea.de
Gruß
Reinhard

Hallo Beate,

Ich habe eine Spalte A in der alle Maschinentypen stehen. In
der Zeile 1 habe ich fortlaufend das Datum vom 01.01.08 -
30.06.08 stehen. So kann ich dann markieren, wann welche
Maschine gebaut wird. Das heißt, wenn Maschine A1 am 21.04.
gebaut wird, so mach ich dort ein Kreuz. Nun benötige ich eine
Auswertung, welche Maschinen pro Monat gebaut wurden und diese
Auswertung möchte ich gern über ein MAkro abbilden. Das
Problem, was ich jetzt habe: Wie programmiere ich in Excel,
dass nach eingabe des 01. des Monats in eine InputBox (z.B.
01.04.2008) alle MAschinen für den jeweiligen Monat markiert,
kopiert und in ein neues Tabellenblatt schreibt. Dazu muss
Excel ja das erste Kreuz und das letzte Kreuz innerhalb des
Zeitraum erkennen, alle dazwischen liegenden Zeilen markieren,
dann die Spalte A für die markierten Zeilen auslesen und die
dann kopieren. Leider habe ich überhaupt keine Idee, wie man
das realisieren könnte und bitte euch deswegen mir zu helfen.

aus den Erläuterungen entnehme ich, dass du noch am Anfang stehst und somit noch alle Gestaltungsspielräume offen.

Mein Vorschlag: orientiere dich an Access, wo du ja bereits einige Erfahrungen sammeln konntest und gestalte deine Datei sehr viel einfacher und damit sehr viel flexibler. Es gibt nur eine begrenzte Anzahl von Spalten und es ist nicht sehr komfortabel immer ganz nach rechts und dann wieder nach links zu wandern. Sehr viel besser geht es mit Page↑ und Page↓.

Wie bereits angedacht in Spalte A die Maschinen, in Spalte B also ebenfalls untereinander steht dann das Produktionsdatum. Zur Auswertung bietet sich dann der Autofilter an, das ist ein Excel-Tool unter dem Menü Daten, Filter, Autofilter. Dann erhält jede Spalte der Tabelle einen Pfeil, der die verschiedene Möglichkeiten zur Wahl bietet, unter anderem „Benutzerdefiniert“. In dem Dialogfeld dazu hast du dann wieder Möglichkeiten z. B. den Zeitraum einzuschränken.

Eine weitere Möglichkeit hast du dann auch noch mit PivotTable und PivotChart (auch im Menü Daten - da gibt es einen Assistenten). Auch mit diesen Tools hast in vielleicht 2 Minuten ohne vba oder komplizierte Formeln die gewünschte Ergebnisse.

Die Darstellung deiner Daten in einer Tabelle wie du sie von Access kennst, wird für die weitere Verarbeitung deiner Daten (an die du jetzt vielleicht noch gar nicht denkst) auf jeden Fall sehr viel einfacher.

Um beides auszuprobieren (Autofilter und PivotTabelle) genügen ein paar Dummydaten. Ein Blick in die Hilfe und hier vielleicht mal nachfragen bei speziellen Sachen und schon kommst du klar.

LG Marion

Hallo Marion,

vielen Dank für deine Antwort, aber ganz so einfach ist das leider nicht. Ich bin an das Layout gebunden, das das ganze nicht nur zur Auswertung, sondern auch als Montageplan gilt. Wegen der Übersichtlichkeit empfinde ich es als nicht passend auch das Datum untereinander zu schreiben. Ich sehe leider keine einfachere und andere Möglichkeit, die Sache darzustellen.

Hallo Reinhard,

ich habe eine Beispiel-Datei hochgeladen:

http://www.hostarea.de/server-04/April-ac765f79d8.xls

Viele Grüße von Beate

Grüezi Beate

Ich habe eine Spalte A in der alle Maschinentypen stehen. In
der Zeile 1 habe ich fortlaufend das Datum vom 01.01.08 -
30.06.08 stehen. So kann ich dann markieren, wann welche
Maschine gebaut wird. Das heißt, wenn Maschine A1 am 21.04.
gebaut wird, so mach ich dort ein Kreuz. Nun benötige ich eine
Auswertung, welche Maschinen pro Monat gebaut wurden und diese
Auswertung möchte ich gern über ein MAkro abbilden. Das
Problem, was ich jetzt habe: Wie programmiere ich in Excel,
dass nach eingabe des 01. des Monats in eine InputBox (z.B.
01.04.2008) alle MAschinen für den jeweiligen Monat markiert,
kopiert und in ein neues Tabellenblatt schreibt. Dazu muss
Excel ja das erste Kreuz und das letzte Kreuz innerhalb des
Zeitraum erkennen, alle dazwischen liegenden Zeilen markieren,
dann die Spalte A für die markierten Zeilen auslesen und die
dann kopieren. Leider habe ich überhaupt keine Idee, wie man
das realisieren könnte und bitte euch deswegen mir zu helfen.

Ich würde dies nicht über ein Makro tun, sondern eine Funktion erstellen welche dir diese Werte berechnet.

Kopiere die folgenden Zeilen in ein Modul deiner Mappe:

Public Function TypCount(rngBereich As Range, strTyp As String, datMonth As Date) As Long
Dim rngCol As Range
On Error Resume Next
 For Each rngCol In rngBereich.Columns
 If Month(rngCol.Range("A1")) = Month(datMonth) Then
 TypCount = TypCount + Application.WorksheetFunction.SumIf(rngBereich.Columns(1), strTyp, rngCol)
 End If
 Next rngCol
End Function

Dann kannst Du im Tabellenblatt ‚Monatsstückzahlen‘ in Zelle B4 diese neue funktion wie folgt einsetzen:

=TypCount(PWe_xx40!$B$7:blush:DZ$28;B$3;$A4)

Passe den Bereich der geprüft werden soll noch an und achte darauf, dass die erste Spalte den Typ und die erste Zeile das Datum umfasst.

Die Funktion orientiert sich daran und ermittelt auf diese Weise die Anzahl der Typen pro Monat.
Eine manuelle Prüfung der Daten hat gezeigt, dass das Ganze soweit hinkommen sollte.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

HAllo Thomas,

vielen Dank für deine Antwort. Allerdings habe ich immer noch ein Problem: Das Modul habe ich eingefügt, den Bereich angepasst und dann die Formel in meine Zelle B4 kopiert. Sobald ich dann in eine andere Zelle klicke bzw. mit Enter bestätige, dann öffnet sich ein Fenster „Werte aktualisieren“. Egal, ob ich mit Abbrechen oder OK das Fenster verlasse, Excel meldet mir dann in der Zelle B4 den Fehler #WERT. Wie kann ich den beseitigen?

Viele Grüße von Beate

Grüezi Beate

vielen Dank für deine Antwort. Allerdings habe ich immer noch
ein Problem: Das Modul habe ich eingefügt, den Bereich
angepasst und dann die Formel in meine Zelle B4 kopiert.
Sobald ich dann in eine andere Zelle klicke bzw. mit Enter
bestätige, dann öffnet sich ein Fenster „Werte aktualisieren“.

Kann es sein, dass dein Tabellenblatt anders heisst als in der hochgeladenen Mappe?

Egal, ob ich mit Abbrechen oder OK das Fenster verlasse, Excel
meldet mir dann in der Zelle B4 den Fehler #WERT. Wie kann ich
den beseitigen?

Vermutlich ist da noch was mit dem Namen und/oder dem Bereich den Du angegeben hast nicht in Ordnung.

Nimm mal die folgende Formel in B4, hier klappt das ohne Probleme:

=TypCount(PWe_xx40!$B$7:blush:EE$500;B$3;$A4)

…ansonsten lade ich die Mappge hier gerne auch hoch:

http://users.quick-line.ch/ramel/Demo-Daten/Maschine…


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

HAllo Thomas,

ich hatte noch ein bißchen probiert und jetzt klappt es. War ein Fehler mit dem Namen. Vielen Dank für deine Hilfe.

Viele Grüße von Beate