Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
888to892
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
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

For each-Schleife

For each-Schleife
19.07.2007 18:40:00
Eleni
Hallo Forum,
Wie kann ich in einem Makro eine Summewenn-Funktion mit 2 Suchkriterien verknüpfen und vorher eine Abfrage fahren? Ich habe die Daten in Tabelle 1 und die Ergebnisse benötige ich in Tabelle 2. Bei der Verschachtelung von Funktionen klappt etwas nicht und ich denke ein Makro mit einer "for each"-Schleife könnte mir helfen. Leider bin ich unerfahren, was solche Schleifen mit Verschachtelung angeht, bin also für jeden Vorschlag darüber dankbar.
Folgende Angaben existieren:
Tabelle 1
In Spalte L stehen 6-stellige Zahlen mit einem A- davor, also A-100000/A-100100/etc.
In Spalte D stehen die folgenden 4-stellige Zahlen: 0020, 0025, 0140, 0190.
In Spalte H stehen Stundenangaben.
Und folgende Angaben benötige ich:
Tabelle 2
In Spalte A soll jede Nr. aus Spalte L der Tabelle1 nur einmal stehen und zwar ohne vorangehendes A- (statt A-100000, nur 100000).
In Spalte B soll die Summe stehen über die Spalte H, wenn in Spalte D "0020" oder "0025" steht.
In Spalte C soll die Summe stehen über die Spalte H, wenn in Spalte D "0140" steht.
In Spalte D soll die Summe stehen über die Spalte H, wenn in Spalte D "0190" steht.
Beispiel:
Tabelle 1
D10 = 0020 H10 = 1,5 L10 = A-100000
D11 = 0020 H11 = 2,5 L11 = A-100000
D12 = 0025 H12 = 3,0 L12 = A-100000
D13 = 0025 H13 = 0,5 L13 = A-100000
D14 = 0140 H14 = 1,0 L14 = A-100000
D15 = 0140 H15 = 2,0 L15 = A-100000
D16 = 0190 H16 = 3,5 L16 = A-100000
D17 = 0190 H17 = 4,0 L17 = A-100000
Tabelle 2
A1 = 100000 B1 = H10+H11+H12+H13 = 7,5 C1= H14+H15 = 3,0 D1 = H16+H17 = 7,5
Ciao, Eleni

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For each-Schleife
19.07.2007 20:53:00
Chaos
Servus Eleni,
ich hab dir eine Beispieldatei angehängt. Schau mal, ob das so für dich passt. Ist allerdings keine einfache For each- Schleife.
In Tabelle 2 auf den Button "Daten holen" drücken.
https://www.herber.de/bbs/user/44260.xls
Gruß
Chaos

AW: For each-Schleife
19.07.2007 22:05:07
Gerd
Hallo,
ich hatte die Aufgabe etwas einfacher verstanden. (Tabelle1 u. Tabelle2 sind die Codenamen der Tabellen)

Sub test1()
Dim i As Long
With Tabelle1
For i = 10 To .Cells(10, 12).End(xlDown).Row
If WorksheetFunction.CountIf(.Range(.Cells(i, 12), .Cells(10, 12)), .Cells(i, 12).Value) = 1  _
Then
If Tabelle2.Cells(1, 1).Value = Empty Then
Tabelle2.Cells(1, 1).Value = Split(.Cells(i, 12).Text, "-")(1)
Else
Tabelle2.Cells(1, 1).End(xlUp).Offset(1, 0).Value = Split(.Cells(i, 12).Text, "-")( _
1)
End If
End If
Select Case Tabelle1.Cells(i, 4).Value
Case "0020", "0025"
Tabelle2.Cells(1, 2).Value = Tabelle2.Cells(1, 2).Value + .Cells(i, 8).Value
Case "0140"
Tabelle2.Cells(1, 3).Value = Tabelle2.Cells(1, 3).Value + .Cells(i, 8).Value
Case "0190"
Tabelle2.Cells(1, 4).Value = Tabelle2.Cells(1, 4).Value + .Cells(i, 8).Value
End Select
Next
End With
End Sub


Gruß Gerd

Anzeige
AW: For each-Schleife
20.07.2007 09:43:28
Eleni
Hallo Gerd,
Danke fürs Makro, leider erhalte ich eine Fehlermeldung ("Typen unverträglich") in der Zeile unter Case"0190".
Ciao, Eleni

AW: For each-Schleife
20.07.2007 10:16:05
Chaos
Servus Eleni,
hast du dir die Beispielmappe mal angeschaut ?
hier ist das Makro das drin steht:

Sub schleifen()
Dim i As Integer, z As Integer, r As Integer, r1 As Integer, t As Integer, r2 As Integer
Dim zelle As Range, bereich As Range
r = Sheets("Tabelle1").Range("L65536").End(xlUp).Offset(0, 0).Row
With Sheets(1)
For i = 1 To r Step 1
Sheets(2).Range("A65536").End(xlUp).Offset(1, 0).Value = Right(.Cells(i, 12).Value, 6)
If .Cells(i, 4).Value = "0020" Or .Cells(i, 4).Value = "0025" Then
.Cells(i, 8).Copy Destination:=Sheets(2).Cells(i, 2)
Else
If .Cells(i, 4).Value = "0140" Then
.Cells(i, 8).Copy Destination:=Sheets(2).Cells(i, 3)
Else
If .Cells(i, 4).Value = "0190" Then
.Cells(i, 8).Copy Destination:=Sheets(2).Cells(i, 4)
End If
End If
End If
Next i
End With
With Sheets(2)
r1 = .Range("A65536").End(xlUp).Offset(0, 0).Row
.Range("A2:D" & r1).Sort Key1:=.Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
For t = r1 To 2 Step -1
If .Cells(t, 1).Value = .Cells(t - 1, 1).Value Then
.Cells(t - 1, 2).Value = .Cells(t - 1, 2).Value + .Cells(t, 2).Value
.Cells(t - 1, 3).Value = .Cells(t - 1, 3).Value + .Cells(t, 3).Value
.Cells(t - 1, 4).Value = .Cells(t - 1, 4).Value + .Cells(t, 4).Value
.Cells(t, 1).EntireRow.Delete
End If
Next t
r2 = .Range("A65536").End(xlUp).Offset(0, 0).Row
Set bereich = .Range("A2:D" & r2)
For Each zelle In bereich
If zelle.Value = 0 Then
zelle.Value = ""
End If
Next zelle
End With
End Sub


Nur falls, du es nicht gefunden haben solltest.
Gruß
Chaos

Anzeige
Geschlossen, o.T.
20.07.2007 10:47:00
Eleni
o.T.

AW: For each-Schleife
20.07.2007 10:11:00
Eleni
Hallo Chaos (super Name, hoffe er ist nicht Programm),
Vielen Dank für die tolle Lösung, leider schreibt er mir in den ersten 3 Zeilen nur in der Spalte A etwas rein, die restlichen Zellen sind leer, obwohl das nicht sein darf. Ganz unten steht eine Art Referenz, aber das stört mich nicht. Aber warum schreibt er in die ersten 3 Zeilen nix?
Ciao, Eleni

AW: For each-Schleife
20.07.2007 10:28:28
Chaos
naja,
kommt drauf an, manchmal ist das schon Programm.
Das kann ich so nicht sagen. Das Makro schreibt die Nummer in die esrte freie Zeile in Tabelle2. Hast du da evtl. etwas drin stehen?
Ich bin davon ausgegangen, dass das Zieltabellenblatt leer ist
Sheets(2).Range("A65536").End(xlUp).Offset(1, 0).Value = Right(.Cells(i, 12).Value, 6)
Das ist diese Zeile, die anderen Werte werden in die entsprechende Zeile kopiert, evtl muss man das so abändern.
Sheets(2).Cells(i, 1).Value = Right(.Cells(i, 12).Value, 6).
Das beste wäre , du würdest die Datei mal posten, dann ist die Fehlerfindung einfacher.
Gruß
Chaos

Anzeige
AW: For each-Schleife
20.07.2007 10:46:31
Eleni
Hallo Chaos,
Das Makro hab ich gefunden, trotzdem Danke, dass du den Hinweis gebracht hast.
In der Zelle stand und steht nix drin, mit der modifizierten Version klappt es aber jetzt ganz prima. Vielen, vielen Dank nochmal.
Ciao, Eleni

AW: For each-Schleife
20.07.2007 10:54:52
Chaos
Bitteschön.

Geschlossen, o.T.
20.07.2007 10:46:00
Eleni
o.T.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige