ich bin ganz neu im Forum und kann leider keine Screenshots einfügen :-(
Ich habe folgendes Problem und hoffe, dass ihr mir trotzdem helfen könnt.
Und zwar geht es um eine sehr große Excel Datei mit vielen Spalten. Die Spalten enthalten Vertragsdaten. Hat ein Kunde mehrere Verträge so werden sie ganz rechts angehängt. Die relevante Zeile ist Zeile 4 (darüber stehen unnötige Informationen, bspw. wie die interne Abfrage ausgesehen hat)
Jede Zeile ist ein Kunde.
Alle Spalte vor dem ersten Vertrag sind "fixe Stammdaten" zum Kunden. Die Spalte AQ (und alle Spalten davor) beinhalten also immer die gleichen Informationen.
Und danach kommen die Vertragsdaten.
Bspw. steht in Spalte
AR "Verträge AAA"
AS "Vertrag im mM"
AT "Verträge BBB"
AU "Vertrag im mM"
AV "Verträge CCC"
AW "Vertrag im mM"
In diesem Fall hat der Kunde also drei Verträge für drei unterschiedliche Produkte (AAA, BBB, CCC). Hätte er nur zwei Verträge, dann wäre die Spalte AU die letzte. Hätte er vier Verträge wären zwei weitere Spalten drangehängt, usw.
Mich interessiert aber immer die Spalte danach - die heißt immer "Vertrag im mM" - in diesen Spalten steht immer "J" oder "N"
Jeder Kunde hat immer mindestens einen Vertrag, d.h. einen "Vertrag im mM" gibt es immer sicher.
Aktuell löse ich das so
Set rVertragImMm = Worksheets("XXX").Rows("4:4").Find("Vertrag im mM")
Worksheets("XXX").Range("4:4").AutoFilter _
Field:=rVertragImMm.Column, _
Criteria1:="=J"
Das klappt aber nicht mehr, wenn eine Kunde mehrere Verträge hat.Ich brauche jetzt also ein Makro, dass sicherstellt, dass der Kunde mind. 1 J bei einem von mehreren Verträgen hat (also bei einem der drei Verträge mind. ein "J" in der gleichnamigen Spalte "Vertrag im mM" hat).
Da ich noch viele andere Dinge filtern muss, würde ich gerne eine Nettosumme "ganz rechts" in der ersten freien Spalte bilden.
Es wäre es toll, wenn das Makro
1. Erkennt wo die erste freie Spalte ganz rechts ist (in meinem Beispiel also "AX")
Dafür würde ich das Makro von rechts auf die erste gefüllte Zelle springen lassen
In etwa so
'Ich werde vermutlich nie mehr als 10 Verträge haben. Ich gehe also von der Spalte XX4 nach _
links (und addiere 1, weil ich ja die freie Spalte will und nicht die gefüllte)
iLastColumn = Range("XX4").End(xlToLeft).Column + 1
2. Erkennt, wie viele Verträge zu berücksichtigen sindDafür ziehe ich von der aktuellen Spaltennummer immer 42 (Spaltennummer der "fixen Spalte" AQ MINUS 1) abziehen und diesen Wert durch 2 teilen ((48-42)/2=3)
iAnzahlEinträge = (iLastColumn - 42) / 2
Soweit sieht das ganze so aus
Sub mM_MBV_netto()
Dim iLastColumn As Integer
Dim iAnzahlEinträge As Integer
iLastColumn = Range("XX4").End(xlToLeft).Column + 1
iAnzahlEinträge = (iLastColumn - 42) / 2
End Sub
Das liefert den Wert 3 (für drei Verträge)3. Und jetzt würde gerne unter der Spaltenüberschrift, z.B. "Nettosumme", in der oben ermittelten "ersten freien Spalte" (AX, Spalte 48) eine Formel einfügen, die sagt "Wenn mindestens eine dieser drei Spalten "J" ist, dann setze den Wert auf 1, sonst auf 0."
4. Und danach soll die Formel "nach unten gezogen" werden, d.h. auf alle Kunden (=gefüllte Zeilen) angewandt werden.
Ich hoffe, dass das so verständlich gewesen ist. Ich habe mir Mühe gegeben, auch wenn ich glaube, dass ein Bild geholfen hätte :-)