Registriert seit: 08.02.2017
Version(en): 2016
22.11.2018, 09:34
(Dieser Beitrag wurde zuletzt bearbeitet: 22.11.2018, 09:35 von dertommy.)
Hallo! Ich habe folgendes Problem. Ich habe eine Formel, welche ich mittels VBA in eine bestimmte Zelle schreibe. Nur schaffe ich es nicht, diese Formel mit einer geschwungenen Klammer vorne und hinten zu erzeugen. Hier einmal der Code: Code: .Cells(q, 24).FormulaR1C1 = "=IF(COUNTIFS(Auszahlungen!C[-23],""" & strFind & """,Auszahlungen!C[-18],""ausgezahlt"")=1,""Auszahlung: "" & COUNTIFS(Auszahlungen!C[-23],""" & strFind & """,Auszahlungen!C[-18],""ausgezahlt"") & "" am "" & TEXT(MAX(IF(Auszahlungen!C[-23]=""" & strFind & """,Auszahlungen!C[-16])),""TT.MM.JJJJ"") & "" in Höhe von € ""&TEXT(SUMIFS(Auszahlungen!C[-20],Auszahlungen!C[-23],""" & strFind & """,Auszahlungen!C[-18],""ausgez" & _ "ahlt""),""#.##0,00""), ""Auszahlungen: "" & COUNTIFS(Auszahlungen!C[-23],""" & strFind & """,Auszahlungen!C[-18],""ausgezahlt"")&"" in Höhe von € ""&TEXT(SUMIFS(Auszahlungen!C[-20],Auszahlungen!C[-23],""" & strFind & """,Auszahlungen!C[-18],""ausgezahlt""),""#.##0,00"")&"""")" & _ ""
Kann mir bitte vielleicht jemand helfen, wie der Code aussehen soll, so dass geschwungene Klammer erzeugt werden? Danke und LG Thomas
Excel Version 2016
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
22.11.2018, 09:49
(Dieser Beitrag wurde zuletzt bearbeitet: 22.11.2018, 09:50 von LCohen.)
.FormulaArray statt .FormulaR1C1
Alternativ kann man in vielen Fällen ein INDEX einschleusen und darauf verzichten.
Registriert seit: 08.02.2017
Version(en): 2016
Hallo! Funktioniert leider nicht, es kommt folgende Fehlermeldung: Laufzeitfehler '1004': Die FormulaArray-Eigenschaft des Range-Objektes kann nicht festgelegt werden. Kannst du mir bitte vielleicht noch einmal weiterhelfen? Anbei der ganze Code von dem Tabellenblatt: Code: Private Sub Worksheet_Change(ByVal Target As Range) 'Wenn etwas geändert wird
If Target.Column = 4 Then If Not IsEmpty(Cells(Target.Row, 1)) Then Sheets("Auszahlungen").Activate x = Range("A65536").End(xlUp).Row Cells(x + 0, 7).Select Exit Sub End If End If If Target.Column = 7 Then 'in Spalte G If ActiveSheet.Cells(Target.Row, 1).Value <> vbNullString Then 'und Spalte A nicht leer ist With ThisWorkbook.Worksheets("Auszahlungen") strFind = ActiveSheet.Cells(Target.Row, 1).Value End With With ThisWorkbook.Worksheets("Top30") Set rngFind = ThisWorkbook.Worksheets("Top30").Columns(2).Find(what:=strFind, lookat:=xlPart) 'suche Wert aus Spalte A in Top30 in Spalte B Set rngFind2 = ThisWorkbook.Worksheets("Top30").Columns(7).Find(what:=strFind, lookat:=xlPart) 'suche Wert aus Spalte A in Top30 in Spalte G Set rngFind3 = ThisWorkbook.Worksheets("Top30").Columns(12).Find(what:=strFind, lookat:=xlPart) 'suche Wert aus Spalte A in Top30 in Spalte L Set rngFind4 = ThisWorkbook.Worksheets("Top30").Columns(17).Find(what:=strFind, lookat:=xlPart) 'suche Wert aus Spalte A in Top30 in Spalte Q Set rngFind8 = ThisWorkbook.Worksheets("Top30").Columns(20).Find(what:=strFind, lookat:=xlPart) 'suche Wert aus Spalte A in Top30 in Spalte T Set rngFind9 = ThisWorkbook.Worksheets("Top30").Columns(22).Find(what:=strFind, lookat:=xlPart) 'suche Wert aus Spalte A in Top30 in Spalte W If Not rngFind Is Nothing Then 'Wenn Wert existiert dann RangnachBeträgeneu = .Cells(rngFind.Row, 1) RangnachmeistenAuszahlungenneu = .Cells(rngFind2.Row, 6) RangnachderHäufigkeitneu = .Cells(rngFind3.Row, 11) RangnachBeträgealt = .Cells(rngFind4.Row, 16) DatumderletztenAuszahlung = .Cells(rngFind4.Row, 18) RangnachmeistenAuszahlungenalt = .Cells(rngFind8.Row, 19) RangnachderHäufigkeitalt = .Cells(rngFind9.Row, 21) ThisWorkbook.Worksheets("Top30").Activate Top30alleanzeigen Top30anzeigen ThisWorkbook.Worksheets("Auszahlungen").Activate With ThisWorkbook.Worksheets("Auszahlungen") .Cells(Target.Row, 8) = Date VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat = Worksheets("Auszahlungen").Range("L5").Value VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst = Worksheets("Jahresstatistik").Range("E2").Value Jahresranking = Worksheets("Jahresstatistik").Range("F2").Value If RangnachBeträgeneu < RangnachBeträgealt And RangnachmeistenAuszahlungenneu >= RangnachmeistenAuszahlungenalt And RangnachderHäufigkeitneu >= RangnachderHäufigkeitalt Then MsgBox "Folgende neue Rangordnung hat sich bei """ & Target.Offset(0, -6).Value & """ seit der letzten Auszahlung vom " & DatumderletztenAuszahlung & " ergeben: " & String(2, vbNewLine) & _ "nach Beträgen: " & RangnachBeträgeneu & " (alt: " & RangnachBeträgealt & ")" & String(2, vbNewLine) & _ "Folgende Rangordnungen haben sich nicht verändert: " & String(2, vbNewLine) & _ "nach meisten Auszahlungen: " & RangnachmeistenAuszahlungenneu & String(1, vbNewLine) & _ "nach der Häufigkeit: " & RangnachderHäufigkeitneu & String(2, vbNewLine) & _ "-------------------------------------------------------------------------" & String(2, vbNewLine) & _ VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat & String(2, vbNewLine) & _ VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst & String(2, vbNewLine) & _ Jahresranking Else If RangnachBeträgeneu >= RangnachBeträgealt And RangnachmeistenAuszahlungenneu < RangnachmeistenAuszahlungenalt And RangnachderHäufigkeitneu >= RangnachderHäufigkeitalt Then VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat = Worksheets("Auszahlungen").Range("L5").Value VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst = Worksheets("Jahresstatistik").Range("E2").Value Jahresranking = Worksheets("Jahresstatistik").Range("F2").Value MsgBox "Folgende neue Rangordnung hat sich bei """ & Target.Offset(0, -6).Value & """ seit der letzten Auszahlung vom " & DatumderletztenAuszahlung & " ergeben: " & String(2, vbNewLine) & _ "nach meisten Auszahlungen: " & RangnachmeistenAuszahlungenneu & " (alt: " & RangnachmeistenAuszahlungenalt & ")" & String(2, vbNewLine) & _ "Folgende Rangordnungen haben sich nicht verändert: " & String(2, vbNewLine) & _ "nach Beträgen: " & RangnachBeträgeneu & String(1, vbNewLine) & _ "nach der Häufigkeit: " & RangnachderHäufigkeitneu & String(2, vbNewLine) & _ "-------------------------------------------------------------------------" & String(2, vbNewLine) & _ VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat & String(2, vbNewLine) & _ VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst & String(2, vbNewLine) & _ Jahresranking Else If RangnachBeträgeneu >= RangnachBeträgealt And RangnachmeistenAuszahlungenneu >= RangnachmeistenAuszahlungenalt And RangnachderHäufigkeitneu < RangnachderHäufigkeitalt Then VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat = Worksheets("Auszahlungen").Range("L5").Value VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst = Worksheets("Jahresstatistik").Range("E2").Value Jahresranking = Worksheets("Jahresstatistik").Range("F2").Value MsgBox "Folgende neue Rangordnung hat sich bei """ & Target.Offset(0, -6).Value & """ seit der letzten Auszahlung vom " & DatumderletztenAuszahlung & " ergeben: " & String(2, vbNewLine) & _ "nach der Häufigkeit: " & RangnachderHäufigkeitneu & " (alt: " & RangnachderHäufigkeitalt & ")" & String(2, vbNewLine) & _ "Folgende Rangordnungen haben sich nicht verändert: " & String(2, vbNewLine) & _ "nach Beträgen: " & RangnachBeträgeneu & String(1, vbNewLine) & _ "nach meisten Auszahlungen: " & RangnachmeistenAuszahlungenneu & String(2, vbNewLine) & _ "-------------------------------------------------------------------------" & String(2, vbNewLine) & _ VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat & String(2, vbNewLine) & _ VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst & String(2, vbNewLine) & _ Jahresranking Else If RangnachBeträgeneu < RangnachBeträgealt And RangnachmeistenAuszahlungenneu < RangnachmeistenAuszahlungenalt And RangnachderHäufigkeitneu < RangnachderHäufigkeitalt Then VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat = Worksheets("Auszahlungen").Range("L5").Value VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst = Worksheets("Jahresstatistik").Range("E2").Value Jahresranking = Worksheets("Jahresstatistik").Range("F2").Value MsgBox "Folgende neue Rangordnungen haben sich bei """ & Target.Offset(0, -6).Value & """ seit der letzten Auszahlung vom " & DatumderletztenAuszahlung & " ergeben: " & String(2, vbNewLine) & _ "nach Beträgen: " & RangnachBeträgeneu & " (alt: " & RangnachBeträgealt & ")" & String(1, vbNewLine) & _ "nach meisten Auszahlungen: " & RangnachmeistenAuszahlungenneu & " (alt: " & RangnachmeistenAuszahlungenalt & ")" & String(1, vbNewLine) & _ "nach der Häufigkeit: " & RangnachderHäufigkeitneu & " (alt: " & RangnachderHäufigkeitalt & ")" & String(1, vbNewLine) & _ "-------------------------------------------------------------------------" & String(2, vbNewLine) & _ VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat & String(2, vbNewLine) & _ VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst & String(2, vbNewLine) & _ Jahresranking
Else If RangnachBeträgeneu >= RangnachBeträgealt And RangnachmeistenAuszahlungenneu >= RangnachmeistenAuszahlungenalt And RangnachderHäufigkeitneu >= RangnachderHäufigkeitalt Then VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat = Worksheets("Auszahlungen").Range("L5").Value VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst = Worksheets("Jahresstatistik").Range("E2").Value Jahresranking = Worksheets("Jahresstatistik").Range("F2").Value MsgBox "Folgende Rangordnungen gibt es bei """ & Target.Offset(0, -6).Value & """:" & String(2, vbNewLine) & _ "nach Beträgen: " & RangnachBeträgeneu & String(1, vbNewLine) & _ "nach meisten Auszahlungen: " & RangnachmeistenAuszahlungenneu & String(1, vbNewLine) & _ "nach der Häufigkeit: " & RangnachderHäufigkeitneu & String(2, vbNewLine) & _ "Seit der letzten Auszahlung vom " & DatumderletztenAuszahlung & " hat sich bei den Rangordnungen nichts verändert." & String(2, vbNewLine) & _ "-------------------------------------------------------------------------" & String(2, vbNewLine) & _ VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat & String(2, vbNewLine) & _ VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst & String(2, vbNewLine) & _ Jahresranking Else If RangnachBeträgeneu < RangnachBeträgealt And RangnachmeistenAuszahlungenneu < RangnachmeistenAuszahlungenalt And RangnachderHäufigkeitneu >= RangnachderHäufigkeitalt Then VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat = Worksheets("Auszahlungen").Range("L5").Value VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst = Worksheets("Jahresstatistik").Range("E2").Value Jahresranking = Worksheets("Jahresstatistik").Range("F2").Value MsgBox "Folgende neue Rangordnungen haben sich bei """ & Target.Offset(0, -6).Value & """ seit der letzten Auszahlung vom " & DatumderletztenAuszahlung & " ergeben: " & String(2, vbNewLine) & _ "nach Beträgen: " & RangnachBeträgeneu & " (alt: " & RangnachBeträgealt & ")" & String(1, vbNewLine) & _ "nach meisten Auszahlungen: " & RangnachmeistenAuszahlungenneu & " (alt: " & RangnachmeistenAuszahlungenalt & ")" & String(2, vbNewLine) & _ "Folgende Rangordnung hat sich nicht verändert: " & String(2, vbNewLine) & _ "nach der Häufigkeit: " & RangnachderHäufigkeitneu & String(2, vbNewLine) & _ "-------------------------------------------------------------------------" & String(2, vbNewLine) & _ VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat & String(2, vbNewLine) & _ VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst & String(2, vbNewLine) & _ Jahresranking Else If RangnachBeträgeneu < RangnachBeträgealt And RangnachmeistenAuszahlungenneu >= RangnachmeistenAuszahlungenalt And RangnachderHäufigkeitneu < RangnachderHäufigkeitalt Then VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat = Worksheets("Auszahlungen").Range("L5").Value VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst = Worksheets("Jahresstatistik").Range("E2").Value Jahresranking = Worksheets("Jahresstatistik").Range("F2").Value MsgBox "Folgende neue Rangordnungen haben sich bei """ & Target.Offset(0, -6).Value & """ seit der letzten Auszahlung vom " & DatumderletztenAuszahlung & " ergeben: " & String(2, vbNewLine) & _ "nach Beträgen: " & RangnachBeträgeneu & " (alt: " & RangnachBeträgealt & ")" & String(1, vbNewLine) & _ "nach der Häufigkeit: " & RangnachderHäufigkeitneu & " (alt: " & RangnachderHäufigkeitalt & ")" & String(2, vbNewLine) & _ "Folgende Rangordnung hat sich nicht verändert: " & String(2, vbNewLine) & _ "nach meisten Auszahlungen: " & RangnachmeistenAuszahlungenneu & String(2, vbNewLine) & _ "-------------------------------------------------------------------------" & String(2, vbNewLine) & _ VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat & String(2, vbNewLine) & _ VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst & String(2, vbNewLine) & _ Jahresranking Else If RangnachBeträgeneu >= RangnachBeträgealt And RangnachmeistenAuszahlungenneu < RangnachmeistenAuszahlungenalt And RangnachderHäufigkeitneu < RangnachderHäufigkeitalt Then VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat = Worksheets("Auszahlungen").Range("L5").Value VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst = Worksheets("Jahresstatistik").Range("E2").Value Jahresranking = Worksheets("Jahresstatistik").Range("F2").Value MsgBox "Folgende neue Rangordnungen haben sich bei """ & Target.Offset(0, -6).Value & """ seit der letzten Auszahlung vom " & DatumderletztenAuszahlung & " ergeben: " & String(2, vbNewLine) & _ "nach meisten Auszahlungen: " & RangnachmeistenAuszahlungenneu & " (alt: " & RangnachmeistenAuszahlungenalt & ")" & String(1, vbNewLine) & _ "nach der Häufigkeit: " & RangnachderHäufigkeitneu & " (alt: " & RangnachderHäufigkeitalt & ")" & String(2, vbNewLine) & _ "Folgende Rangordnung hat sich nicht verändert: " & String(2, vbNewLine) & _ "nach Beträgen: " & RangnachBeträgeneu & String(2, vbNewLine) & _ "-------------------------------------------------------------------------" & String(2, vbNewLine) & _ VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat & String(2, vbNewLine) & _ VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst & String(2, vbNewLine) & _ Jahresranking
End If End If End If End If End If End If End If End If End With With ThisWorkbook.Worksheets("Top30") .Cells(rngFind4.Row, 18).FormulaR1C1 = Date Top30aktualisieren End With Else 'sonst
With ThisWorkbook.Worksheets("Top30") q = .Cells(6, 1).CurrentRegion.Rows.Count + 6 .Cells(q, 1).FormulaR1C1 = "=RANK(RC[2],C[2])" .Cells(q, 2).FormulaR1C1 = "=""" & strFind & " (""&COUNTIFS(Auszahlungen!C[-1],""" & strFind & """,Auszahlungen!C[4],""ausgezahlt"")& ""x)""" .Cells(q, 3).FormulaR1C1 = "=SUMIFS(Auszahlungen!C[1],Auszahlungen!C[-2],""" & strFind & """,Auszahlungen!C[3],""ausgezahlt"")" .Cells(q, 4).FormulaR1C1 = "=IF(ISERROR(VLOOKUP(IFERROR(LEFT(RC[-2],SEARCH("" "",RC[-2],1) -1),RC[-2]),Panels!C[-2],1,0)),""nicht aktiv"",""aktiv"")" .Cells(q, 6).FormulaR1C1 = "=RANK(RC[2],C[2])" .Cells(q, 7).FormulaR1C1 = "=""" & strFind & " (€ ""&TEXT(SUMIFS(Auszahlungen!C[-3],Auszahlungen!C[-6],""" & strFind & """,Auszahlungen!C[-1],""ausgezahlt""),""#.##0,00"") & "")""" .Cells(q, 8).FormulaR1C1 = "=COUNTIFS(Auszahlungen!C[-7],""" & strFind & """,Auszahlungen!C[-2],""ausgezahlt"")" .Cells(q, 9).FormulaR1C1 = "=IF(ISERROR(VLOOKUP(IFERROR(LEFT(RC[-2],SEARCH("" "",RC[-2],1) -1),RC[-2]),Panels!C[-7],1,0)),""nicht aktiv"",""aktiv"")" .Cells(q, 11).FormulaR1C1 = "=RANK(RC[2],C[2],1)" .Cells(q, 12).FormulaR1C1 = "=""" & strFind & " (€ ""&TEXT(SUMIFS(Auszahlungen!C[-8],Auszahlungen!C[-11],""" & strFind & """,Auszahlungen!C[-6],""ausgezahlt""),""#.##0,00"") & "")""" .Cells(q, 23).FormulaR1C1 = "=IF(ISERROR(TEXT(INDEX(Panels!C[-22]:C[-15],MATCH(""" & strFind & """,Panels!C[-21],0),8),""TT.MM.JJJ"")),""Status: nicht aktiv"",""Status: aktiv seit "" & (TEXT(INDEX(Panels!C[-22]:C[-15],MATCH(""" & strFind & """,Panels!C[-21],0),8),""TT.MM.JJJ"")))" .Cells(q, 24).FormulaArray = "=IF(COUNTIFS(Auszahlungen!C[-23],""" & strFind & """,Auszahlungen!C[-18],""ausgezahlt"")=1,""Auszahlung: "" & COUNTIFS(Auszahlungen!C[-23],""" & strFind & """,Auszahlungen!C[-18],""ausgezahlt"") & "" am "" & TEXT(MAX(IF(Auszahlungen!C[-23]=""" & strFind & """,Auszahlungen!C[-16])),""TT.MM.JJJJ"") & "" in Höhe von € ""&TEXT(SUMIFS(Auszahlungen!C[-20],Auszahlungen!C[-23],""" & strFind & """,Auszahlungen!C[-18],""ausgez" & _ "ahlt""),""#.##0,00""), ""Auszahlungen: "" & COUNTIFS(Auszahlungen!C[-23],""" & strFind & """,Auszahlungen!C[-18],""ausgezahlt"")&"" in Höhe von € ""&TEXT(SUMIFS(Auszahlungen!C[-20],Auszahlungen!C[-23],""" & strFind & """,Auszahlungen!C[-18],""ausgezahlt""),""#.##0,00"")&"""")" & _ "" .Cells(q, 27).FormulaR1C1 = "=COUNTIFS(Auszahlungen!C[-26],""" & strFind & """,Auszahlungen!C[-21],""ausgezahlt"")" Dim strgS As String Dim rngF As Range
With ThisWorkbook.Worksheets("Auszahlungen") strgS = ActiveSheet.Cells(Target.Row, 1).Value 'Wert aus Spalte A der Tabelle Anweisung End With
With ThisWorkbook.Worksheets("Panels") Set rngF = .Columns(2).Find(strgS, lookat:=xlPart) If Not rngF Is Nothing Then DaDate = .Cells(rngF.Row, 8) End If End With
'Formel wird in die erste freie Zelle der Spalte m in Top30 geschrieben With ThisWorkbook.Worksheets("Top30") .Cells(.Cells(.Rows.Count, 13).End(xlUp).Row + 1, 13).Formula = "=DATEDIF(DateValue(""" & DateValue(DaDate) & """),TODAY()," & """M""" & ")/(COUNTIFS(Auszahlungen!A:A,""" & strFind & """,Auszahlungen!F:F," & """ausgezahlt""" & "))" End With .Cells(q, 14).FormulaR1C1 = "=IF(ISERROR(VLOOKUP(IFERROR(LEFT(RC[-2],SEARCH("" "",RC[-2],1) -1),RC[-2]),Panels!C[-12],1,0)),""nicht aktiv"",""aktiv"")" With ThisWorkbook.Worksheets("Top30") Set rngFind5 = ThisWorkbook.Worksheets("Top30").Columns(2).Find(what:=strFind, lookat:=xlPart) 'suche Wert aus Spalte A in Top30 in Spalte B Set rngFind6 = ThisWorkbook.Worksheets("Top30").Columns(7).Find(what:=strFind, lookat:=xlPart) 'suche Wert aus Spalte A in Top30 in Spalte G Set rngFind7 = ThisWorkbook.Worksheets("Top30").Columns(12).Find(what:=strFind, lookat:=xlPart) 'suche Wert aus Spalte A in Top30 in Spalte L If Not rngFind5 Is Nothing Then RangnachBeträgen = .Cells(rngFind5.Row, 1) RangnachmeistenAuszahlungen = .Cells(rngFind6.Row, 6) RangnachderHäufigkeit = .Cells(rngFind7.Row, 11) End If End With .Cells(q, 16).FormulaR1C1 = RangnachBeträgen .Cells(q, 17).FormulaR1C1 = strFind .Cells(q, 18).FormulaR1C1 = Date .Cells(q, 19).FormulaR1C1 = RangnachmeistenAuszahlungen .Cells(q, 20).FormulaR1C1 = strFind .Cells(q, 21).FormulaR1C1 = RangnachderHäufigkeit .Cells(q, 22).FormulaR1C1 = strFind ThisWorkbook.Worksheets("Top30").Activate Top30alleanzeigen Top30anzeigen ThisWorkbook.Worksheets("Auszahlungen").Activate With ThisWorkbook.Worksheets("Auszahlungen") .Cells(Target.Row, 8) = Date VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat = Worksheets("Auszahlungen").Range("L5").Value VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst = Worksheets("Jahresstatistik").Range("E2").Value Jahresranking = Worksheets("Jahresstatistik").Range("F2").Value MsgBox "Folgende Rangordnung gibt es bei """ & Target.Offset(0, -6).Value & """:" & String(2, vbNewLine) & _ "nach Beträgen: " & RangnachBeträgen & String(1, vbNewLine) & _ "nach meisten Auszahlungen: " & RangnachmeistenAuszahlungen & String(1, vbNewLine) & _ "nach der Häufigkeit: " & RangnachderHäufigkeit & String(2, vbNewLine) & _ "Es sind noch keine alten Werte bezüglich Vergleiche vorhanden." & String(2, vbNewLine) & _ "-------------------------------------------------------------------------" & String(2, vbNewLine) & _ VergleichaktuellerAuszahlungsmonatmithöchestemAuszahlungsmonat & String(2, vbNewLine) & _ VergleichaktuellerGesamtverdienstmitbestemGesamtVerdienst & String(2, vbNewLine) & _ Jahresranking End With End With End If End With With ThisWorkbook.Worksheets("Auszahlungen") If .Range("K8").Value > .Range("I1").Value Then MsgBox "Gratuliere, du hast soeben die höchste Auszahlung in Höhe von € " & Format(.Range("K8").Value, "#,##0.00") & " erhalten, welche dir von """ & .Range("L7").Value & """ heute ausbezahlt wurde. Dieser Betrag ist um € " & Format((.Range("K8").Value - .Range("I1").Value), "#,##0.00") & " höher, welcher dir von """ & .Range("L8").Value & """ am " & .Range("I2") & " ausbezahlt wurde." .Range("I1").Value = .Range("K8").Value .Range("L8").Value = .Range("L7").Value .Range("I2").Value = .Range("L6").Value End If If .Range("K7").Value > .Range("I3").Value Then MsgBox "Der durchschnittliche Auszahlungsbetrag hat sich soeben von € " & Format(.Range("I3").Value, "#,##0.00") & " auf " & String(1, vbNewLine) & _ "€ " & Format(.Range("K7"), "#,##0.00") & " erhöht. Das entspricht um € " & Format((.Range("K7").Value - .Range("I3").Value), "#,##0.00") & " mehr seit der letzten Auszahlung." .Range("I3").Value = .Range("K7").Value End If If .Range("K6").Value < .Range("I4").Value Then MsgBox "Die durchschnittliche Dauer zwischen Beantragung und Auszahlung hat sich von " & .Range("I4").Value & " Tage auf " & .Range("K6").Value & " Tage verringert." .Range("I4").Value = .Range("K6").Value End If If .Range("K5").Value > .Range("I5").Value Then MsgBox "Die durchschnittliche Anzahl an Auszahlungen pro Monat hat sich von " & .Range("I5").Value & " auf " & .Range("K5").Value & " erhöht." .Range("I5").Value = .Range("K5").Value End If End With End If End If
End Sub
Excel Version 2016
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Moin! Ich werde den Code nicht analysieren. Entscheidend ist doch eher, dass Du die Fehlerquelle eingrenzen musst! Ein kurzer Blick in die VBA-Hilfe zu .FormulaArray [klick] ergibt, dass die Formel maximal 255 Zeichen haben darf, was bei Dir weit überschritten wird. Obiges hilft Dir jetzt zwar auch nicht weiter, aber: Kannst Du Zwischenrechnungen in Hilfsspalten auslagern? Bietet sich nicht eher ein Tabellenobjekt ("intelligente" Tabelle, Strg+t) an? Dann brauchst Du Dich nicht um die Fortschreibung der Formeln zu kümmern! Oder Du "ziehst" die Formel mittels VBA.Range.Autofill 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)
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
22.11.2018, 10:32
(Dieser Beitrag wurde zuletzt bearbeitet: 22.11.2018, 10:32 von LCohen.)
Das finde ich jetzt aus folgendem Grunde unfair: In Deinem OP hättest Du mitteilen müssen, dass auch die .FormulaR1C1-Syntax so nicht funktioniert. Täte sie es, ginge auch mein Vorschlag.
Das hast Du nicht getan. Du suggerierst, dass Dir nur noch die {} fehlen, sonst aber die Formel gültig ist.
Ich habe aber nicht geantwortet, weil ich mich inhaltlich mit Deiner Formel auseinandersetzen wollte, was ich nun müsste.
EDIT: Ich ziehe den roten Teil zurück aufgrund der Korrektur durch RPP63. Hilfe: Auslagern in benannte Formelteile. Die aber wiederum machen das Array dann evtl. von vornherein überflüssig.
|