Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
452to456
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
452to456
452to456
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro erweitern

Makro erweitern
13.07.2004 09:31:33
Daniel
Hallo!
Ich möchte ein bereits angefangenes Makro um weitere Formeln ergänzen.
Selbst schaffe ich das nur, indem ich das Makro meiner Meinung nach unnötig „aufplustere“.
Das Grundgerüst steht soweit, das Makro soll nur durch die restlichen Formeln erweitert werden, ohne das Makro zu „lang“ werden zu lassen.
Ich habe eine Datei angehängt, damit das Problem (hoffentlich) verständlich wird.

Die Datei https://www.herber.de/bbs/user/8444.xls wurde aus Datenschutzgründen gelöscht

Beste Grüße und schon mal vielen Dank für Hilfe!
Daniel

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro erweitern
13.07.2004 10:37:29
Uduuh
Hallo,
hier deine Datei zurück:

Die Datei https://www.herber.de/bbs/user/8445.xls wurde aus Datenschutzgründen gelöscht

Die For each c in Range....-Schleife habe ich rausgenommen und durch Application.WorksheetFunction.CountIf ersetzt. Benutze, wo immer es geht, eingebaute Funktionen. Das ist mit Abstand das schnellste.
Gruß aus'm Pott
Udo
AW: Makro erweitern
13.07.2004 11:05:58
Daniel
Hallo Udo!
bei der Datei sind nur die ersten 4 Spalten (B-E) korrekt.
Die Überschriften sind etwas irreführend.
Du hast Off > 100 UND Def < 100 ("F") als Summe aus "B" und "E" interpretiert. Tatsächlich soll hier aber nur gezählt werden, wenn der Wert GLEICHZEITIG in Offense > 100 und in Defense < 100 ist.
Ich habe die Datei nochmal hochgeladen, damit du den Unterschied siehst!
https://www.herber.de/bbs/user/8449.xls
Grüße udn vielen Dank!
Daniel
Anzeige
AW: Makro erweitern
13.07.2004 11:07:52
GerdZ
Hallo Daniel,
und hier noch eine Variante mit der SUMMENPRODUKT-Funktion, ebenfalls als Ersatz für die "For Each c"-Schleife.
Der Code füllt nur die Spalten B und F, für den Rest sind nur kleine Änderungen nötig:
      With Sheets("Quadranten")
