HERBERS Excel-Forum - das Archiv

Thema: Excel 2021 ergänzt @ wo ich ihn nicht brauchen kann

Excel 2021 ergänzt @ wo ich ihn nicht brauchen kann
guennih
Hallo Excel-Gemeinde,
Ich stelle ein Excel - Formular/verfahren bereit, und schreibe per VBA auch Formeln und Matrix-Formeln in die Zellen.
Die Firma stellt bald auf Office 2021 um, und ich habe festgestellt, dass bei der Eingabe von Matrix-Formeln an einigen Stellen @-Zeichen eingefügt werden.
das passiert beim Schreiben der Array-Formel über den Tastaturpuffer, weil sie für die FormulaArray-Zuweisung zu lang ist (zumindest einschließlich Version 2016).
Kann man diese Ergänzung der Formel per VBA ausschalten? und wenn ja wie?
Dankeim Voraus
AW: Excel 2021 ergänzt @ wo ich ihn nicht brauchen kann
daniel
Hi

die FormulaArray-Funktionalität ist mit Excel 2021 eigentlich für die meisten Fälle überflüssig geworden, weil Excel jetzt die automatische Erkennung von Matrixformeln implementiert hat. Allerdings müssen Formeln, die die neue SPILL-Funktionalität nutzen, mit .Formula2 in die Zellen geschrieben werden.

hast du mal ein konkretes Beispiel?

Gruß Daniel
AW: Excel 2021 ergänzt @ wo ich ihn nicht brauchen kann
guentherh
Hier das Beispiel
code:
    FormulaTxt = "=SUM(R[" & Zeilenversatz & "]C" & M_Sp_Sta & ":R[" & Zeilenversatz & "]C" & M_Sp_End & "*((((COLUMN(R" & P_JhZ & "C)-COLUMN(R" & P_JhZ & "C" & M_Sp_Sta & ":R" & P_JhZ & "C" & M_Sp_End & "))>=0)*((COLUMN(R2C)-COLUMN(R" & P_JhZ & "C" & M_Sp_Sta & ":R" & P_JhZ & "C" & M_Sp_End & "))RC7)*(((COLUMN(R2C)-COLUMN(R" & P_JhZ & "C" & M_Sp_Sta & ":R" & P_JhZ & "C" & M_Sp_End & "))=(R[" & Zeilenversatz & "]C7-1))*(R[" & Zeilenversatz & "]C8-R[" & Zeilenversatz & "]C7)))/R[" & Zeilenversatz & "]C8"

FormulaTxt = FormulaTxt & ",(((COLUMN(RC)-COLUMN(RC" & PStrtColOfs + P_JhrToMon_Cols & "))<=RC12)+(((COLUMN(RC)-COLUMN(RC" & PStrtColOfs + P_JhrToMon_Cols & "))=RC12)*(RC13-RC12)))*RC11"
FormulaTxt = FormulaTxt & ")"


FormulaTxt = "=SUM(R[" & Zeilenversatz & "]C" & M_Sp_Sta & ":R[" & Zeilenversatz & "]C" & M_Sp_End & "*((((COLUMN(R" & P_JhZ & "C)-COLUMN(R" & P_JhZ & "C" & M_Sp_Sta & ":R" & P_JhZ & "C" & M_Sp_End & "))>=0)*((COLUMN(R2C)-COLUMN(R" & P_JhZ & "C" & M_Sp_Sta & ":R" & P_JhZ & "C" & M_Sp_End & "))RC7)*(((COLUMN(R2C)-COLUMN(R" & P_JhZ & "C" & M_Sp_Sta & ":R" & P_JhZ & "C" & M_Sp_End & "))=(R[" & Zeilenversatz & "]C7-1))*(R[" & Zeilenversatz & "]C8-R[" & Zeilenversatz & "]C7)))/R[" & Zeilenversatz & "]C8"
FormulaTxt = FormulaTxt & ",(((COLUMN(RC)-COLUMN(RC" & PStrtColOfs + P_JhrToMon_Cols & "))<=MIN(RC12,RC13))+((RC12 FormulaTxt = FormulaTxt & ")"

Debug.Print "Prs_AFAFormeln_einfügen: Formellänge= " & Len(FormulaTxt)
Debug.Print FormulaTxt
Application.ScreenUpdating = True
Cells(StrtZei, M_Sp_Sta).Select
Selection.FormulaR1C1 = FormulaTxt
Cells(StrtZei, M_Sp_Sta).Application.ActiveWindow.Activate
DoEvents
Cells(StrtZei, M_Sp_Sta).Select
ActiveSheet.Application.SendKeys "{F2}+^{Enter}", True
DoEvents


das ergibt die Array-Formel
=SUM($X51:$DC51*((((COLUMN(X$11)-COLUMN($X$11:$DC$11))>=0)*((COLUMN(X$2)-COLUMN($X$11:$DC$11))$G58)*(((COLUMN(X$2)-COLUMN($X$11:$DC$11))=($G51-1))*($H51-$G51)))/$H51,(((COLUMN(X58)-COLUMN($W58))<=MIN($L58,$M58))+(($L58<$M58)*((COLUMN(X58)-COLUMN($W58))=$L58)*($M58-$L58)))*$K58)


Da diese Formel für die Zuweisung
Formulaarray = ..." 
zu lange ist, wird sie über die Sendkeys - Anweisung von einer Formel in eine Array-Formel umgewandelt.
Hierbei werden an drei Stellen "@" - Zeichen hinzugefügt, was zu falschen Ergebnissen führt.
wenn ich dann die "@" per Hand rauslösche passen die Ergebnisse wieder.
Kann ich das Einfügen der "@" Zeichen verhindern?

Die Makros müssen auch auf dem alten EXCEL 2016 weiterlaufen, da die User über einen längeren Zeitraum umgestellt werden.

Die zwei Links habe ich mir angeschaut, dort wird noch nicht mal auf Range.FormulaArray eingegangen, hab dann gefunden, dass Formula2 der neue Name für FormulaArray ist.
das würde bedeuten, dass ich in jedem Fall zwei verschiedene Code-Teile brauche, je nachdem um welche Version es geht.

Erlaubt denn dann Formula2 längere Strings als FormulaArray in Excel2016?

viele Grüße,
Günther
AW: Excel 2021 ergänzt @ wo ich ihn nicht brauchen kann
daniel
Hi
irgendwie funktionieren die Codes bei mir nicht, da sind noch Fehler drin.
aber egal.

Formula2 schreibt bei mir Formeln bis maximal 8192 Zeichen.

wenn der Code auch in 2016 laufen, musst du abfragen welche Version vorliegt (Application.Version) und dann dort den entsprechenden Code verwenden.

Gruß Daniel
AW: Excel 2021 ergänzt @ wo ich ihn nicht brauchen kann
guennih
Danke, nicht nett, aber machbar