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

Forumthread: Variable in .Formula Eigenschaft möglich?

Variable in .Formula Eigenschaft möglich?
21.12.2005 11:07:29
Thias
Hallo Forum Gemeinde,
wollte mir gerade ein kleine Schleife basteln, die mir eine Berechnung durchführt. Allerdings merke ich gerade, dass ich dafür anscheinend doch noch nicht genug weiß.
Aufgabenstellung:
Ich möchte n-mal eine Berechnung ausführen. n ist hierbei die Anzahl der Daten in Spalte G, die ich der Variablen "ende" zuweise.
Nun möchte ich ab Zelle Z11 (und folgende) die Formel = L11*$Z$3 + $AA$3 berechnen.
Allerdings muss die Zeilenzahl von L ja variabel sein, als in jedem Durchlauf der Schleife um 1 erhöht werden. Wie kann ich denn diese variable Zeilenzahl nun in die Berechung innerhalb der Schleife einbauen?
Hier mein Ansatz:

Sub Berechne()
ende = Worksheets(koeffizienten).Range("G65536").End(xlUp).Row
ende = ende - 11 'weil die Daten erst ab Zelle G11 beginnen
z = 11
For n = 1 To ende
Range("Z11").Select
ActiveCell.Formula = "=L & z * Z3 + AA3"
z = z + 1
Next n
End Sub

Das klappt leider nicht, da ich anscheinend in der .Formula Methode keine Variable mit dem & einsetzen kann - jedenfalls nicht so. *g*
Kann mir da jemand weiterhelfen?
Gruß Thias
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable in .Formula Eigenschaft möglich?
21.12.2005 11:14:00
Markus
Hallo,
versuch mal:

Sub Berechne()
ende = Worksheets(koeffizienten).UsedRange.rows.count
For n = 11 To ende
with Worksheets(koeffizienten)
.cells(n,26)= .cells(n,12)*.cells(3,26)+.cells(3,27)
'Cells(zeile,spaltennummer)
end with
Next n
End Sub

