Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[Excel 365] programmatisches Ansprechen dynamischer Formeln
#1
In der Aboversion gibt es seit längerem dynamische Formeln, die in einen Bereich "überlaufen".
Dazu gehören:
  • SORTIEREN()
  • SORTIERENNACH()
  • FILTER()
  • EINDEUTIG()
  • SEQUENZ()
  • ZUFALLSMATRIX()
Mal ein Beispiel in A1:
=ZUFALLSMATRIX(5;3;10;20;1)
liefert eine Matrix aus 5 Zeilen und 3 Spalten mit Ganzzahlen zwischen 10 und 20
ABCD
1101812
2171619
3111712
4141816
5111514
6

ZelleFormel
A1=ZUFALLSMATRIX(5;3;10;20;1)

Will man auf der Excel-Oberfläche diesen Bereich gegen die Werte austauschen, passiert folgendes:
  • markiere ich eine beliebige Zelle (außer A1) kopiere und füge die Werte ein, passiert … NICHTS (außer einer Neuberechnung)!
  • markiere ich die einzige Formelzelle A1, kopiere und füge den Wert ein, erhalte ich den Fehler #ÜBERLAUF!
  • ich muss also erst den dynamischen Bereich markieren, dann kopieren und Werte einfügen, damit es funktioniert!
In VBA gibt es neue Methoden und Funktionen, damit man dies behandeln kann:
  • wenn man die Formelzelle kennt, liefert Range("A1#") den dynamischen Bereich.
  • ob sich eine Zelle im dynamischen Bereich befindet, überprüft man mit Range("B2").HasSpill (liefert true, wenn innerhalb von A1:C5)
  • von einer beliebigen Zelle im dynamischen Bereich gelangt man mit Range("B2").SpillParent zur Formelzelle A1
  • von der Formelzelle markiert man mittels Range("A1").SpillingToRange den überlaufenden Bereich
Wenn ich jetzt also mittels VBA die Formel gegen den Wert austauschen will, ginge folgendes:
  • Die Formelzelle A1 ist bekannt:
  • Sub Formula2Value1()
    Range("A1#").Value = Range("A1#").Value
    End Sub
  • Ich weiß nicht, ob ich mich im Überlauf befinde:
  • Sub Formula2Value2()
    If ActiveCell.HasSpill Then
      With ActiveCell.SpillParent.SpillingToRange
        .Value = .Value
      End With
    End If
    End Sub
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)
[-] Folgende(r) 2 Nutzer sagen Danke an RPP63 für diesen Beitrag:
  • maninweb, schauan
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste