Schleife für vba mit jeweilskleinen änderungen
26.07.2016 12:46:40
Chrostiffer
ich bin seit einiger Zeit dabei, Makros für die Arbeit anzufertigen, damit wiederholende Sachen leichter & schneller gehen. Meine Kenntnisse sind alle selber beigebracht, teils durch Foren wie hier oder aber auch den Recorder. Beim Recorder nutze ich dann aber nur die Funktionen, select & Co. nutze ich nicht.
Nun zum Problem:
Ich habe unten stehenden Excel vba geschrieben. Dieser steht für eine Basisliste, aus der ich nach Ländern filtere. Davon nehme ich dann teile der Daten raus, um sie in einem neuem Tabellenblatt (mit vorgefertigter Maske) grafisch bzw. tabellarisch darzustellen.
Wie kann ich diesen Teilcode, der sich für jedes Land (weltweit) wiederholt, als Schleife darzustellen, sodass ich kein elend langen Code mit wiederholungen habe?
"i = " würde ich am besten Über die Tabelle, Spalte 16 machen - dort wird der Landescode (DE,DK, etc..) angezeigt.
Im Vorfeld formatiere ich eine Rohdatentabelle als Export Tabelle (Strg + T).
Sheet Sales_customer_ranking ist mein "aufgehübschtes" Übersichtsblatt, bei dem die Top 30 Kunden des jeweiligen Landes sind.
Sheets "NeuesBlatt" war für mich die einzige Lösung, aus der gefilterten Tabelle die sichtbaren Daten zusammen in die neue Tabelle zu importieren.
VIELEN DANK IM VORAUS für Ideen und Verbesserungsvorschläge
Exemplarischer Teilcode für ein Land - Beispiel DE (Deutschland)
In fett dargestellt sind die Punkte, die sich bei jedem Land unterscheiden. Alles andere bleibt im Prinzip gleich.
++++++++++++++++++++++++++++
Sheets("Sales_Customer_Ranking").Copy After:=Sheets(1)
Sheets("Sales_Customer_Ranking (2)").name = "DE"
ActiveWorkbook.Worksheets("Export").ListObjects("Tabelle5").Sort.SortFields. _
Clear
Worksheets("Export").ListObjects("Tabelle5").Range.AutoFilter Field:=16, Criteria1:= _
"DE"
ActiveWorkbook.Worksheets("Export").ListObjects("Tabelle5").Sort.SortFields. _
Add Key:=Range("Tabelle5[[#All],[MBUDGET_LC]]"), SortOn:=xlSortOnValues, _
Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Export").ListObjects("Tabelle5").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets.Add After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
ActiveSheet.name = "NeuesBlatt"
ActiveWorkbook.Sheets("Export").Range("C2:E1700").SpecialCells(xlCellTypeVisible).Copy Worksheets("NeuesBlatt").Range("A1")
ActiveWorkbook.Sheets("Export").Range("K2:O1700").SpecialCells(xlCellTypeVisible).Copy Worksheets("NeuesBlatt").Range("D1")
Sheets("NeuesBlatt").Range("A1:H30").Copy
Sheets("DE").Range("B10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("NeuesBlatt").Delete
Sheets("DE").Select
Sheets("DE").Range("I1").FormulaR1C1 = "=TODAY()"
Sheets("DE").Range("C3") = Sheets("Rohdaten").Range("I2")
Sheets("DE").Range("C4") = "GERMANY"
Worksheets("DE").Range("H6").Value = Worksheets("EXPORT").Range("U1").Value
Range("H6:H7").Merge
With Range("H6:H7")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Worksheets("DE").Range("H10:H39").ClearContents
Worksheets("DE").Range("H10:H39").FormulaR1C1 = "=IFERROR((RC[-2]-RC[-1])/ABS(RC[-1]),"" "")"
Worksheets("DE").Range("H10:H39").Style = "Percent"