Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Filtern von Daten nach Jahr mittels VBA
#1
Moin!
Seltsames Verhalten oder beginnende Demenz bei mir?
Office 365 Beta aktuelle Version
Gegeben:
Tabelle mit Überschriften und 60 Daten vom 1.1.20 bis 28.9.23 ab B2
Folgender Code filtert die Tabelle nach Jahr:
Sub Filtern_nach_Jahr()
Dim Jahr&
Jahr = Application.InputBox("Jahr zwischen 2020 und 2023 angeben:", , 2021, Type:=1)
Cells(1).CurrentRegion.AutoFilter Field:=2, _
  Operator:=xlFilterValues, Criteria2:=Array(0, "12/31/" & Jahr)
End Sub
Criteria2:=Array(0, "12/31/" & Jahr)
filtert also das angegebene Jahr (und lässt die Vor- und Folgejahre außen vor).
Das war doch "früher" nicht so einfach?

Ich hänge die Übungsdatei als xlsx mal an.

Gruß Ralf


Angehängte Dateien
.xlsx   60_Daten_Filter.xlsx (Größe: 10,48 KB / Downloads: 7)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#2
Funktioniert auch in E 2010 ähnlich:

Code:
Sub M_snb()
    Cells(1).CurrentRegion.AutoFilter 2, , 7, Array(0, "12/31/" & InputBox("2020 - 2023", , 2020))
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • RPP63
Antworten Top
#3
Hi,

in Office365 funktioniert das genauso.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
[-] Folgende(r) 1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag:
  • RPP63
Antworten Top
#4
Hi,

was willst du jetzt hören? Dass du wirklich beginnende Demenz hast? Angel

Ich habe mich VBA-seitig bisher nicht allzu sehr mit dem Autofilter auseinander gesetzt. Bei mir (365 2302) funktioniert deine Routine auch. Aber ich habe mir jetzt mal die Hilfedatei dazu durchgelesen. Dort steht eindeutig:
Zitat:Criteria2
Optional
Variant
Das zweite Kriterium (eine Zeichenfolge). Wird mit Criteria1 und Operator verwendet, um ein Verbundkriterium zu erstellen. Wird auch als einzelne Kriterien für Datumsfelder verwendet, die nach Datum, Monat oder Jahr filtern. Gefolgt von einem Array, der die Filterung beschreibt Array(Level, Date). Hierbei ist "Level" 0-2 (Jahr, Monat, Datum) und "Date" ein gültiges Datum innerhalb des Filterzeitraums.
Die fette Hervorhebung ist von mir. Man kann also tatsächlich nach Jahr oder Monat oder Tag filtern und das Datum muss nur im entsprechenden Bereich liegen.

Die Hilfedatei hat als Datum den 07.04.2023 und keinerlei Hinweise auf irgendwelche Änderungen. Also wird es diese Funktionalität wohl geben, seit man das Datum Filtern kann. Also schon ewig.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
[-] Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:
  • RPP63
Antworten Top
#5
Dann würde ich bevorzügen:

Code:
Sub M_snb()
    Cells(1).CurrentRegion.AutoFilter 2, , 7, Array(0, DateSerial(InputBox("2020 - 2023", , 2020), 1, 1))
End Sub

@Hkind

In E 2010, VBA Help Autofilter, nur:

Zitat:The second criteria (a string). Used with Criteria1 and Operator to construct compound criteria.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#6
Hi.

War das nicht schon sehr lange so.
Hier mal was aus mein alten Unterlagen.
Code:
    'When filtering for multiple periods that are selected from
    'filter drop-down menu,use Operator:=xlFilterValues and
    'Criteria2 with a patterned Array.  The first number is the
    'time period.  Second number is the last date in the period.
   
    'First dimension of array is the time period group
      '0-Years
      '1-Months
      '2-Days
      '3-Hours
      '4-Minutes
      '5-Seconds
   
   
    'Multiple Years (2014 and 2016) use last day of the time
    'period for each array item
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(0, "12/31/2014", 0, "12/31/2016")
   
    'Multiple Months (Jan, Apr, Jul, Oct in 2015)
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(1, "1/31/2015", 1, "4/30/2015", 1, "7/31/2015", 1, "10/31/2015")
   
    'Multiple Days
    'Last day of each month: Jan, Apr, Jul, Oct in 2015)
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(2, "1/31/2015", 2, "4/30/2015", 2, "7/31/2015", 2, "10/31/2015")
   
    'Multiple Hours (All dates in the 11am hour on 1/10/2018
    'and 11pm hour on 1/20/2018)
    .AutoFilter Field:=iCol, _
                Operator:=xlFilterValues, _
                Criteria2:=Array(3, "1/10/2018 13:59:59", 3, "1/20/2018 23:59:59")
Gruß Elex
[-] Folgende(r) 2 Nutzer sagen Danke an Elex für diesen Beitrag:
  • snb, RPP63
Antworten Top
#7
Moin!
Danke für die zahlreichen Antworten!
Offensichtlich ist dieser Weg jahrelang erfolgreich meinen Blicken verborgen geblieben.
(oder es ist doch die beginnende D. …) Wink
Eins jedenfalls hat dieser Fettnapf bewirkt:
Das vergesse ich nicht mehr, es sei denn … Smile

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste