Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1068to1072
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

Makro kürzer u. schneller ?

Makro kürzer u. schneller ?
25.04.2009 18:40:42
Kurt
Guten Abend,
ich habe für das Filtern der Daten u. die entsprechende Anzahl
in eine Zelle folgendes Makro gefertigt:

Sub Auszählen()
Application.ScreenUpdating = False
Range("A5:AC5").Select
If Not ActiveSheet.AutoFilterMode Then
Selection.AutoFilter
End If
Selection.AutoFilter Field:=13, Criteria1:="216"
ActiveSheet.Range("A4").Select
Selection.Copy
ActiveSheet.Range("AH1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
'Exit Sub
Selection.AutoFilter Field:=13, Criteria1:="21601"
ActiveSheet.Range("A4").Select
Selection.Copy
Range("AH2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.AutoFilter Field:=13, Criteria1:="21603"
ActiveSheet.Range("A4").Select
Selection.Copy
ActiveSheet.Range("AH3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.AutoFilter Field:=13, Criteria1:="21604"
ActiveSheet.Range("A4").Select
Selection.Copy
ActiveSheet.Range("AH4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.AutoFilter Field:=13, Criteria1:="21605"
ActiveSheet.Range("A4").Select
Selection.Copy
ActiveSheet.Range("AH5").Select
' ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
If ActiveSheet.AutoFilterMode Then
Selection.AutoFilter
End If
'  ActiveSheet.Range("AG1:AI5").Select
'   ActiveSheet.PageSetup.PrintArea = "$AG$1:$AI$5"
'   ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
ActiveSheet.Range("C3").Select
Application.ScreenUpdating = True
End Sub


Kann man das Makro auch kürzer u. vielleicht schneller gestalten, da jedesmal ja Filter gesetzt
wird etc. dauert etwas`?
herzlichen Abendgruß Kurt aus K

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
ungetestet
25.04.2009 18:58:25
Tino
Hallo,
teste mal ob es so geht.
Sub Auszählen()
Dim A As Long
Dim FilterBereich As Range
Dim FilterKrit As String

Application.ScreenUpdating = False

With ActiveSheet
  Set FilterBereich = .Range("A5:AC5")
 
    For A = 1 To 5
            If A = 1 Then
             FilterKrit = "216"
            ElseIf A = 2 Then
             FilterKrit = "21601"
            ElseIf A = 2 Then
             FilterKrit = "21603"
            ElseIf A = 2 Then
             FilterKrit = "21604"
            Else
             FilterKrit = "21605"
            End If
      
       FilterBereich.AutoFilter Field:=13, Criteria1:=FilterKrit
      .Cells(A, 34).Value = .Range("A4").Value
    Next A
   
   FilterBereich.AutoFilter
End With

Application.ScreenUpdating = True
End Sub


Gruß Tino

Anzeige
Korrektur
25.04.2009 19:00:38
Tino
Hallo,
habe vergessen die If Bedingung noch richtig zu stellen.

If A = 1 Then
FilterKrit = "216"
ElseIf A = 2 Then
FilterKrit = "21601"
ElseIf A = 3 Then
FilterKrit = "21603"
ElseIf A = 4 Then
FilterKrit = "21604"
Else
FilterKrit = "21605"
End If


Gruß Tino

AW: ungetestet
25.04.2009 19:04:44
Kurt
Hallo Tino,
bleibt hier stehen, "Filtermethode konnte nicht ausgeführt werden",
FilterBereich.AutoFilter Field:=13, Criteria1:=FilterKrit
mfg
Kurt aus K
Lade mal ein Beispiel hoch. oT.
25.04.2009 19:08:34
Tino
verstehe auch nicht...
25.04.2009 19:13:55
Tino
Hallo,
habe mir das ganze noch mal angesehen.
Du kopierst immer die Zelle A4, den Filter setzt Du aber erst ab Zeile 5.
Verstehe ich nicht so richtig!
Gruß Tino
Anzeige
AW: verstehe auch nicht...
25.04.2009 19:19:09
Kurt
Hallo Tino,
in der Zelle A4 steht die Formel:
=TEILERGEBNIS(3;$A$6:$A$65000)
den Wert habe ich dann jeweils in die
Zelle: AH1,AH2,AH3,Ah4 u. AH5 nur als Wert kopiert.
Somit hatte ich die Anzahl.
Schutz ist nicht drin.
Die Datei ist sehr GROß,
mfg Kurt aus K
AW: verstehe auch nicht...
25.04.2009 19:24:18
Tino
Hallo,
mach eine kopie der Datei und lass nur dass nötige drin stehen, eventuell auch noch als Zip Archiv.
Gruß Tino
AW: Hier die Datei...
25.04.2009 19:43:42
Tino
Hallo,
bei mir unter xl2007 funzt die Version.
Vielleicht ist Version XP da etwas kleinlich den Filter so zu setzen.
Egal versuche es mal hiermit.
Sub Auszählen()
Dim A As Long
Dim FilterBereich As Range
Dim FilterKrit As String

Application.ScreenUpdating = False

With ActiveSheet
 
  Set FilterBereich = .Range("A5:AC" & Cells.SpecialCells(xlCellTypeLastCell).Row)
  
  If Not .FilterMode Then
   FilterBereich.AutoFilter
  End If
    
    For A = 1 To 5
            
            If A = 1 Then
             FilterKrit = "216"
            ElseIf A = 2 Then
             FilterKrit = "21601"
            ElseIf A = 3 Then
             FilterKrit = "21603"
            ElseIf A = 4 Then
             FilterKrit = "21604"
            Else
             FilterKrit = "21605"
            End If
      
       FilterBereich.AutoFilter Field:=13, Criteria1:=FilterKrit
       .Cells(A, 34).Value = .Range("A4").Value
    Next A
   
   
End With
FilterBereich.AutoFilter
Application.ScreenUpdating = True
End Sub


Gruß Tino

Anzeige
Super Danke -)
25.04.2009 20:02:45
Kurt
Hallo Tino,
einwandfrei,
DANKE.
Muß mich MORGEN nochmals melden, da ich eine weitere Selektion durchführen möchte,
bin aber noch nicht soweit mit den Daten.
mfg
Kurt aus K
trotzdem bleibt die Frage,
26.04.2009 13:04:00
Daniel
warum ein aufwendiges Makro schrieben, wenn es auch einfache ZählenWenn-Formlen tun würden.
wenns unbedingt ein Makro sein soll, kann man auch die Formellösung als Mako umsetzen:

Sub Zählen()
With Range("AH1:AH5")
.FormulaR1C1 = "=COUNTIF(C[-21],IF(RC[-1]=0,216,216*100+RC[-1]))"
.Formula = .Value
End With
End Sub


Gruß, Daniel
ps. die Formel in der normalschreibweise lautet einfach:
=ZÄHLENWENN(M:M;WENN(AG1=0;216;216*100+AG1))

Anzeige
AW: erstma selects aufräumen
25.04.2009 20:11:56
Daniel
Hi
grundsätzlich lass mal die ganzen selects weg.
dh. statt
Range("A1").Select
Selection.Copy

schreibt man
RangeI("A1").Copy
das gilt fürs kopieren, fürs einfügen und für den Autofilter (also eigentlich gilt das immer.
schreib dein Programm erstmal so um, dann wirds aufjeden fall Kürzer, übersichtlicher und auch schneller.
dann kann man sich auch weitere Gedangken über eine weitere optimierung machen (wenn sie denn dann noch notwendig ist)
was für eine Formel steht denn in A4 drin?
vielleicht kann man das ganze ja alleine über Formeln ohne Autofilter lösen.
Summe- und ZählenWenn funktioniert auch mit Platzhaltern (nur so als Hinweis)
Gruß, Daniel
Anzeige
Danke für den Hinweis -)
26.04.2009 10:16:53
Kurt
Guten Morgen Daniel,
danke für den Hinweis.
Habe das Makro von Tino genommen, geht sehr schnell,
schönen Sonntag noch,
mfg Kurt aus K

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige