Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1364to1368
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Schwieirgkeiten variierenden Bereich anprechen

Schwieirgkeiten variierenden Bereich anprechen
02.06.2014 12:00:46
Vigo
Hallo zusammen!
Ich hab da mal eine ganz allgemeine Frage.
Wenn ich nach der zuletzt benutzten Zeile Daten mit einer unbestimmten Anzahl an Zeilen einfügen möchte, wie spreche ich diesen Bereich dann an? Der kann ja ständig variieren... Wisst ihr was ich meine?
So setzte ich an um nach der zuletzt benutzten Zeile die Daten einzufügen (funktioniert):
ausgang = Cells(Rows.Count, 8).End(xlUp).Row + 1
also angesprochene Zeile/Spalte: cells(ausgang,8)
Nun werden beliebig viele Daten eingefügt. Für die nächste Funktion, die ich durchführen möchte, suche ich nun eine Möglichkeit diesen Bereich ansprechen zu können (also der Bereich letzte Zeile+1 und beliebig viele Einträge):
range(cells(ausgang,8),cells.End(xlUp).Row) funktioniert gar nicht!
Denk ich vielleicht zu verdreht? Seht ihr eine Möglichkeit diesen Bereich greifbar zu machen?
Ich hoffe, dass ich mich einigermaßen verständlich ausgedrückt habe. Ansonsten einfach noch einmal nachfragen.
Viele Grüße, Vigo

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schwieirgkeiten variierenden Bereich anprechen
02.06.2014 12:06:17
Jack_d
Hallo Vigo
2 Optionen fallen mir spontan ein.
1. (ungetestet)

ausgang = Cells(Rows.Count, 8).End(xlUp).Row + 1
' Einfügen der Zeilen
ausgangZwei = Cells(Rows.Count, 8).End(xlUp).Row + 1
Wahlbereich=range(cells(Ausgang,8),cells(AusgangZwei,8))
OPtion 2
Wenn du die Zeilen über eine Schleife einfügst, kannst du eine variable hochzählen lassen

Zaehler = 0
ausgang = Cells(Rows.Count, 8).End(xlUp).Row + 1
for i = 1 to 10
' Einfügen der Zeile
Zaehler = Zaehler +1
next i
Wahlbereich=range(cells(Ausgang,8),cells(Zaehler,8))
Grüße

Anzeige
Ergänzend
02.06.2014 12:09:40
Jack_d
Dein ansatz ist auch denkbar, nur syntaktisch falsch
den Range müsste man etwa so ansprechen
Wahlbereich = Range(Cells(ausgang, 8), Cells(Cells(Rows.Count, 8).End(xlUp).Row, 8))

AW: Ergänzend
02.06.2014 13:10:12
Vigo
Hallo Jack!
Dein erster Vorschlag kommt bei mir in Frage (hab keine Schleife für Vorschlag 2). Es wird grad noch nicht das gemacht, was ich gern hätte, da muss ich nochmal schauen.
Beim dritten Vorschlag bekomm ich einen Fehler ausgeworfen.
Danke für deine Vorschläge! :)

AW: Ergänzend
02.06.2014 13:14:41
Jack_d
Hallo Vigo
wie gesagt ist alles ungetestet.
Wenn du eine Mustermappe (im optimalfall mit deinem bisherigen Code) hochlädst pass ichs gern an.
Was mir halt aufgefallen ist, dass du nicht auf worksheets referierst (weder mit wirh noch mit namen) kann funktionieren, man muss nur wissen was man tut =)
Grüße

Anzeige
AW: Ergänzend
02.06.2014 13:49:25
Vigo
Ich hab dir mal die Mappe hochgeladen mit Erläuterungen auf dem ersten Tabellenblatt, was der Code eigentlich genau machen soll. Den Code findest du dann unter Modul1. Die besagte Zeile befindet sich im unteren Teil des zweiten With- Blockes. Aktuell erkennt er noch nicht den Bereich um doppelte Werte zu löschen. Hast du noch eine Idee?
https://www.herber.de/bbs/user/90949.xlsm
VG, Vigo

AW: Ergänzend
02.06.2014 14:02:24
Jack_d
Hallo Vigo
also ich steig noch nicht so recht durch, was du machen willst.
Beschreib es kurz nochmal verbal
Ansonsten:
- Wenn du am anfang der Routine die Letzte Zeile Prüfst sind da immer die gleichen Werte (da das Blatt ja (noch) leer ist)(Hintergrundtabelle)
- Vielleicht so ? im letzten Block?
  With Worksheets("Datenzusammenführung").Range("a2:m" & Range("M2").End(xlDown).Row)
.AutoFilter Field:=4, Criteria1:="S2"
.AutoFilter Field:=7, Criteria1:="C7"
.AutoFilter Field:=12, Criteria1:=""
Worksheets("Datenzusammenführung").Range("m2:m" & Range("M2").End(xlDown).Row). _
SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Hintergrundtabelle").Cells(Ausgang1, 8)
' Hier Bestimmst du die "Ausmaße"
Ausgang2 = Worksheets("Hintergrundtabelle").Cells(Rows.Count, 8).End(xlUp).Row
Worksheets("Hintergrundtabelle").Range(Cells(Ausgang1 - 1, 8), Cells(Ausgang2, 8)). _
RemoveDuplicates Columns:=1, Header:=xlNo
Worksheets("Datenzusammenführung").UsedRange.AutoFilter
End With

Anzeige
AW: Ergänzend
02.06.2014 14:17:54
Vigo
Ich möchte im Tabellenblatt "Datenzusammenführung" nach dem Kriterien "S2" (Spalte D),"C3"(Spalte G) und "" (Spalte L) filtern. Dann sollen die gefilterten Ergebnisse der Spalte M in das Tabellenblatt "Hintergrundtabelle" ohne Duplikate kopiert werden.
Danach soll das Ganze mit den Kriterien "S2","C7","" gemacht werden und deren Ergebnisse der Spalte M ohne Duplikate in Tabellenblatt "Hintergrundtabelle" unter den Daten des ersten Filterergebnisses kopiert werden. Auch wieder ohne Duplikate und so weiter...
Dein Vorschlag bringt leider einen Laufzeitfehler(1004)...
Wenn man den Code in der Mappe ausführt, löscht er die Duplikate des zweiten Filterergebnisses nicht und ich weiß leider nicht wieso. Daher dachte ich, dass vielleicht der Bereich nicht richtig erkannt wird.

Anzeige
AW: Ergänzend
02.06.2014 14:27:05
hary
Moin
Hab ich dich richtig verstanden?
Dim loletzte As Long
Dim wksQ As Worksheet
Dim wksZ As Worksheet
Set wksQ = Worksheets("Datenzusammenführung") 'Quelle
Set wksZ = Worksheets("Hintergrundtabelle")   'Ziel
Ausgang1 = wksZ.Cells(Rows.Count, 8).End(xlUp).Row + 1
With wksQ.Range("a2:m" & wksQ.Range("M2").End(xlDown).Row)
.AutoFilter Field:=4, Criteria1:="S2"
.AutoFilter Field:=7, Criteria1:="C7"
.AutoFilter Field:=12, Criteria1:=""
wksQ.Range("M2:M" & wksQ.Range("M2").End(xlDown).Row).SpecialCells(xlCellTypeVisible).Copy  _
Destination:=wksZ.Cells(Ausgang1, 8)
Ausgang2 = wksZ.Cells(Rows.Count, 8).End(xlUp).Row
wksZ.Range(wksZ.Cells(Ausgang1, 8), wksZ.Cells(Ausgang2, 8)).RemoveDuplicates Columns:= _
1, Header:=xlNo
wksQ.UsedRange.AutoFilter
End With
Set wksQ = Nothing
Set wksZ = Nothing

gruss hary

Anzeige
AW: Ergänzend
02.06.2014 14:41:12
Vigo
Hallo Harry,
danke für deinen Beitrag! Ich muss grad mal los. Ich werd mir das später mal anschauen und dir dann eine Rückmeldung geben!
VG, Vigo

AW: Ergänzend
02.06.2014 14:27:26
Jack_d
Bissl tricky
Hatte beim testen manuell hin und her geklickt. Dann referiert er auf die richtige Tabelle
So sollte es aber klappen

Sub Makro1()
Dim Ende As Long
Dim loletzte As Long
Ausgang1 = Worksheets("Hintergrundtabelle").Cells(Rows.Count, 8).End(xlUp).Row + 1
With Worksheets("Datenzusammenführung").Range("a2:m" & Range("M2").End(xlDown).Row)
.AutoFilter Field:=4, Criteria1:="S2"
.AutoFilter Field:=7, Criteria1:="C1"
.AutoFilter Field:=12, Criteria1:=""
Worksheets("Datenzusammenführung").Range("m2:m" & Range("M2").End(xlDown).Row). _
SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Hintergrundtabelle").Range("H1")
Worksheets("Hintergrundtabelle").Range("H1:h" & Range("H1").End(xlDown).Row). _
RemoveDuplicates Columns:=1, Header:=xlNo
'Worksheets("Hintergrundtabelle").Range("H1:h" & Range("H1").End(xlDown).Row).Interior. _
ColorIndex = 3
Worksheets("Datenzusammenführung").UsedRange.AutoFilter
End With
With Worksheets("Datenzusammenführung").Range("a2:m" & Range("M2").End(xlDown).Row)
.AutoFilter Field:=4, Criteria1:="S2"
.AutoFilter Field:=7, Criteria1:="C7"
.AutoFilter Field:=12, Criteria1:=""
Worksheets("Datenzusammenführung").Range("m2:m" & Range("M2").End(xlDown).Row). _
SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Hintergrundtabelle").Cells( _
Ausgang1, 8)
' Hier Bestimmst du die "Ausmaße"
Ausgang2 = Worksheets("Hintergrundtabelle").Cells(Rows.Count, 8).End(xlUp).Row
With Worksheets("Hintergrundtabelle")
.Range(.Cells(Ausgang1 - 1, 8), .Cells(Ausgang2, 8)).RemoveDuplicates Columns:=1,  _
Header:=xlNo
End With
Worksheets("Datenzusammenführung").UsedRange.AutoFilter
End With
End Sub

Anzeige
AW: Ergänzend
02.06.2014 14:39:59
Vigo
Ich glaub, das sollte klappen auf den ersten Blick. Ich muss grad los. Meld mich später nochmal!
Schon mal vielen Dank, dass du dir das mal angeschaut und rumgebastelt hast!!!