Anzeige
AW: Variable in .Formula Eigenschaft möglich?
21.12.2005 11:18:54
Thias
Hi Markus,
hab's gerade doch noch hingefummelt bekommen (siehe unten). vielleicht ist aber Deine Methode schneller. Werde sie mal antesten. Vielen Dank für die schnelle Antwort.
ende = Worksheets(koeffizienten).Range("G65536").End(xlUp).Row
ende = ende - 10
z = 11
For n = 1 To ende
Range("Z" & z).Select
ActiveCell.Formula = "=L" & z & "* $Z$3 + $AA$3"
z = z + 1
Next n
Anzeige
AW: Variable in .Formula Eigenschaft möglich?
21.12.2005 11:24:35
Markus
Hallo Thias,
ja, sie ist schneller. Wirst du aber wohl erst merken, wenn du mehrere tausend Zeilen bearbeitest.
Deine Version selektiert jede einzelne Zelle und schreibt eine Formel rein, meine schreibt die Werte direkt in die Zelle, ohne diese vorher anzusprechen.
Vorteil deiner Formel: bei Änderung der Werte in L-zeile- , Z3 und AA3 werden die Werte automatisch neu berechnet, bei meiner Version müsstest du das Programm nochmal starten.
Je nach Umfang der Tabelle wird aber trotz nochmaligem Programmdurchlauf meine Version dennoch schneller sein.
Probier aus, was für dich am besten ist. Viel erfolg weiterhin.
Markus
Anzeige
AW: Variable in .Formula Eigenschaft möglich?
21.12.2005 11:54:45
Thias
Hi Markus,
die kleine Berechnung ist nur ein Teil eines umfangreicheren Makro's.
Habe hier noch ein paar Zeilen Code, die ich mir mit der Hilfe des Forum's zusammengebastelt habe (oder besser: ich ließ größtenteils basteln! *g*).
Ich befürchte, diese Zeilen sind der eigentliche "Zeitfresser" des Makros, da mit Arrays gearbeitet wird.
Kannst Du evtl. mal durch diese Zeilen schauen und mir sagen, ob sich das evtl. verschnellern lässt? Wenn nicht macht auch nix...
Die Kommentare habe ich mir dazugeschrieben, so wie ich den Code verstanden habe. Falls da was Grundlegendes falsch ist, würde ich mich über eine Verbesserung freuen!
Ich befürchte aber, dass Du zur besseren Lesbarkeit den Code in den Editor kopieren müsstest.
With Sheets(koeffizienten) 'Festlegung des zu nutzenden Arbeitsblatts
.Range("G11:J65536").ClearContents 'evtl. vorhandene Werte im angegebenen Bereich von Spalte G
'werden zuerst geleert
For Each rngA In .Range("B11:B65536") 'Schleife: weise für jeden Durchlauf B11 (+1) rngA zu, bis
'B65536 erreicht ist
If rngA &gt .Range("G10") Then 'Wenn Wert in rngA &gt Wert in Zelle G10, dann...
ReDim Preserve varValuesA(nA) 'Reserviere Speicherplatz für Wert nA in Feld varValuesA
varValuesA(nA) = rngA.Value 'Kopiere Wert aus rngA an Stelle nA von Feld varValuesA
nA = nA + 1 'Variable nA um Eins erhöhen (in Java nA++)
End If 'Ende der If-Bedingung
Next 'zurück zum Schleifenkopf
If nA &gt 0 Then .Range("G11:G" & UBound(varValuesA) + 11) = Application.Transpose(varValuesA)
'Wenn mind. ein Wert größer war als in G10 vorgegeben, kopiere die Werte nach G11
'und forlaufend
End With
For lngI = 11 To Worksheets(koeffizienten).Cells(Rows.Count, 2).End(xlUp).Row
If Cells(lngI, 2) &gt Cells(10, 7) Then
Exit For
End If
Next lngI
ende = Worksheets(koeffizienten).Range("C65536").End(xlUp).Row
Worksheets(koeffizienten).Range("C" & lngI & ":C" & ende).Copy Worksheets(koeffizienten).Range("H11")
Anzeige
AW: Variable in .Formula Eigenschaft möglich?
21.12.2005 11:32:54
UweD
Hallo
deine Formel geht aber auch ohne Select...
ende = Worksheets("Koeffizienten").Range("G65536").End(xlUp).Row - 10
Z = 11
For n = 1 To ende
Range("Z" & Z).Formula = "=L" & Z & "* $Z$3 + $AA$3"
Z = Z + 1
Next n
Gruß UweD
(Rückmeldung wäre schön)
Anzeige
AW: Variable in .Formula Eigenschaft möglich?
21.12.2005 11:45:31
Thias
Hi Uwe,
Danke für die Hilfe. Da hätte ich aber auch selber drauf kommen müssen! Junge, Junge...
Ich glaube für die viele in Anspruch genommene Hilfe müsste ich mal langsam 3 Euro für ein Bier auf Dein Konto überweisen. :-)
Gruß Thias
PS:
da fällt mir noch eine Frage zum VBA-Editor ein: Gibt es eigentlich irgendwo eine Funktion, mit der ich mehrere Zeilen markierten Code's aufeinmal auskommentieren kann, also nicht immer Zeile für Zeile das Hochkomma setzen muss?
Im JAVA-Editor CodeGuide gibt es sowas nämlich...
Anzeige
AW: Variable in .Formula Eigenschaft möglich?
21.12.2005 12:43:38
UweD
Hallo nochmal
ja gibt es.
Userbild
Siehe roten Kreis
Gruß UweD
(Rückmeldung wäre schön)
AW: Variable in .Formula Eigenschaft möglich?
21.12.2005 13:05:53
Thias
Hi Uwe,
meine Leiste sieht leider völlig anders aus! Ich habe hier auch nur Excel in der Version von 2002 druff. Kann es damit zusammenhängen?
Anzeige
AW: Variable in .Formula Eigenschaft möglich?
21.12.2005 13:29:50
Thias
Hi Uwe,
hat sich erledigt. Die entsprechende Symbolleiste war nicht eingeblendet.
Danke trotzdem nochmals.
Gruß Thías
;
Anzeige
Anzeige

Infobox / Tutorial

Verwendung von Variablen in der .Formula Eigenschaft mit Excel VBA


Schritt-für-Schritt-Anleitung

Um eine Formel in Excel VBA dynamisch mit Variablen zu erstellen, kannst Du die .Formula-Eigenschaft verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Definiere die Variablen: Lege die Anzahl der Zeilen fest, die Du verarbeiten möchtest. In diesem Beispiel nehmen wir an, dass die Daten in Spalte G stehen.

    Sub Berechne()
        Dim ende As Long
        Dim z As Long
        ende = Worksheets("Koeffizienten").Range("G65536").End(xlUp).Row - 10
        z = 11
  2. Schleife durch die Zeilen: Verwende eine Schleife, um durch die Zeilen zu iterieren und die Formel in jede Zelle zu schreiben.

        For n = 1 To ende
            Range("Z" & z).Formula = "=L" & z & "* $Z$3 + $AA$3"
            z = z + 1
        Next n
    End Sub
  3. Starte das Makro: Du kannst das Makro jetzt ausführen, um die Formeln in den Zellen zu setzen.


Häufige Fehler und Lösungen

  • Fehler: „Typen unverträglich“: Stelle sicher, dass Du die Variablen korrekt deklariert hast, insbesondere wenn Du mit Long und Integer arbeitest.

  • Fehler bei der .Formula: Wenn Du Variablen in der Formel verwendest, achte darauf, dass die Verkettung korrekt ist. Verwende & zur Verbindung von Text und Variablen.

    Range("Z" & z).Formula = "=L" & z & "* $Z$3 + $AA$3"
  • Problem mit der Auswahl: Vermeide unnötige .Select-Befehle, um die Ausführungsgeschwindigkeit zu erhöhen.


Alternative Methoden

Es gibt verschiedene Möglichkeiten, eine Formel in Excel VBA zu setzen:

  • Direktes Zuweisen: Anstatt die .Select-Methode zu verwenden, kannst Du direkt auf die Zelle zugreifen:

    Worksheets("Koeffizienten").Cells(z, 26).Formula = "=L" & z & "* $Z$3 + $AA$3"
  • Array-Bearbeitung: Wenn Du viele Werte gleichzeitig ändern möchtest, kann es effizienter sein, mit Arrays zu arbeiten.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie Du eine Formel in einem bestimmten Bereich mit einer variablen Zeilenzahl setzen kannst:

Sub BerechneBeispiel()
    Dim ende As Long
    Dim z As Long
    ende = Worksheets("Daten").Range("G65536").End(xlUp).Row
    z = 11

    For n = 1 To ende
        Worksheets("Daten").Cells(z, 26).Formula = "=L" & z & "* $Z$3 + $AA$3"
        z = z + 1
    Next n
End Sub

In diesem Beispiel wird die Formel in Spalte Z ab der Zeile 11 gesetzt.


Tipps für Profis

  • Verwende Option Explicit: Dies zwingt Dich, alle Variablen zu deklarieren und hilft, Fehler zu vermeiden.

  • Nutze die .FormulaR1C1-Eigenschaft: Diese erlaubt es Dir, Bezugnahmen auf Zellen in einer flexibleren Form zu gestalten.

  • Teste Deinen Code schrittweise: Verwende Haltepunkte und Debugging, um sicherzustellen, dass alles wie erwartet funktioniert.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine Formeln immer aktuell sind? Du kannst die Formeln so setzen, dass sie dynamisch sind und sich bei Änderungen der zugrunde liegenden Werte automatisch aktualisieren.

2. Gibt es eine Möglichkeit, mehrere Zeilen in einem Rutsch auszukommentieren? Ja, im VBA-Editor kannst Du mehrere Zeilen markieren und dann die Tastenkombination Ctrl + Shift + C verwenden, um sie auszukommentieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige