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

Forumthread: Formel per VBA einfügen

Formel per VBA einfügen
20.11.2013 11:57:26
Daniel
Hallo zusammen,
ich habe eine Datei, die automatisch verschiedene Makros ausführt sobald ein neues Tabellenblatt erstellt wird.
Die Datensätze variieren von Blatt zu Blatt.
Nun möchte ich, dass das Makro in Zelle H6 die Formel "Teilergebnis(9;H7:H?)" einfügt.
Wobei H? davon abhängig ist, wie viele Zeilen mit Daten gefüllt sind.
Hat jemand eine Lösung parat?
Vielen Dank schon mal!

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formel per VBA einfügen
20.11.2013 12:30:37
Rudi
Hallo,
cells(6,8).formulalocal="=teilergebnis(9;h7:h" &cells(rows.count,8).end(xlup).row &")"
Gruß
Rudi

AW: Formel per VBA einfügen
20.11.2013 12:36:16
Daniel
Ein Traum! Vielen Dank und noch einen schönen Tag :)

@Rudi, ich Springe mal mit auf den fahrenden Zug..
21.11.2013 00:50:57
Thorben
Hallo Rudi,
Hallo Daniel,
das ist ja mal ne klasse Sache.
Rudi, kannst Du mir vielleicht zeigen wie ich das auf folgende Formeln anwenden kann und wie bzw. wo es eingebaut werden muss:
=SUMME(N(HÄUFIGKEIT(ZEILE(1:9852);TEILERGEBNIS(3;INDIREKT("V"&ZEILE(1:9852)))*VERGLEICH(E1:E9852&""; E1:E9852&"";))>0)) -2
-E9852 soll durch rows.count / xlup genau ermittelt werden
-ZEILE($1:$9852 wenn möglich auch!?
=SUMMENPRODUKT((G4:G9852>=100000)*(G4:G9852<=350000))+SUMMENPRODUKT((H4:H9852>=100000) *(H4:H9852<=350000)) &" - Projekte"
-G9852 & H9852 soll durch rows.count / xlup genau ermittelt werden
MATRIXFORMEL:
{=SUMMENPRODUKT((LINKS($G$1:$G$9852;3)="DDT")*(VERGLEICH($E$1:$E$9852&LINKS($G$1:$G$9852;3); $E$1:$E$9852&LINKS($G$1:$G$9852;3);0)=ZEILE($1:$9852));TEILERGEBNIS(103;INDIREKT("V"&ZEILE($1:$9852) ))) }
-G9852 & E9852 soll durch rows.count / xlup genau ermittelt werden
-ZEILE($1:$9852 wenn möglich auch!?
Für Deine Hilfe schon einmal vielen Dank.
MfG
Thorben

Anzeige
AW: @Rudi, ich Springe mal mit auf den fahrenden Zug..
21.11.2013 09:17:57
Luschi
Hallo Thorben,
für die 1. Forbel geht das so:

Sub FormelSchreiben()
Dim ws As Worksheet, _
n As Long, s As String
'Arbeitstabelle
Set ws = ActiveSheet
'letzte beschriebene Zeile in Spalte 'E'
n = ws.Cells(ws.Rows.Count, "E").End(xlUp).Row
'Formel als String zusammensetzen
'Chr(34) & Chr(34) entspricht "" in der Formel
s = "=SUMME(N(HÄUFIGKEIT(ZEILE(1:" & n & ");TEILERGEBNIS(3;INDIREKT(""V""&ZEILE(1:" & n & _
")))*VERGLEICH(E1:E" & n & "&" & Chr(34) & Chr(34) & "; E1:E" & n & "&" & Chr(34) & _
Chr(34) & ";))>0)) -2"
'Formel schreiben in Zelle 'K1'
ws.Range("K1").FormulaLocal = s
'Objektvariable zerstören
Set ws = Nothing
End Sub
Gruß von Luschi
aus klein-Paris

Anzeige
s As String als MtrxFormel in Zelle!Bitte um Hilfe
22.11.2013 00:27:02
Thorben
Hallo Luschi,
vielen Dank für Deine Hilfe.
Jetzt weiß ich wie und auf welche weise ich die Formeln anpassen kann.
Was ich jetzt aber nicht verstehe ist, wie extrahiere ich einen String wieder als String und schreibe ihn als MtrxFormel in eine Zelle.
Ich denke das Problem ist hier dass die Formel als String zusammengesetzt wird und nun nicht mehr als Mtrx Formel für "FormulaArray" deklariert werden kann. Jedenfalls klappt es nicht und ich finde im www nichts derartiges für VBA, nur in Foren für C#, MATLAB, JAVA o.Ä. gibt es derartige Fragen wie "String als String bzw StringArray übergeben"
Vieleicht geht das irgendwie mit ActiveCell.Address(ReferenceStyle:=xlA1)
Möglicherweise bin ich aber auf dem Holzweg und die Lösung ist simpel!
Mag hier mal einer von Euch helfen.
Vielen Dank
MfG
Thorben

Anzeige
AW: s As String als MtrxFormel in Zelle!Bitte um Hilfe
22.11.2013 12:44:47
Luschi
Hallo Thorben,
hier die FormulaArray-Variante:

Sub ArrayFormelSchreiben()
Dim ws As Worksheet, _
n As Long, s As String
'Arbeitstabelle
Set ws = ActiveSheet
'letzte beschriebene Zeile in Spalte 'E'
n = ws.Cells(ws.Rows.Count, "E").End(xlUp).Row
'Formel als String zusammensetzen
'Chr(34) & Chr(34) entspricht "" in der Formel
s = "=SUMPRODUCT((LEFT($G$1:$G" & n & ",3)=""DDT"")*(MATCH($E$1:$E$" & n & _
"&LEFT($G$1:$G$" & n & ",3), $E$1:$E$" & n & _
"&LEFT($G$1:$G$" & n & ",3),0)=ROW($1:$" & n & _
")),SUBTOTAL(103,INDIRECT(""V""&ROW($1:$" & n & "))))"
'Formel als Array schreiben in Zelle 'K2'
'bei FormulaArray gibt es keine länderspezifische Local-Variante,
'deshalb die amerikanischen Funktionsnamen
ws.Range("K2").FormulaArray = s
'Objektvariable zerstören
Set ws = Nothing
End Sub
Gruß von Luschi
aus klein-Paris

Anzeige
dieses Ding Mensch sitzt immer 40cm vor dem TFT..
22.11.2013 19:41:19
Thorben
danke Luschi,
manchmal könnt ich heulen vor Blindheit...
Gruß aus Bremen
Thorben
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Formel per VBA einfügen in Excel


Schritt-für-Schritt-Anleitung

Um eine Formel per VBA in Excel einzufügen, kannst Du folgende Schritte befolgen:

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

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".

  3. Füge den VBA-Code ein: Verwende den folgenden Code, um eine Formel in eine bestimmte Zelle einzufügen. Zum Beispiel, um in Zelle H6 die Formel Teilergebnis(9;H7:H?) einzufügen:

    Sub FormelEinfügen()
       Cells(6, 8).FormulaLocal = "=TEILERGEBNIS(9;H7:H" & Cells(Rows.Count, 8).End(xlUp).Row & ")"
    End Sub
  4. Führe das Makro aus: Drücke F5 oder gehe zu "Run" > "Run Sub/UserForm", um das Makro auszuführen.


Häufige Fehler und Lösungen

  • Fehler: Formel wird nicht korrekt eingefügt
    Lösung: Stelle sicher, dass Du die richtige Syntax verwendest. Überprüfe, ob die richtige Zellreferenz angegeben ist.

  • Fehler: Makro funktioniert nicht
    Lösung: Stelle sicher, dass die Makros in Deiner Excel-Datei aktiviert sind. Gehe zu "Datei" > "Optionen" > "Trust Center" > "Einstellungen für das Trust Center" > "Makroeinstellungen".


Alternative Methoden

Wenn Du eine Formel in Excel eingeben möchtest, ohne VBA zu verwenden, kannst Du:

  • Die Formel direkt in die Zelle eingeben.
  • Die Funktion =FORMELTEXT(Zelle) verwenden, um die Formel in einer anderen Zelle anzuzeigen.

Eine weitere Möglichkeit ist, ein Excel-Makro zu verwenden, um die Formel in eine Zelle zu schreiben, ohne dabei VBA zu verwenden. Du kannst eine benutzerdefinierte Funktion in Excel erstellen, um dies zu erreichen.


Praktische Beispiele

Hier sind einige Beispiele, wie Du verschiedene Formeln per VBA einfügen kannst:

  1. SUMME-Funktion:

    Sub SummeEinfügen()
       Cells(1, 1).FormulaLocal = "=SUMME(A2:A10)"
    End Sub
  2. MATRIXFORMEL:

    Sub MatrixFormelEinfügen()
       Dim s As String
       s = "=SUMMENPRODUKT((LINKS($G$1:$G$10,3)=""DDT"")*(VERGLEICH($E$1:$E$10, $E$1:$E$10,0)=ZEILE($1:$10)))"
       Cells(2, 1).FormulaArray = s
    End Sub

Tipps für Profis

  • Nutze FormulaLocal, um länderspezifische Funktionsnamen zu verwenden.
  • Wenn Du eine Formel in eine Zelle einfügen möchtest, die von einer Zelle abhängt, verwende Cells und Rows.Count, um die letzte gefüllte Zeile dynamisch zu ermitteln.
  • Halte Deine VBA-Codes modular, um die Wartbarkeit zu erhöhen. Erstelle separate Subroutinen für verschiedene Formeln.

FAQ: Häufige Fragen

1. Wie kann ich eine Formel in einer bestimmten Zelle einfügen?
Verwende die Methode Cells(Zeile, Spalte).FormulaLocal = "Deine Formel".

2. Kann ich mehrere Formeln gleichzeitig einfügen?
Ja, Du kannst mehrere Subroutinen erstellen, um verschiedene Formeln in unterschiedlichen Zellen einzufügen.

3. Wie kann ich eine Formel in einer Matrix in Excel einfügen?
Verwende FormulaArray anstelle von FormulaLocal, um eine Matrixformel in eine Zelle einzufügen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige