Bestimmte Zeilen aus einer Tabelle finden

Hallo.
Ich habe in Tabelle 1 Datumbezogene Daten.
In der Spalte A steht das Datum (fortlaufend).
Jetzt möchte ich per Makro zb. eingeben, das ich das Monat September haben möchte, und das Makro soll mir aus tabelle 1 alle Zeilen von September 2007 in Tabelle 2 übertragen.
Wie mache ich das?

Danke

In der Spalte A steht das Datum (fortlaufend).
Jetzt möchte ich per Makro zb. eingeben, das ich das Monat
September haben möchte, und das Makro soll mir aus tabelle 1
alle Zeilen von September 2007 in Tabelle 2 übertragen.
Wie mache ich das?

Hallo Anton,

mal als ein Ansatz, das Jahr wird nnoch nicht ausgewertet, nur der Monat und der Code bietet noch Tuningchancen.
(z.B. mit .Find schneller nach 1.9.2007 und 1.10.2007 suchen usw.)

In Tab1 in F1 Daten–Gültigkeit–Liste Jan;Feb;Mrz;Apr anlegen

in Klassenmodul Tabelle1:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address „$F$1“ Then Exit Sub
Call Uebertragen
End Sub

in Modul1:

Option Explicit
'
Sub Uebertragen()
Dim Monat, M, Von, Bis
Monat = Array("Jan", "Feb", "Mrz", "Apr")
For M = 0 To UBound(Monat)
 If Monat(M) = Range("F1").Value Then Exit For
Next M
M = M + 1
With Worksheets("Tabelle1")
 While Month(.Cells(Von + 1, 1)) M
 Von = Von + 1
 Wend
 Von = Von + 1
 Bis = Von
 While Month(.Cells(Bis + 1, 1)) = M
 Bis = Bis + 1
 Wend
 MsgBox Von
 MsgBox Bis
 Tabelle2.UsedRange.ClearContents
 .Rows(Von & ":" & Bis).Copy Tabelle2.[A1]
End With
End Sub

Gruß
Reinhard

Hallo.
Danke zuerst einmal für deine Mühe.
Nur noch ein paar Fragen zu deinem Makro.

Für was benötige ich diesen eintrag im Klassenmodul? (Funktioniert auch ohne. Gibt es irgendeine sicherheit, oder dergleichen?)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address „$F$1“ Then Exit Sub
Call Uebertragen
End Sub

in Modul1:

Option Explicit

(Auch wenn ich option Explicit weglasse, funktioniert es (Für was ist dieser Befehl?)

Was muß ich umändern, wenn ich in Tabelle3 in F1 den Monat stehen habe, den ich benötige?

Sub Uebertragen()
Dim Monat, M, Von, Bis
Monat = Array(„Jan“, „Feb“, „Mrz“, „Apr“)
For M = 0 To UBound(Monat)
If Monat(M) = Range(„F1“).Value Then Exit For
Next M
M = M + 1
With Worksheets(„Tabelle1“)
While Month(.Cells(Von + 1, 1)) M
Von = Von + 1
Wend
Von = Von + 1
Bis = Von
While Month(.Cells(Bis + 1, 1)) = M
Bis = Bis + 1
Wend
MsgBox Von
MsgBox Bis
Tabelle2.UsedRange.ClearContents
.Rows(Von & „:“ & Bis).Copy Tabelle2.[A1]
End With
End SubGruß
Reinhard

Danke für deine Mühe

Hi Anton,

Für was benötige ich diesen eintrag im Klassenmodul?
(Funktioniert auch ohne. Gibt es irgendeine sicherheit, oder
dergleichen?)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address „$F$1“ Then Exit Sub
Call Uebertragen
End Sub

Worksheet_Change ist ein von einigen eingebauten Ereignisprozeduren, die automatisch gestartet wird wenn das Ereignis geschieht.
Bei Worksheet_Change ist das Ereignis z.B. eine Zellwertänderung.
So wie ichs schrieb, „überwacht“ die Prozedur die Zelle F1, wird sie geändert startet die prozedur automatisch das Makro „Uebertragen“.

D.h. wenn Zelle F1 durch das Dropdown-Menue geändert wird, brauchst du nicht extra noch manuell „Uebertragen“ zu starten.

in Modul1:

Option Explicit

(Auch wenn ich option Explicit weglasse, funktioniert es (Für
was ist dieser Befehl?)

Option Explicit (es steht automatisch in jedem Modul, wenn du im Editor unter Optionen „variablendeklaration erforderlich“ anhakst)
überprüft jede Variable im Code ob sie auch sauber deklariert wurde.
(Deklaration = Dim, Redim, Public usw.

Anfangs sieht man die Notwendigkeit nicht ein, später wirst du es nicht mehr missen wollen, grade wenn du mal wiedr 2 Stunden den Fehler im Code gesucht hast und der bestand darin daß die Variable „Letzte“ halt unentdeckt an einer Stelle als „Lezte“ geschrieben wurde, bei langem Code sieht man sio fehler schlichtweg sehr sehr mühsam durch Zufall.

Was muß ich umändern, wenn ich in Tabelle3 in F1 den Monat
stehen habe, den ich benötige?

Sub Uebertragen()
Dim Monat, M, Von, Bis
Monat = Array(„Jan“, „Feb“, „Mrz“, „Apr“)
For M = 0 To UBound(Monat)
If Monat(M) = Worksheets(„Tabelle3“).Range(„F1“).Value Then Exit For
Next M
M = M + 1
With Worksheets(„Tabelle1“)
While Month(.Cells(Von + 1, 1)) M
Von = Von + 1
Wend
Von = Von + 1
Bis = Von
While Month(.Cells(Bis + 1, 1)) = M
Bis = Bis + 1
Wend
MsgBox Von
MsgBox Bis
Tabelle2.UsedRange.ClearContents
.Rows(Von & „:“ & Bis).Copy Tabelle2.[A1]
End With
End Sub

Gruß
Reinhard

Hallo Reinhard.
Zuerst danke ich dir nochmal, das du dir soviel Zeit nimmst.
Leider funktioniert es bei mir nicht so richtig.
Wenn ich in F1 etwas eingebe, wird keine Makro gestartet (Was muß ich hier genau eingeben? (jan, Feb, oder nur die Monatszahlen?)
Wenn ich das Makro per Hand starte, copiert er mir immer den Monat Mai in Tabelle 2.
Wenn ich zb. in Zeile : Monat = Array(„Jan“) stehen habe, copiert er mir den Monat Feb. (Habe schon versucht, nach Array den Variablenwert von Zelle F1 einzutragen (
test = range („F1“).value
Monat = Array („test“)
Aber das funktioniert auch nicht.
Was mache ich falsch?

Was bewirkt der Befehl Array genau?

Ich hoffe, das ich dich nicht all zu stark nerve und danke dir für deine Hilfe und deine Geduld .

Sub Uebertragen()
Dim Monat, M, Von, Bis
Monat = Array(„Jan“, „Feb“, „Mrz“, „Apr“)
For M = 0 To UBound(Monat)
If Monat(M) = Worksheets(„Tabelle3“).Range(„F1“).Value Then Exit For
Next M
M = M + 1
With Worksheets(„Tabelle1“)
While Month(.Cells(Von + 1, 1)) M
Von = Von + 1
Wend
Von = Von + 1
Bis = Von
While Month(.Cells(Bis + 1, 1)) = M
Bis = Bis + 1
Wend
MsgBox Von
MsgBox Bis
Tabelle2.UsedRange.ClearContents
.Rows(Von & „:“ & Bis).Copy Tabelle2.[A1]
End With
End Sub

Gruß
Reinhard

Hi Anton,

Zuerst danke ich dir nochmal, das du dir soviel Zeit nimmst.
Leider funktioniert es bei mir nicht so richtig.
Wenn ich in F1 etwas eingebe, wird keine Makro gestartet (Was
muß ich hier genau eingeben? (jan, Feb, oder nur die
Monatszahlen?)

Januar, Februar,… in der Schreibweise, die bei Daten–Gültigkeit definiert ist.

Wenn ich das Makro per Hand starte, copiert er mir immer den
Monat Mai in Tabelle 2.

Dann wird Mai in F1 stehen.

Was bewirkt der Befehl Array genau?

z.B. Verkürzung, bessere ansprechmöglichkeiten von Variablen.

x0=„Hamburg“
x1=„München“
x2=„Berlin“

x20=„Osnabrück“

S=Input(„Stadt“)
if S = x0 then
if S = x1 then
if S = x2 then

if S = x20 then

wird verkürzt zu

x=array(„Hamburg“,„München“,„Berlin“,…,„Osnabrück“)
S=Input(„Stadt“)
for n = 0 to ubound(x)
if S = x(n) then
next n

Die Datei. http://www.hostarea.de/server-10/Oktober-9ad401c5fc.xls

enthält in Tabelle1:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address „$F$1“ Then Exit Sub
Call Uebertragen
End Sub

in Modul1:

Option Explicit
Option Base 1
'
Sub Uebertragen()
Dim M As Byte, Von As Long, Bis As Long
With Worksheets("Tabelle1")
 M = Month("1." & .Range("F1").Value & ".2007")
 While Month(.Cells(Von + 1, 1)) M
 Von = Von + 1
 If Von = .Rows.Count Then
 MsgBox "Monat nicht vorhanden"
 Exit Sub
 End If
 Wend
 Von = Von + 1
 Bis = Von
 ' Ohne And "" läuft es bei M=12 bis \> 65537 ???
 While (Month(.Cells(Bis + 1, 1)) = M) And (Bis "")
 Bis = Bis + 1
 Wend
 Tabelle2.UsedRange.ClearContents
 .Rows(Von & ":" & Bis).Copy Tabelle2.[A1]
End With
End Sub

Wähle in F1 verschiedene Moate aus und beobachte Tabelle2.
Das hätte auch schon mit der Vorgängerversion der Codes geklappt.
Änderungen hatten andere Gründe.

Und zu der Frage nach Arrays, tja nun, rtfm, prisweret Bücher zu XL97-Vba langen dicke zum Lernen, Nachschauen.

Gruß
Reinhard

1 „Gefällt mir“

Herzlichen Dank
Hallo Reinhard.
Danke nochmal, für deine Hilfe.

Das Programm funktioniert super (bis auf den Jänner, da bekomme ich immer einen Laufzeitfehler 13 ‚Typen unverträglich‘.
Aber das werde ich hoffentlich hinbekommen.

Und danke für deine Array Beschreibung(Ist eine wesentliche Erleichterung beim Programieren)

Mfg Anton