Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Arrayformel per VBA in Zelle setzen

Arrayformel per VBA in Zelle setzen
28.04.2009 16:21:18
UweD
Hallo
per VBA schreibe ich einige Formeln in ein Tabellenblatt.
Ich verwende die .FormulaR1C1 Methode, da ich dann einen ganzen Bereich direkt setzen kann.
so mache ich das bei "Normalen" Formeln


    LR = TB2.Cells(Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
    TB2.Range("C2:F" & LR).FormulaR1C1 = _
        "=IF(COUNTIF('Rückstand Bandbelegung'!C1,Auswertung!RC1)=0,"""",COUNTIFS('Rückstand Bandbelegung'!C1,Auswertung!RC1,'Rückstand Bandbelegung'!C3,""=""&R1C))"
    TB2.Range("B2:B" & LR).FormulaArray = _


Sieht dann so aus:
 
 C
590
Formeln der Tabelle
C59 : =WENN(ZÄHLENWENN('Rückstand Bandbelegung'!$A:$A;Auswertung!$A59)=0;"";ZÄHLENWENNS('Rückstand Bandbelegung'!$A:$A;Auswertung!$A59;'Rückstand Bandbelegung'!$C:$C;"="&C$1))
 

Bei Arrayformeln mach ich es so: (mit Recorder aufgenommen und nachbearbeitet)


    LR = TB2.Cells(Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
    TB2.Range("B2:B" & LR).FormulaArray = _
        "=SUM(('Rückstand Bandbelegung'!C1=Auswertung!RC1)*('Rückstand Bandbelegung'!C7<>""""))"
    TB2.Range("C2:F" & LR).FormulaR1C1 = _


dann kommt das raus:
 
 AB
5914.04.20090
Formeln der Tabelle
B59 : {=SUMME(('Rückstand Bandbelegung'!C1=Auswertung!RC1)*('Rückstand Bandbelegung'!C7<>""))}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
 

soll aber so sein:
 
 AB
5914.04.20090
Formeln der Tabelle
B59 : {=SUMME(('Rückstand Bandbelegung'!$A:$A=Auswertung!$A59)*('Rückstand Bandbelegung'!$G:$G<>""))}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
 

Wer kann mir helfen?
Grauß UweD
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arrayformel per VBA in Zelle setzen
28.04.2009 16:44:39
Tino
Hallo,
bei mir spuckt der Rekorder diese Zeile aus.

"=SUM(('Rückstand Bandbelegung'!C1=Auswertung!R[58]C1)*('Rückstand Bandbelegung'!C7""""))"


Gruß Tino

versuche es mal mit dieser
28.04.2009 16:55:00
Tino
Hallo,

"=SUM(('Rückstand Bandbelegung'!C1=Auswertung!R[0]C1)*('Rückstand Bandbelegung'!C7""""))"


Hruß Tino

Anzeige
AW: Arrayformel per VBA in Zelle setzen
28.04.2009 19:53:13
Uduuh
Hallo,
soviel ich weiß, kannst du FormulaArrays nicht in einem Rutsch schreiben. Das musst du per Schleife machen.
Gruß aus’m Pott
Udo

AW: bei mir funktioniert das eigentlich
28.04.2009 22:22:33
Daniel
wenn ich deinen Code bei mir in ein Makro einfüge, dann kommt eigentlich das von dir gewünschte Ergebnis raus. Passt eigentlich soweit.
Ansonsten probiermal die Formel in der A1-Schreibweise einzusetzen.
du kannst die Formeln eigentlich schon im Zellblock einfügen, bei der A1-Schreibweise muss man halt darauf achten, daß die Formel für die erste Zelle des Blocks geschrieben ist.
ansonsten lad mal deine Datei mit dem Fehler hoch, Ursachen kanns vielen geben.
Gruß, Daniel
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Arrayformel per VBA in Zelle setzen


Schritt-für-Schritt-Anleitung

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Modul einfügen: Klicke mit der rechten Maustaste auf ein Projekt, wähle Einfügen und dann Modul.

  3. Code eingeben: Füge den folgenden Code ein, um eine Arrayformel in eine Zelle zu setzen:

    Sub SetArrayFormula()
       Dim LR As Long
       Dim TB2 As Worksheet
       Set TB2 = ThisWorkbook.Sheets("DeinTabellenblatt") ' Passe den Blattnamen an
    
       LR = TB2.Cells(Rows.Count, "B").End(xlUp).Row ' letzte Zeile der Spalte B
       TB2.Range("B2:B" & LR).FormulaArray = "=SUM(('Rückstand Bandbelegung'!C1=Auswertung!RC1)*('Rückstand Bandbelegung'!C7<>""""))"
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus, um die Arrayformel in den gewünschten Bereich zu setzen.


Häufige Fehler und Lösungen

  • Fehler: „Anwendungsfehler“

    • Lösung: Stelle sicher, dass der Bereich, in den Du die Arrayformel einfügst, korrekt definiert ist und nicht bereits Werte enthält.
  • Fehler: Ungültige Formel

    • Lösung: Überprüfe die Syntax Deiner Formel. Achte darauf, dass Du die Formeln korrekt in der R1C1-Notation schreibst.
  • Formel wird nicht als Array erkannt

    • Lösung: Stelle sicher, dass Du die Formel mit FormulaArray und nicht mit Formula setzt.

Alternative Methoden

  1. Manuelles Einfügen: Du kannst die Arrayformel direkt in die Zelle eingeben und sie dann mit STRG + SHIFT + RETURN abschließen.
  2. Benutzung von Schleifen: Wenn Du mehrere Zellen mit Arrayformeln füllen möchtest, kannst Du eine Schleife verwenden, um die Formeln nacheinander zu setzen.

    For i = 2 To LR
       TB2.Cells(i, 2).FormulaArray = "=SUM(('Rückstand Bandbelegung'!C1=Auswertung!R" & i & "C1)*('Rückstand Bandbelegung'!C7<>""""))"
    Next i

Praktische Beispiele

  • Beispiel 1: Setzen einer einfachen Arrayformel in den Bereich B2:B10:

    TB2.Range("B2:B10").FormulaArray = "=SUM(('Rückstand Bandbelegung'!$A:$A=Auswertung!$A2)*('Rückstand Bandbelegung'!$C:$C<>""""))"
  • Beispiel 2: Verwendung der R1C1-Notation für die gleiche Formel:

    TB2.Range("B2:B10").FormulaR1C1 = "=SUM((Rückstand Bandbelegung!R1C1=Auswertung!RC1)*(Rückstand Bandbelegung!R7C<>""""))"

Tipps für Profis

  • Verwende die .FormulaR1C1 Methode: Diese Methode ist besonders nützlich, wenn Du mit großen Datenmengen arbeitest, da sie die Eingabe von Formeln in einem Schritt ermöglicht.
  • Fehlerbehandlung: Integriere Fehlerbehandlung in Dein Makro, um mögliche Probleme beim Setzen der Formeln zu identifizieren und zu beheben.

    On Error Resume Next
    ' Deine Formel hier
    On Error GoTo 0

FAQ: Häufige Fragen

1. Kann ich Arrayformeln in mehreren Zellen gleichzeitig setzen? Ja, das ist möglich. Stelle sicher, dass der Zielbereich korrekt definiert ist und verwende die FormulaArray-Methode.

2. Was ist der Unterschied zwischen Formula und FormulaArray? Formula wird für normale Formeln verwendet, während FormulaArray speziell für Arrayformeln gedacht ist. Achte darauf, die richtige Methode zu wählen, um Fehler zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige