Registriert seit: 09.05.2015
Version(en): 2013, Office 365
Hallo zusammen,
verehrtes Forum vielleicht könnt Ihr mir wieder mal helfen?
Ich lese aus einem Tabellenblatt alle vergebenen Bereichsnamen in ein neues Tabellenblatt des gleichen Workbooks ein. Die Bereichsnamen sind so angelegt:
'Auswertung'!November_2014_Monatssumme 'Auswertung'!Oktober_2014_Monatssumme 'Auswertung'!April_2015_Monatssumme 'Auswertung'!August_2015_Monatssumme 'Auswertung'!Januar_2015_Monatssumme 'Auswertung'!Juli_2015_Monatssumme 'Auswertung'!Juni_2015_Monatssumme 'Auswertung'!Mai_2015_Monatssumme 'Auswertung'!März_2015_Monatssumme 'Auswertung'!November_2015_Monatssumme 'Auswertung'!Oktober_2015_Monatssumme 'Auswertung'!September_2015_Monatssumme .....usw
Meine Frage ist nun wie ich per VBA eine Sortierung erstellen kann dass "aufsteigend" nach Monat & Jahr sortiert werden kann? Ist das möglich wenn das Sortierkriterium sich in einem String verbirgt?
Vielen Dank für eine Rückmeldung!
Registriert seit: 11.04.2014
Version(en): 2021
Hallo Erich,
natürlich ist das möglich!
Löse mittels VBA die ausgelesenen Bezeichnungen in Hilfsspalte auf und sortiere dann die ganze Zeile - die Hilfsspalten kannst du anschließend wieder löschen. Die Monatsnamen muss du mittels Select-Case-Anweisung vom Text in die Zahlenwerte bringen, dann sortierst du mit zwei Kriterien.
![[Bild: attachment-190.gif]](https://www.world-of-smilies.com/wos_computer/attachment-190.gif) Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo,
ein Tip für die Zukunft:
Wenn Du Datumsangaben in Bezeichnungen verwendest, dann nimm Zahlen und das Format "YYYY-MM-TT" , also erst das Jahr dann Monat und Tag, so wird ob in Ordner oder in Namen alles automatisch chronologisch sortiert.
Z.B bei Deinen Namen:
'Auswertung'!_2015_01_Monatssumme
Gruß Atilla
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
01.12.2015, 16:15
(Dieser Beitrag wurde zuletzt bearbeitet: 01.12.2015, 17:54 von Glausius.)
Hi! Nur zur Demo ... Ist ganz einfach, vielleicht verwurstelt jemand dieses ja in einer Monsterformel? :19: (hier bereits nach der Sortierung) | A | B | C | D | E | F | G | 1 | String | Beg Monat | Beg Jahr | Monat | MonatZahl | Jahr | Sortiere | 2 | 'Auswertung'!Oktober_2014_Monatssumme | 14 | 22 | Oktober | 10 | 2014 | 01.10.2014 | 3 | 'Auswertung'!November_2014_Monatssumme | 14 | 23 | November | 11 | 2014 | 01.11.2014 | 4 | 'Auswertung'!Januar_2015_Monatssumme | 14 | 21 | Januar | 1 | 2015 | 01.01.2015 | 5 | 'Auswertung'!März_2015_Monatssumme | 14 | 19 | März | 3 | 2015 | 01.03.2015 | 6 | 'Auswertung'!April_2015_Monatssumme | 14 | 20 | April | 4 | 2015 | 01.04.2015 | 7 | 'Auswertung'!Mai_2015_Monatssumme | 14 | 18 | Mai | 5 | 2015 | 01.05.2015 | 8 | 'Auswertung'!Juni_2015_Monatssumme | 14 | 19 | Juni | 6 | 2015 | 01.06.2015 | 9 | 'Auswertung'!Juli_2015_Monatssumme | 14 | 19 | Juli | 7 | 2015 | 01.07.2015 | 10 | 'Auswertung'!August_2015_Monatssumme | 14 | 21 | August | 8 | 2015 | 01.08.2015 | 11 | 'Auswertung'!September_2015_Monatssumme | 14 | 24 | September | 9 | 2015 | 01.09.2015 | 12 | 'Auswertung'!Oktober_2015_Monatssumme | 14 | 22 | Oktober | 10 | 2015 | 01.10.2015 | 13 | 'Auswertung'!November_2015_Monatssumme | 14 | 23 | November | 11 | 2015 | 01.11.2015 | Formeln der Tabelle | Zelle | Formel | B2 | =FINDEN("!";A2)+1 | C2 | =FINDEN("_";A2)+1 | D2 | =TEIL(A2;B2;C2-B2-1) | E2 | =SUCHEN(LINKS(D2;3);"||janfebmäraprmaijunjulaugsepoktnovdez")/3 | F2 | =TEIL(A2;C2;4) | G2 | =DATUM(F2;E2;1) |
| Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8 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)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• sharky51
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Weil mich der Ehrgeiz packte was kompaktes mit nur einer (Sortier-)Hilfsspalte: | A | B | 1 | String | Sortiere | 2 | 'Auswertung'!November_2014_Monatssumme | 41944 | 3 | 'Auswertung'!Oktober_2014_Monatssumme | 41913 | 4 | 'Auswertung'!April_2015_Monatssumme | 42095 | 5 | 'Auswertung'!August_2015_Monatssumme | 42217 | 6 | 'Auswertung'!Januar_2015_Monatssumme | 42005 | 7 | 'Auswertung'!Juli_2015_Monatssumme | 42186 | 8 | 'Auswertung'!Juni_2015_Monatssumme | 42156 | 9 | 'Auswertung'!Mai_2015_Monatssumme | 42125 | 10 | 'Auswertung'!März_2015_Monatssumme | 42064 | 11 | 'Auswertung'!November_2015_Monatssumme | 42309 | 12 | 'Auswertung'!Oktober_2015_Monatssumme | 42278 | 13 | 'Auswertung'!September_2015_Monatssumme | 42248 | Formeln der Tabelle | Zelle | Formel | B2 | =--(TEIL(A2;FINDEN("!";A2)+1;3)&TEIL(A2;FINDEN("_";A2)+3;2)) |
| Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8 :19: 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)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• sharky51
Registriert seit: 11.04.2014
Version(en): 2021
01.12.2015, 17:56
(Dieser Beitrag wurde zuletzt bearbeitet: 01.12.2015, 17:56 von Glausius.)
... jetzt muss nur noch aufsteigend nach Spalte B sortiert werden!
![[Bild: attachment-190.gif]](https://www.world-of-smilies.com/wos_computer/attachment-190.gif) Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Folgende(r) 1 Nutzer sagt Danke an Glausius für diesen Beitrag:1 Nutzer sagt Danke an Glausius für diesen Beitrag 28
• sharky51
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
Danke Leute,
Ihr seid so cool und kompetent, einfach klasse.
Ich werde Eure Ratschläge versuchen umzusetzen und testen.
Eine VBA Lösung wäre aber immer noch nicht schlecht.
Vielen Dank!
Registriert seit: 10.04.2014
Version(en): 2016 + 365
Hi, (01.12.2015, 23:41)sharky51 schrieb: Eine VBA Lösung wäre aber immer noch nicht schlecht. Option Explicit
Sub Sortieren_nach_Jahr_und_Monat()
'
' Sortieren_nach_Jahr_und_Monat Makro
'
Dim loLetzte As Long
'
loLetzte = Cells(Rows.Count, 2).End(xlUp).Row ' letzte belegte in Spalte B (2)
Range("B2:B" & loLetzte).FormulaR1C1 = _
"=--(MID(RC[-1],FIND(""!"",RC[-1])+1,3)&MID(RC[-1],FIND(""_"",RC[-1])+3,2))"
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key:=Range("B1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Tabelle1").Sort
.SetRange Range("A2:B" & loLetzte)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("B2").Select
End Sub
VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Hi Ralf! Nur ergänzend bzw. meine Sicht der Dinge, hat nichts mit Deinem Code zu tun. - Ich persönlich mag die Sortiermethode ab 2007 nicht und verwende lieber eine Zeile nachvollziehbaren Code als die acht, die uns der Makrorekorder aufdrängt (zumindest, wenn es sich um eine "normale" Sortierung handelt).
- Ich nehme eine Hilfsspalte, die auf jeden Fall leer ist und lösche sie nach der Sortierung gleich wieder.
- Normalerweise nehme ich auch die .FormulaR1C1-Variante, weil es auch diejenige ist, die Excel intern verwendet. Hier mal ausnahmsweise die .FormulaLocal-Version, damit der TE sieht, dass das Makro nichts anderes macht wie meine oben gepostete Formellösung.
Sub SortRPP() Dim Spalte As Integer, Zeile As Long Spalte = Cells(1, Columns.Count).End(xlToLeft).Column + 1 Zeile = Cells(Rows.Count, 1).End(xlUp).Row With ActiveSheet .Range(Cells(2, Spalte), Cells(Zeile, Spalte)).FormulaLocal = _ "=--(TEIL(A2;FINDEN(""!"";A2)+1;3)&TEIL(A2;FINDEN(""_"";A2)+3;2))" .UsedRange.Sort Key1:=.Columns(Spalte), Order1:=xlAscending, Header:=xlYes .Columns(Spalte).Delete End With End Sub 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)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• sharky51
Registriert seit: 10.04.2014
Version(en): 2016 + 365
02.12.2015, 12:40
(Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2015, 12:41 von Rabe.)
Hi Ralf, (02.12.2015, 12:09)RPP63 schrieb: Nur ergänzend bzw. meine Sicht der Dinge, hat nichts mit Deinem Code zu tun. das ist gar kein Problem. Ich hatte, weil ich zu faul war, länger nachzudenken, das Makro aufgezeichnet und dann verallgemeinert und die meisten Activates/Selects entfernt. Dein Code ist natürlich besser und wahrscheinlich schneller. FormulaLocal gefällt mir auch viel besser, hab aber nicht dran gedacht, R1C1 im Code zu ersetzen.
Folgende(r) 1 Nutzer sagt Danke an Rabe für diesen Beitrag:1 Nutzer sagt Danke an Rabe für diesen Beitrag 28
• sharky51
|