AW: Ergänzend
02.06.2014 20:29:44
Vigo
Hallo Jack! Ja,das klappt super! Ich hab den Code mal für alle Bedingungen erweitert:
Sub Makro1()
ausgang1 = Worksheets("Hintergrundtabelle").Cells(Rows.Count, 8).End(xlUp).Row + 1
With Worksheets("Datenzusammenführung").Range("a2:m" & Range("M2").End(xlDown).Row)
.AutoFilter Field:=4, Criteria1:="S2"
.AutoFilter Field:=7, Criteria1:="C1"
.AutoFilter Field:=12, Criteria1:=""
Worksheets("Datenzusammenführung").Range("m2:m" & Range("M2").End(xlDown).Row). _
SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Hintergrundtabelle").Range("H1")
Worksheets("Hintergrundtabelle").Range("H1:h" & Range("H1").End(xlDown).Row). _
RemoveDuplicates Columns:=1, Header:=xlNo
'Worksheets("Hintergrundtabelle").Range("H1:h" & Range("H1").End(xlDown).Row).Interior. _
_
ColorIndex = 3
Worksheets("Datenzusammenführung").UsedRange.AutoFilter
End With
With Worksheets("Datenzusammenführung").Range("a2:m" & Range("M2").End(xlDown).Row)
.AutoFilter Field:=4, Criteria1:="S2"
.AutoFilter Field:=7, Criteria1:="C2"
.AutoFilter Field:=12, Criteria1:=""
Worksheets("Datenzusammenführung").Range("m2:m" & Range("M2").End(xlDown).Row). _
SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Hintergrundtabelle").Cells(ausgang1, 8)
' Hier Bestimmst du die "Ausmaße"
ausgang2 = Worksheets("Hintergrundtabelle").Cells(Rows.Count, 8).End(xlUp).Row
With Worksheets("Hintergrundtabelle")
.Range(.Cells(ausgang1 - 1, 8), .Cells(ausgang2, 8)).RemoveDuplicates Columns:=1, _
Header:=xlNo
End With
Worksheets("Datenzusammenführung").UsedRange.AutoFilter
End With
With Worksheets("Datenzusammenführung").Range("a2:m" & Range("M2").End(xlDown).Row)
.AutoFilter Field:=4, Criteria1:="S2"
.AutoFilter Field:=7, Criteria1:="C3"
.AutoFilter Field:=12, Criteria1:=""
Worksheets("Datenzusammenführung").Range("m2:m" & Range("M2").End(xlDown).Row). _
SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Hintergrundtabelle").Cells(ausgang2, 8)
' Hier Bestimmst du die "Ausmaße"
ausgang3 = Worksheets("Hintergrundtabelle").Cells(Rows.Count, 8).End(xlUp).Row
With Worksheets("Hintergrundtabelle")
.Range(.Cells(ausgang2 - 1, 8), .Cells(ausgang3, 8)).RemoveDuplicates Columns:=1,  _
Header:=xlNo
End With
Worksheets("Datenzusammenführung").UsedRange.AutoFilter
End With
With Worksheets("Datenzusammenführung").Range("a2:m" & Range("M2").End(xlDown).Row)
.AutoFilter Field:=4, Criteria1:="S2"
.AutoFilter Field:=7, Criteria1:="C4"
.AutoFilter Field:=12, Criteria1:=""
Worksheets("Datenzusammenführung").Range("m2:m" & Range("M2").End(xlDown).Row). _
SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Hintergrundtabelle").Cells(ausgang3, 8)
' Hier Bestimmst du die "Ausmaße"
ausgang4 = Worksheets("Hintergrundtabelle").Cells(Rows.Count, 8).End(xlUp).Row
With Worksheets("Hintergrundtabelle")
.Range(.Cells(ausgang3 - 1, 8), .Cells(ausgang4, 8)).RemoveDuplicates Columns:=1,  _
Header:=xlNo
End With
Worksheets("Datenzusammenführung").UsedRange.AutoFilter
End With
With Worksheets("Datenzusammenführung").Range("a2:m" & Range("M2").End(xlDown).Row)
.AutoFilter Field:=4, Criteria1:="S2"
.AutoFilter Field:=7, Criteria1:="C5"
.AutoFilter Field:=12, Criteria1:=""
Worksheets("Datenzusammenführung").Range("m2:m" & Range("M2").End(xlDown).Row). _
SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Hintergrundtabelle").Cells(ausgang4, 8)
' Hier Bestimmst du die "Ausmaße"
ausgang5 = Worksheets("Hintergrundtabelle").Cells(Rows.Count, 8).End(xlUp).Row
With Worksheets("Hintergrundtabelle")
.Range(.Cells(ausgang4 - 1, 8), .Cells(ausgang5, 8)).RemoveDuplicates Columns:=1,  _
Header:=xlNo
End With
Worksheets("Datenzusammenführung").UsedRange.AutoFilter
End With
With Worksheets("Datenzusammenführung").Range("a2:m" & Range("M2").End(xlDown).Row)
.AutoFilter Field:=4, Criteria1:="S2"
.AutoFilter Field:=7, Criteria1:="C6"
.AutoFilter Field:=12, Criteria1:=""
Worksheets("Datenzusammenführung").Range("m2:m" & Range("M2").End(xlDown).Row). _
SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Hintergrundtabelle").Cells(ausgang5, 8)
' Hier Bestimmst du die "Ausmaße"
ausgang6 = Worksheets("Hintergrundtabelle").Cells(Rows.Count, 8).End(xlUp).Row
With Worksheets("Hintergrundtabelle")
.Range(.Cells(ausgang5 - 1, 8), .Cells(ausgang6, 8)).RemoveDuplicates Columns:=1,  _
Header:=xlNo
End With
Worksheets("Datenzusammenführung").UsedRange.AutoFilter
End With
With Worksheets("Datenzusammenführung").Range("a2:m" & Range("M2").End(xlDown).Row)
.AutoFilter Field:=4, Criteria1:="S2"
.AutoFilter Field:=7, Criteria1:="C7"
.AutoFilter Field:=12, Criteria1:=""
Worksheets("Datenzusammenführung").Range("m2:m" & Range("M2").End(xlDown).Row). _
SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Hintergrundtabelle").Cells(ausgang6, 8)
' Hier Bestimmst du die "Ausmaße"
ausgang7 = Worksheets("Hintergrundtabelle").Cells(Rows.Count, 8).End(xlUp).Row
With Worksheets("Hintergrundtabelle")
.Range(.Cells(ausgang6 - 1, 8), .Cells(ausgang7, 8)).RemoveDuplicates Columns:=1,  _
Header:=xlNo
End With
Worksheets("Datenzusammenführung").UsedRange.AutoFilter
End With
With Worksheets("Datenzusammenführung").Range("a2:m" & Range("M2").End(xlDown).Row)
.AutoFilter Field:=4, Criteria1:="S2"
.AutoFilter Field:=7, Criteria1:="C8"
.AutoFilter Field:=12, Criteria1:=""
Worksheets("Datenzusammenführung").Range("m2:m" & Range("M2").End(xlDown).Row). _
SpecialCells(xlCellTypeVisible).Copy Destination:=Worksheets("Hintergrundtabelle").Cells(ausgang7, 8)
' Hier Bestimmst du die "Ausmaße"
ausgang8 = Worksheets("Hintergrundtabelle").Cells(Rows.Count, 8).End(xlUp).Row
With Worksheets("Hintergrundtabelle")
.Range(.Cells(ausgang7 - 1, 8), .Cells(ausgang8, 8)).RemoveDuplicates Columns:=1,  _
Header:=xlNo
End With
Worksheets("Datenzusammenführung").UsedRange.AutoFilter
End With
End Sub
Es sind zwar ein paar Leerzellen dazwischen, aber das sollte nicht das Problem sein.
Vielen, vielen Dank!!

Anzeige
Danke für die Rückmeldung owT
03.06.2014 12:44:52
Jack_d
ohne weiteren Text

AW: Danke für die Rückmeldung owT
03.06.2014 14:18:58
Vigo
Hallo zusammen!
Ich würde das Ganze gerne weiter ausbauen wollen. Wie kann man die prozentuale Verteilung der gefilterten Daten ermitteln? Also wie oft kam der gefilterte Wert unter den insgesamt gefilterten Werten, die den Kriterien entsprachen, vor?
Ich hab schon diesen Ansatz gefunden:

Set rngfilter = .Offset(0, 1).Resize(.Rows.Count - 1, 1) _
.SpecialCells(xlCellTypeVisible)
Hier wird aber ermittelt, wie wiele Werte insgesamt gefunden wurden, die den Kriterien entsprachen.
Ich weiß grad nicht so recht, wie ich da vorgehen soll. Lässt sich das in einem Schritt lösen? Oder muss ich erst ermitteln wie viele Werte insgesamt den Kriterien entsprachen und dann halt wie oft die aufgeführten Werte unter den gefilterten Werten vorkamen?
Soweit bisher mein Ansatz:
With Worksheet("Hintergrundtabelle1").usedrange
If Offset(0, -1) = "" Then   'falls kein Wert gefunden aufhören
End If
else rngfilter=.        'falls gefunden...

Ich weiß, das ist nicht viel. Hacke aber grad voll bei dem Code.
Hab dann noch gedacht, ob das nicht einfach über eine Excel-Formel zu lösen wäre (so in etwas):
=summenprodukt(teilergebnis(3;indirekt(Datenzusammenführung!("M" & Zeile(2:999)))) *(Datenzusammenführung!M2:M999="H1"))/teilergebnis(3;Datenzusammenführung!M2:M999)
Diese Formel bekomme ich leider aber nicht richtig umgesetzt...Irgendetwas ist falsch!
Wäre aber glaub ich am einfachsten oder?
Hat jemand vielleicht eine Idee?
Viele Grüße, Vigo

Anzeige
Neue Frage ...
03.06.2014 14:43:53
Jack_d
Bitte neuen Threat eröffnen.
Dann haben andere noch eine Chance sich zu beteiligen. =)
Grüße

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige