Hallo Yal,
ja das mit der PQ Lösung passt so, danke für die viele Mühe und Geduld
du hast ja vielleicht gesehen, dass Spalte I nur ein Bsp. war. Sag wenn ich falsch liege, aber ich hab das Gefühl du willst darauf hinaus das ganze Makro durch eine PQ Abfrage zu ersetzen. Ich habe mir bei der Bitte um eine Formellösung gedacht, dass dies das einfachste ist, in die bestehende Strukturen einzubauen. Wir reden von einer Tabelle, die alleine auf diesem Blatt 16 Formeln hat, die durchaus komplexer sind als die eine jetzt in Spalte I, außerdem später mal wenn sie fertig ist 4 Makros, und 12 PQ Abfragen. Für all das hat bei meinen jetzigen Planungen nur diese eine Formel gefehlt.
Jetzt anzufangen aus diesem Makro zum Berechnen der Formeln eine einzge PQ Abfrage zu bauen, wird denke ich aufgrund der Komplexität auch für einen Profi sehr aufwändig.
Also bleiben für mich eigentlich nur 3 Lösungen
1. Ich schreibe die "30" von Hand in die Tabelle, mit der Gefahr das ich was übersehe
2. ich nutze das bisherige Makro bis einschließlich Spalte R und starte für Spalte S aus dem Makro heraus deine PQ Abfrage oder
3. es gibt doch eine Formel mit der ich das berechnen kann.
Hier mal das gesamte Makro, damit du mal einen Einblick bekommst was da bei einer Umsetzung in PQ von Nöten wäre (und ja das Makro bezieht sich auch auf Blätter, von denen in der Bsp. Datei keine Rede war, nur da ich an den bestehenden Formeln auch nichts ändern wollte, sah ich auch keine Notwendigkeit, davon etwas zu posten).
Sub Ergebnis()
Dim loLetzte As Long, j As Long, x As Long, lC As Long
Application.ScreenUpdating = False
With Worksheets("Ergebnis").ListObjects(1).DataBodyRange
With .Columns(2)
.NumberFormat = "General"
.FormulaR1C1 = "=XLOOKUP(RC[-1],Filme!R2C1:INDEX(Filme!C[-1],neue!R1C[3]),Filme!R2C2:INDEX(Filme!C,neue!R1C[3]),"""",0,1)"
.NumberFormat = "@"
.Formula = .Value2
End With
With .Columns(3)
.FormulaR1C1 = "=IF(XLOOKUP(RC[-2],Filme!R2C1:INDEX(Filme!C[-2],neue!R1C[2]),Filme!R2C3:INDEX(Filme!C,neue!R1C[2]),"""",0,1)="""",0,XLOOKUP(RC[-2],Filme!R2C1:INDEX(Filme!C[-2],neue!R1C[2]),Filme!R2C3:INDEX(Filme!C,neue!R1C[2]),"""",0,1))"
.Formula = .Value2
End With
With .Columns(5)
.FormulaR1C1 = "=XLOOKUP(RC[-1],Leute!R2C1:INDEX(Leute!C[-4],neue!R2C),Leute!R2C2:INDEX(Leute!C[-3],neue!R2C),"""",0,1)"
.Formula = .Value2
End With
With .Columns(6)
.FormulaR1C1 = "=IF(XLOOKUP(RC[-2],Leute!R2C1:INDEX(Leute!C[-5],neue!R2C[-1]),Leute!R2C3:INDEX(Leute!C[-3],neue!R2C[-1]),"""",0,1)="""","""",XLOOKUP(RC[-2],Leute!R2C1:INDEX(Leute!C[-5],neue!R2C[-1]),Leute!R2C3:INDEX(Leute!C[-3],neue!R2C[-1]),"""",0,1))"
.Formula = .Value2
End With
End With
With Worksheets("Ergebnis")
loLetzte = .Cells(Rows.Count, 1).End(xlUp).Row
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=.Range("C2:C" & loLetzte), SortOn:=xlSortOnValues, _
Order:=xlDescending, DataOption:=xlSortNormal
.Sort.SortFields.Add Key:=.Range("F2:F" & loLetzte), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange Range("A2:R" & loLetzte)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
With Worksheets("Ergebnis").ListObjects(1).DataBodyRange
With .Columns(7)
.FormulaR1C1 = "=IF(OR(RC[-4]=0,RC[-1]=""""),"""",IF(RC[-1]>RC[-4],0,DATEDIF(RC[-1]+1461000,RC[-4]+1461000,""Y"")))"
.Formula = .Value2
End With
With .Columns(8)
.FormulaR1C1 = "=IF(RC[-1]="""","""",IF(RC[-2]>RC[-5],0,DATEDIF(RC[-2]+1461000,RC[-5]+1461000,""YD"")))"
.Formula = .Value2
End With
With .Columns(9)
.FormulaR1C1 = "=IF(RC[-2]="""","""",RC[-6]-RC[-3])"
.Formula = .Value2
End With
With .Columns(10)
.FormulaR1C1 = "=IF(RC[-3]="""","""",RANK(RC[-1],R2C9:INDEX(C[-1],neue!R3C[-5]),1))"
.Formula = .Value2
End With
With .Columns(11)
.FormulaR1C1 = "=IF(RC[-4]="""","""",IF(COUNTIF(RC[-7]:INDEX(C[-7],neue!R3C5),RC[-7])=1,RC[-5],""""))"
.Formula = .Value2
End With
With .Columns(12)
.FormulaR1C1 = "=IF(IF(RC[-9]=0,"""",MAX(RC[-6]:INDEX(C[-6],neue!R3C5)))=0,"""",IF(RC[-9]=0,"""",MAX(RC[-6]:INDEX(C[-6],neue!R3C5))))"
.Formula = .Value2
End With
With .Columns(13)
.FormulaR1C1 = "=IF(COUNTIF(RC[-2]:INDEX(C[-2],neue!R3C5),"">0"")30),"""",DATEDIF(RC[-2],RC[-12],""Y""))"
.Formula = .Value2
End With
With .Columns(16)
.FormulaR1C1 = "=IF(RC[-1]="""","""",DATEDIF(RC[-3],RC[-13],""YD""))"
.Formula = .Value2
End With
With .Columns(17)
.FormulaR1C1 = "=IF(RC[-2]="""","""",RC[-14]-RC[-4])"
.Formula = .Value2
End With
With .Columns(18)
.FormulaR1C1 = "=IF(AND(RC[-4]0),""MRS ""&IF(RC[-9]