.Range("B" & i).Value = _
Application.WorksheetFunction.CountIf(Sheets("Offense").Range("B" & i & ":IV" & i), ">100")
.Range("F" & i).Value = _
Evaluate("=SUMPRODUCT((Offense!B" & i & ":IV" & i & ">100)*(Offense!B" & i & ":IV" & i & _
"<>"""")*(Defense!B" & i & ":IV" & i & "<100)*(Defense!B" & i & ":IV" & i & "<>""""))")
End With
Gruß
Gerd
Anzeige
AW: Makro erweitern
13.07.2004 11:27:58
Daniel
Hi Gerd,
leider bekomme ich den Fehler:
Anwendungs oder objektdefinierter Fehler.
Kenne mich leider kaum aus: was ist zu machen?
Danke,
Daniel
AW: Makro erweitern
13.07.2004 11:58:14
GerdZ
Hallo Daniel,
hier die komplette Prozedur. In Excel 2000 läuft sie ohne Fehlermeldung:
Sub Quadranten()
Dim c As Range
Dim laR As Long, i As Long
Dim z As Integer, a As Integer, b As Integer, k As Integer
Dim d As Integer, e As Integer, f As Integer, g As Integer
Dim wsOff As Worksheet, wsQua As Worksheet
Set wsOff = Worksheets("Offense")
Set wsQua = Worksheets("Quadranten")
Application.ScreenUpdating = False
wsQua.Cells.Delete Shift:=xlUp
Application.CutCopyMode = False
wsQua.Select
wsOff.Columns("A:A").Copy
wsQua.Range("A1").Select
wsQua.Paste
Sheets("Offense").Select
laR = Cells(Rows.Count, 2).End(xlUp).Row
For i = 2 To laR
With Sheets("Quadranten")
.Range("B" & i).Value = _
Application.WorksheetFunction.CountIf(Sheets("Offense").Range("B" & i & ":IV" & i), ">100")
.Range("C" & i).Value = _
Application.WorksheetFunction.CountIf(Sheets("Offense").Range("B" & i & ":IV" & i), "<100")
.Range("D" & i).Value = _
Application.WorksheetFunction.CountIf(Sheets("Defense").Range("B" & i & ":IV" & i), ">100")
.Range("E" & i).Value = _
Application.WorksheetFunction.CountIf(Sheets("Defense").Range("B" & i & ":IV" & i), "<100")
.Range("F" & i).Value = _
Evaluate("=SUMPRODUCT((Offense!B" & i & ":IV" & i & ">100)*(Offense!B" & i & ":IV" & i & _
"<>"""")*(Defense!B" & i & ":IV" & i & "<100)*(Defense!B" & i & ":IV" & i & "<>""""))")
.Range("G" & i).Value = _
Evaluate("=SUMPRODUCT((Offense!B" & i & ":IV" & i & ">100)*(Offense!B" & i & ":IV" & i & _
"<>"""")*(Defense!B" & i & ":IV" & i & ">100)*(Defense!B" & i & ":IV" & i & "<>""""))")
.Range("H" & i).Value = _
Evaluate("=SUMPRODUCT((Offense!B" & i & ":IV" & i & "<100)*(Offense!B" & i & ":IV" & i & _
"<>"""")*(Defense!B" & i & ":IV" & i & "<100)*(Defense!B" & i & ":IV" & i & "<>""""))")
.Range("I" & i).Value = _
Evaluate("=SUMPRODUCT((Offense!B" & i & ":IV" & i & "<100)*(Offense!B" & i & ":IV" & i & _
"<>"""")*(Defense!B" & i & ":IV" & i & ">100)*(Defense!B" & i & ":IV" & i & "<>""""))")
End With
Next i
wsQua.[B1] = "Off > 100"
wsQua.[C1] = "Off < 100"
wsQua.[D1] = "Def > 100"
wsQua.[E1] = "Def < 100"
wsQua.[F1] = "Off >100+Def <100"
wsQua.[G1] = "Off >100+Def >100"
wsQua.[H1] = "Off <100+Def <100"
wsQua.[I1] = "Off <100+Def >100"
Application.ScreenUpdating = True
End Sub
Gruß
Gerd
Anzeige
AW: Makro erweitern
13.07.2004 12:06:15
Daniel
Hallo Gerd,
Die anderen Felder hätte ich auch alleine geschafft.
Noch eine Kleinigkeit:
Jetzt werden trotzdem in den Zellen vor Zeile 102 Nullen eingetragen.
Hier soll aber gar keine Berechnung stattfinden. Diese Zellen sollen
leer bleiben.
Wie geht das?
Grüße,
Daniel
AW: Makro erweitern
13.07.2004 14:24:14
Uduuh
Hallo,
du brauchst nur abzufragen, ob mehr als Null Zahlen in der Spalte sind.
For i = 2 To laR
If Application.WorksheetFunction.Count(Range(Cells(i,2),Cells(i,256)))>0 Then
With Sheets("Quadranten")
.Range("B" & i).Value = _
Application.WorksheetFunction.CountIf(Sheets("Offense").Range("B" & i & ":IV" & i), ">100")
.Range("C" & i).Value = _
Application.WorksheetFunction.CountIf(Sheets("Offense").Range("B" & i & ":IV" & i), "<100")
.Range("D" & i).Value = _
Application.WorksheetFunction.CountIf(Sheets("Defense").Range("B" & i & ":IV" & i), ">100")
.Range("E" & i).Value = _
Application.WorksheetFunction.CountIf(Sheets("Defense").Range("B" & i & ":IV" & i), "<100")
.Range("F" & i).Value = _
Evaluate("=SUMPRODUCT((Offense!B" & i & ":IV" & i & ">100)*(Offense!B" & i & ":IV" & i & _
"<>"""")*(Defense!B" & i & ":IV" & i & "<100)*(Defense!B" & i & ":IV" & i & "<>""""))")
.Range("G" & i).Value = _
Evaluate("=SUMPRODUCT((Offense!B" & i & ":IV" & i & ">100)*(Offense!B" & i & ":IV" & i & _
"<>"""")*(Defense!B" & i & ":IV" & i & ">100)*(Defense!B" & i & ":IV" & i & "<>""""))")
.Range("H" & i).Value = _
Evaluate("=SUMPRODUCT((Offense!B" & i & ":IV" & i & "<100)*(Offense!B" & i & ":IV" & i & _
"<>"""")*(Defense!B" & i & ":IV" & i & "<100)*(Defense!B" & i & ":IV" & i & "<>""""))")
.Range("I" & i).Value = _
Evaluate("=SUMPRODUCT((Offense!B" & i & ":IV" & i & "<100)*(Offense!B" & i & ":IV" & i & _
"<>"""")*(Defense!B" & i & ":IV" & i & ">100)*(Defense!B" & i & ":IV" & i & "<>""""))")
End With
End If
Next i
Gruß aus'm Pott
Udo
Anzeige
Danke!
13.07.2004 17:16:27
Daniel
Danke Udo und Gerd!
Wenn für mich das nur auch so einfach wäre... ;-)
Beste Grüße,
Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige