MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 28.06.2006, 11:56   #1
uqzj
Standard VBA - einstellung des autofilters per if abfragen

Hallo.

In meiner excel Mappe sind etwa 55 spalten und 2500 zeilen. Ich erstelle nun mit hilfe eines Makros verschiedene diagramme. um diese zu füttern habe ich zusätzlich 10 spalten für einen "Tabellenzwischenspeicher" erstellt, der mir aus einer spalte nur die beschriebenen Felder rauskopiert. so bekomme ich ein diagramm ohne lücken. Diese Zwischenspeicher-Spalten möchte ich aber gerne weglassen und kann den selben effekt erzielen, indem ich den autofilter der daten, die ich brauch auf (Nichtleere) setze, und der daten, die ich nicht benötige auf (Alle). Beim Schließen des Diagramms wird der autofilter aller spalten wieder auf den vorherigen zustand zurückgesetzt. Soweit so gut. Die Makros geschrieben, funktioniert alles. Habe nun ein kleines Problem. Beim erstellen des Diagramms muss das Programm nun 53 Spalten auf (Alle) setzen und 2 Spalten auf (Nichtleere). Es rechnet mir bei 2500 zeilen mal locker 5 minuten. Da die meisten Spalten schon auf (Alle) stehen, wäre es doch sinnvoll diese statt auf (Alle) zu setzen ersteinmal zu prüfen, auf welchen wert diese gesetzt sind.
Habt ihr da eine Idee, wie ich eine IF abfrage von dem Autofilter machen kann?

Mein bisheriger ansatz sieht etwa so aus:
'AutoFilter in der 7.Zeile
Range("A7").Select
For i = 1 To 55
If Selection.AutoFilter(i) Then
Selection.AutoFilter (i)
End If

Leider sortiert der mir trotzdem gnadenlos alle spalten.
Habt ihr eine Lösung?
Danke schonmal
 
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 28.06.2006, 16:11   #2
Lumpensammler
MOF Meister
MOF Meister
Standard

Hallo, uqzj,

warum nutzt Du nicht etwas wie ActiveSheet.ShowAllData für das Zurückstellen?

Gruß
LS

__________________

Man muß viel gelernt haben, um das, was man nicht weiß, erfragen zu können. (Jean-Jacques Rousseau)
Wer nicht kann, was er will, muß das wollen, was er kann. (Leonardo da Vinci)
Lumpensammler ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 28.06.2006, 17:28   #3
uqzj
Standard

Hallo Lumpensammler.
Danke für die schnelle Antwort.
Ich programiere seit einer woche mit vba. all mein wissen habe ich aus diesem forum und der Hilfe. Deswegen kenne ich leider nicht alle Möglichkeiten und Befehle.
Dieser Befehl spart mir tatsächlich 4 minuten gegenüber meiner For schleife.
Leider dauert mir das trotzdem noch etwas lange. Liegt wahrscheinlich an der großen Datenmenge.
Zudem noch: je nach diagramm sollen nicht alle auf (Alle) gesetzt werden.
Quasi so:
ActiveSheet.ShowAllData
Range("A2").Select
Selection.AutoFilter Field:=31, Criteria1:="="
Selection.AutoFilter Field:=45, Criteria1:="irgendwas"
Selection.AutoFilter Field:=47, Criteria1:="="
Selection.AutoFilter Field:=51, Criteria1:="irgendwas anderes"
Gibt es denn wirklich keine Überprüfung?
 
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 28.06.2006, 17:39   #4
jinx
MOF Guru
MOF Guru
Standard

Moin, uqzj,

da niemand von außen auf Deinen Code sehen kann: eventuell kann das Ausschalten der Neuberechnung und des Bildschirmaufbaus während des Makrolaufes die Zeit verkürzen.

Für verschiedene Bereiche würde ich unterschiedliche Bereiche auf den Tabellen mit Angaben vosehen, die ggf. durch Namen gekennzeichnet sind und die einzelnen Üebrgaben gewährleisten oder die Verwendung eienr Select Case-Anweisung bevorzugen, in der die einzelnen Bereiche durch die Verwendung von Begriffen aufgeschlüsselt werden. Aber ganz ohne Kenntnis der Mappe tue ich mich mit Hilfestellungen schwer...

__________________

cu
jinx


per 31.12.2010 ausgeschiedener User und ehemaliger Excel-

Folgende Tools werden zur optischen Aufbereitung eingesetzt: <a *****"http://www.ms-office-forum.net/forum/codeconverter.php" target="_blank">Code Converter</a>; <a *****"http://www.haserodt.de/ejh_do/ex_jean_info.htm" target="_blank">Excel Jeanie Html</a>
Für die allgemeinen Hinweise: <a *****"http://www.ms-office-forum.net/forum/netiquette.php" target="_blank">Netiquette</a>; <a *****"http://www.excel-vba.de/frageninforen.htm" target="_blank">Fragen und Antworten in Foren</a>

eingesetzte Betriebssysteme: XP Home, XP Media Center Edition, XP Professional, Vista Ultimate, 7/Seven
verwendete Programme: Excel97 SR-2, Office 2000 SP-3, Office2002/XP SP-3, Office 2003 Professional SP-3, Office 2007 Home & Student SP-3, Office 2007 Professional SP-3
jinx ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.06.2006, 12:29   #5
uqzj
Standard

Hallo jinx.

OK. Ich versuchs mal:

Also ich habe ein Herzustellendes Teil, das aus etwa 100 bauteilen besteht. jedes Bauteil steht einmal mit dem anlieferungstermin und einmal mit dem auslieferungstermin in einer zeile. also sind das etwa 200 zeilen pro teil.
in der ersten spalte steht der name des bauteils,
in einer anderen spalte steht der bearbeitungsort, in einer anderen die ordernummer, in einer anderen die Bauteilbezeichung. nun gibt es die möglichkeit über 5 Buttons ein diagramm für die jeweilige spalte zu erstellen.
also beispiel:
Ich kann über button nr.3 (durch combobox) nach bearbeitungsort filtern, und daraus durch die subtraktion von an und ablieferung die bearbeitungszeit für diesen bearbeitungsort darstellen. die x-achsenbeschriftung ist in dem fall die bauteilnamen der dort gefertigten bauteile. das Diagramm wird in eine neue mappe exportiert, um die originalmappe bei dem prozess nicht zu verändern. schließlich wird ein button eingefügt, der mir die neue mappe shließt, ohne zu speichern.

das problem mit dem ursprünglichen Zustand habe ich mitlerweile gelöst.
ich speichere einfach vor dem filtern die mappe, schließe die gefilterte mappe am ende der prozedur und öffne die ungefilterte mappe wieder. so hab ich den ursprungszustand, ohne zurück filtern zu müssen.
das problem ist aber noch gegenwärtig beim filtern der daten für das jeweilige diagramm. da die mappe von verschiedenen personen genutzt wird, wie beispielsweise der einkaufabteilung, die sich für die ordernummern interessieren oder der werkzeugabteilung, die sich für den berabeitungsort interessieren, wird sie von diesen menschen geflitert, nicht zurückgefiltert und gespeichert. also bekomme ich immer wieder eine unterschiedlich gefilterte mappe auf meinem Bildschirm, bei der ich erst alle daten anzeige, dann nach den für das diagramm gewollten daten filtere. wenn nun das controling die mappe als letztes vor mir geöffnet hatte und genau meine benötigten daten gefiltert hat, ich das aber nicht weiß, möcht ich nicht die aufwendige entfilter und neu filter reihenfolge durchlaufen, sondern überprüfen, auf was der filter gesetzt ist und ggf. zu filtern.
das vorerst mal zur kenntnis der mappe.
leider kann ich als gast keine dateien einfügen, deswegen der ganze text.

Mit "...Ausschalten der Neuberechnung und des Bildschirmaufbaus..." ist das gemeint?
Application.ScreenUpdating = False
is drin...
Vielen Dank schon mal
 
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.06.2006, 13:46   #6
jinx
MOF Guru
MOF Guru
Standard

Moin, uqzj,

das kann doch beim Schließen der Mappe oder dem Öffnen per Makro erledigt werden.

Code:

Sub ShowAutoFilterCriteria()
' John Green et. al: Excel 2000 VBA Programmer´s Reference, S. 379f
  Dim oAF As AutoFilter
  Dim oFlt As Filter
  Dim sField As String
  Dim sCrit1 As String
  Dim sCrit2 As String
  Dim sMsg As String
  Dim i As Integer
 
  ' Check if the sheet is filtered at all
  If ActiveSheet.AutoFilterMode = False Then
    MsgBox "The sheet does not have an Autofilter"
    Exit Sub
  End If
 
  ' Get the sheet´s Autofilter object
  Set oAF = ActiveSheet.AutoFilter
 
  ' Loop through the Filters of the Autofilter
  For i = 1 To oAF.Filters.Count
 
    ' Get the field name form the first row
    ' of the Autofilter range
    sField = oAF.Range.Cells(1, i).Value
 
    ' Get the Filter object
    Set oFlt = oAF.Filters(i)
 
    ' If it is on...
    If oFlt.On Then
 
      ' Get the standard filter criteria
      sMsg = sMsg & vbCrLf & sField & oFlt.Criteria1
 
      ' If it´s a special filter, show it
      Select Case oFlt.Operator
        Case xlAnd
          sMsg = sMsg & " And " & sField & oFlt.Criteria2
        Case xlOr
          sMsg = sMsg & " Or " & sField & oFlt.Criteria2
        Case xlBottom10Items
          sMsg = sMsg & " (bottom 10 items)"
        Case xlBottom10Percent
          sMsg = sMsg & " (bottom 10%)"
        Case xlTop10Items
          sMsg = sMsg & " (top 10 items)"
        Case xlTop10Percent
          sMsg = sMsg & " (top 10%)"
      End Select
    End If
  Next i
 
  If msg = "" Then
    ' No filters are applied, so say so
    sMsg = "The range " & oAF.Range.Address & " is not filtered."
  Else
    ' Filters are applied, so show them
    sMsg = "The range " & oAF.Range.Address & " is filtered by:" & sMsg
  End If
 
  ' Display the message
  MsgBox sMsg
End Sub
Code eingefügt mit dem MOF Code Converter

__________________

cu
jinx


per 31.12.2010 ausgeschiedener User und ehemaliger Excel-

Folgende Tools werden zur optischen Aufbereitung eingesetzt: <a *****"http://www.ms-office-forum.net/forum/codeconverter.php" target="_blank">Code Converter</a>; <a *****"http://www.haserodt.de/ejh_do/ex_jean_info.htm" target="_blank">Excel Jeanie Html</a>
Für die allgemeinen Hinweise: <a *****"http://www.ms-office-forum.net/forum/netiquette.php" target="_blank">Netiquette</a>; <a *****"http://www.excel-vba.de/frageninforen.htm" target="_blank">Fragen und Antworten in Foren</a>

eingesetzte Betriebssysteme: XP Home, XP Media Center Edition, XP Professional, Vista Ultimate, 7/Seven
verwendete Programme: Excel97 SR-2, Office 2000 SP-3, Office2002/XP SP-3, Office 2003 Professional SP-3, Office 2007 Home & Student SP-3, Office 2007 Professional SP-3
jinx ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.06.2006, 14:17   #7
uqzj
Standard

Hallo jinx,
vielen herzlichen Dank. Es klappt!!! Danke.
Hab nur die bedingung der vorletzten if schleife geändert:

If msg = "" Then

in das geändert:

If sMsg = "" Then

damit ist das ei gelegt.
Danke
 
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.