Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1892to1896
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zellinhalt in einer Berechnung einbinden

Zellinhalt in einer Berechnung einbinden
23.08.2022 17:46:52
Stefan
Hallo,
es geht um ein Programm mit einer Seite für Einstellungen.
Dort gibt es z.B. eine Begrenzung der einzelnen Tabellenblätter auf z.B.1000 Zeilen
Diesen Wert (hier 1000) würde ich gern in einer Formel an einer anderen Stelle des Programms benutzen.
Wenn dies möglich wäre flexibel (also der Wert in der Formel ändert sich wenn die Einstellungen geändert wurden.
Aber das wäre nur ein Wunsch...
Ich schaffe ja nicht einmal die Zellinhalt in eine Formel einzubauen.
Ich kenne es nur wenn ein Wert in einer anderen Zelle angezeigt werden soll (z.B. =+Einstellungen!B1)
Gibt es eine Möglichkeit diesen Zellinhalt in eine Formel einzubinden?
Angenommen in B1 steht "1000", dann würde ich gerne diese Zahl (Zellinhalt) verwenden
z.B. range("A1:T"&Einstellungen!B1)
Das funktioniert aber so nicht.
Gibt es dazu eine Möglichkeit?
Danke !
Stefan

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
VBA halt
23.08.2022 17:50:45
lupo1
range("A1:T"&Einstellungen!B1)
wäre
Range("A1:T" & Worksheets("Einstellungen").Range("B1"))
(ungetestet)
AW: VBA halt
23.08.2022 17:56:00
Stefan
Super!
funktioniert - vielen Dank!
AW: Zellinhalt in einer Berechnung einbinden
23.08.2022 17:51:53
{Boris}
Hi,
ich bin nicht sicher, ob Du VBA oder Formeln meinst.
Per Formel benötigst Du die Funktion INDIREKT - alternativ auch INDEX.
Per VBA:
Range("A1:T"& worksheets("Einstellungen").Range("B1"))
VG, Boris
AW: Zellinhalt in einer Berechnung einbinden
23.08.2022 18:45:36
Daniel
HI
neben dem gezeigten gibt es noch eine weitere Möglichkeit, Werte aus Zellen in die VBA-Programmierung einzubinden: Eckige Klammern: [ ]
mit Eckigen Klammern eröffnest du innerhalb VBA quasi eine Excelzelle und innerhalb dieser Klammer kannst du dann im Prinzip eine Zellformel schreiben, deren Ergebnis dann verwendet wird (sollte die Formel mehr als Zellbezüge auf andere Zellen enthalten, muss die auf englisch geschrieben werden)

Range("A1:T" & [Einstellungen!B1])
noch besser wäre es, wenn du der Zelle Einstellungen!B1 über den Namensmanager einen Namen vergibst, z.B. "ZeilenBegrenzung" und diesen verwendest, sei es über:
Range("A1:T" & Range("ZeilenBegrenzung").value ")
oder
Range("A1:T" & [ZeilenBegrenzung])
das hat zwei Vorteile, vorallem wenn du mehrere solcher Einstellungen hast:
a) du kannst dim Code ablesen, was du verwendest und musst dir nicht merken, ob die Zeilenbegrenzung jetzt in B1 oder nicht doch in C1 steht
b) sollstest du nachträglich auf dem Blatt Zellen einfügen, löschen oder verschieben und damit die Anordnung ändern, oder du benennst das Blatt um, passt sich der Name in der Regel automatisch an und du musst am Code nichts ändern. mit dem Ausgeschriebenen Zellbezug müsstest du jetzt in den Code eingreifen und die neue Adresse eingeben.
Gruß Daniel
Gruß Daniel
Anzeige
Hat zwei Nachteile
24.08.2022 09:24:31
lupo1
1. langsamer, als bei der obj.bez. Darstellung (merkt man erst bei häufigem Einsatz)
2. hart geschriebene Werte im Code, statt empfohlener Variabilisierung der Inhalte
Aber: Mögen tue ich es auch, gerade dann, wenn es schnell mal etwas Code sein soll. Oder natürlich bei Konstruktionsmakros.
AW: Hat zwei Nachteile
24.08.2022 12:10:03
Daniel
1. Ist richtig,
2. kommt jetzt darauf an, was du meinst.
Sheets("Einstellungen").Range("B1") ist jetzt genauso "hart" vercodet wie [Einstellungen!B1]
Variabilisrung der Inhalte meint, dass man die Werte erst einer Variablen zuweist und im weiteren Code dann diese Variable verwendet
Also nicht:

Sheets("Daten").Range("A1:Z" & Sheets("Einstellungen").Range("B1"). Value).Copy
Sondern:

DatenEnde = Sheets("Einstellungen").Range("B1"). Value
Sheets("Daten").Range("A1:Z" & DatenEnde).Copy
Dies funktioniert mit den [ ] aber genauso und einmal im Code muss man hart vercoden, nur mehrfaches sollte man vermeiden und dann Variablen einsetzen, so dass bei einer Änderung nur eine Stelle im Code angepasst werden muss und nicht mehrere , außerdem hat man damit das Geschwindigkeitsproblem gelöst, die einmalige Verwendung von [ ] bei der Variablenzuweisung wird man nicht merken.
Was das Problem der [ ] ist, dass innerhalb der Klammern der Code fix sein muss und keine Variablen oder sonstiger VBA-Code verwendet werden kann (nach dem [ befindet man sich in einer Zelle und nicht mehr in VBA), dh sowas wie

x = "Einstellungen"
y = "B1"
DatenEnde = Sheets(x).Range(y)
Ist mit den [ ] nicht möglich, hier muss man innerhalb der [ ] hart vercoden.
Allerdings kann man dann alternativ die Funktion Evaluate verwenden. Bei [ ] muss man die Formel direkt in den Code schreiben, bei Evaluate ist die Formel ein Textstring, der dan auch eine Variable sein darf oder mit VBA-Methoden zusammengebaut wird.
das hier funktioniert:

x = "Einstellungen"
y = "B1"
DatenEnde = Evaluate(x & "!" & y)
Evaluate ist also die "variable" Alternative zu [ ].
Es ist sicherlich richtig, dass die Objektreferenzierung auf Zellen mit Sheets().Range() bzw .Cells() den [ ] überlegen und vorzuziehen ist.
Es gibt allerdings Fälle, in denen [ ] bzw Evaluate notwendig oder zumindest hilfreich sind.
1. man will den Wert eines Excel-Namens ermittelt, der nicht auf eine Zelle verweist sondern direkt einen Wert zurück gibt.
2. man will in VBA eine Excelformel mit Matrix nachbilden , bspw eine Formel wie:

=Summenprodukt(1*(A1:A10=B1:B10))
Hier versagt

WorksheetFunction.Sumproduct(1 * (Range("A1:A10") = Range("B1:B10")))
weil VBA diese Matrixoperation nicht ausführen kann, hier müsste eine Schleife programmiert werden.
Oder man verwendet

Evaluate("Sumproduct(1*(A1:A10=B1:B10))")
Oder falls der Bereich fix ist

[Sumproduct(1*(A1:A10=B1:B10))]
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige