Supportnet / Forum / Tabellenkalkulation
Funktionsergebnis in ein anderes Feld reinschreiben
Frage
Hallo!
In Excel-Tabelle werden die Ergebnisse einer Funktion immer in das gleiche Feld reingeschrieben, wo die Funktion ausgefürt wird.
Ich möchte aber eine Funktion in einem Feld ausführen und das Ergebnis soll auch in andere Felder reingeschrieben werden, nähmlich in die, die ich auch noch vorgebe. Die Werte in anderen Feldern sollen dadurch überschrieben werden.
Na, wäre das möglich!?
Eugen
Antwort 1 von CaroS
Hallo Eugen,
ich verstehe Dich so: Du hast, als Beispiel, in A1 und B1 Werte und berechnest in C1 irgendeine Formel, z. B. =(A1+B1)/2. Natürlich siehst Du im Feld C1 das Ergebnis der Berechnung und nicht die Formel selbst. Damit dieses Ergebnis nun auch in anderen Zellen (z. B. in D1 und E1) steht, und zwar immer dasselbe wie in C1, kannst Du 2 verschiedene Dinge tun:
1.) in D1 und E1 die Formel =C1 schreiben, das ist eigentlich ein einfacher Zellbezug, der hat den Vorteil, dass Excel da nicht noch einmal rechnen braucht, oder
2.) in D1 und E1 genau dieselbe Formel wie in C1 schreiben, nämlich =(A1+B1)/2.
Brauchst Du diese Werte, die in Tabelle1 berechnet wurden, nun auch noch in einem anderen Tabellenblatt, dann schreibst Du dort in irgendeine Zelle entweder
1.) =Tabelle1!C1 oder 2.) =(Tabelle1!A1+Tabelle1!B1)/2
oder was in diesem Fall nur eine andere Schreibweise mit demselben Ergebnis wäre 2.) =SUMME(Tabelle1!A1:B1)/2.
Bei den "anderen Feldern, die Du auch noch vorgibst", ist die Frage, was und wie Du das meinst, das müsstest Du noch mal genauer erklären.
Gruß,
CaroS
ich verstehe Dich so: Du hast, als Beispiel, in A1 und B1 Werte und berechnest in C1 irgendeine Formel, z. B. =(A1+B1)/2. Natürlich siehst Du im Feld C1 das Ergebnis der Berechnung und nicht die Formel selbst. Damit dieses Ergebnis nun auch in anderen Zellen (z. B. in D1 und E1) steht, und zwar immer dasselbe wie in C1, kannst Du 2 verschiedene Dinge tun:
1.) in D1 und E1 die Formel =C1 schreiben, das ist eigentlich ein einfacher Zellbezug, der hat den Vorteil, dass Excel da nicht noch einmal rechnen braucht, oder
2.) in D1 und E1 genau dieselbe Formel wie in C1 schreiben, nämlich =(A1+B1)/2.
Brauchst Du diese Werte, die in Tabelle1 berechnet wurden, nun auch noch in einem anderen Tabellenblatt, dann schreibst Du dort in irgendeine Zelle entweder
1.) =Tabelle1!C1 oder 2.) =(Tabelle1!A1+Tabelle1!B1)/2
oder was in diesem Fall nur eine andere Schreibweise mit demselben Ergebnis wäre 2.) =SUMME(Tabelle1!A1:B1)/2.
Bei den "anderen Feldern, die Du auch noch vorgibst", ist die Frage, was und wie Du das meinst, das müsstest Du noch mal genauer erklären.
Gruß,
CaroS
Antwort 2 von EugenG
Hallo!
Ja, das ist schon eine Möglichkeit. Aber meine Funktion benutzt den Zahlenwert der Zelle, die sie mit dem Ergebnis überschreiben soll. Und so wie hier ensteht ein Zirkelverweis!!!
Ist es denn möglich ein Zahlenwert einer Zelle als Funktionsvariable zu benutzen und den Wert sofort nach dem Ausführen der Funktion zu überschreiben?
(Oder auch mehrere Zellenwerte)
Schon mal vielen Dank
Eugen
Ja, das ist schon eine Möglichkeit. Aber meine Funktion benutzt den Zahlenwert der Zelle, die sie mit dem Ergebnis überschreiben soll. Und so wie hier ensteht ein Zirkelverweis!!!
Ist es denn möglich ein Zahlenwert einer Zelle als Funktionsvariable zu benutzen und den Wert sofort nach dem Ausführen der Funktion zu überschreiben?
(Oder auch mehrere Zellenwerte)
Schon mal vielen Dank
Eugen
Antwort 3 von Primut
Hi Eugen,
Nein, das ist von der Sache her mit Funktionen nicht machbar, es ergibt sich logischerweise eine Zirkelbezug. Das ist nur mit einem Makro machbar, wobei auch dort der Zirkelbezug nur dadurch vermieden wird, daß das Makro nicht ständig ausgeführt wird. Wenn es wie in deiner Ausgangsfrage beschrieben schon funktioniert, so wirst du ja schon ein Makro verwenden, oder?
Dieses Makro läßt sich auch auf andere Zellen umschreiben, dazu sind aber genaue Angaben nötig.
Wozu mußt du denn deine Ausgangswerte überschreiben? Das ist ja für normale Funktionen recht unüblich. Was willst du denn eigentlich berechnen? Vielleicht gibt es ja dafür auch noch andere Möglichkeiten.
Gruß Primut
Zitat:
Ist es denn möglich ein Zahlenwert einer Zelle als Funktionsvariable zu benutzen und den Wert sofort nach dem Ausführen der Funktion zu überschreiben?
Ist es denn möglich ein Zahlenwert einer Zelle als Funktionsvariable zu benutzen und den Wert sofort nach dem Ausführen der Funktion zu überschreiben?
Nein, das ist von der Sache her mit Funktionen nicht machbar, es ergibt sich logischerweise eine Zirkelbezug. Das ist nur mit einem Makro machbar, wobei auch dort der Zirkelbezug nur dadurch vermieden wird, daß das Makro nicht ständig ausgeführt wird. Wenn es wie in deiner Ausgangsfrage beschrieben schon funktioniert, so wirst du ja schon ein Makro verwenden, oder?
Dieses Makro läßt sich auch auf andere Zellen umschreiben, dazu sind aber genaue Angaben nötig.
Wozu mußt du denn deine Ausgangswerte überschreiben? Das ist ja für normale Funktionen recht unüblich. Was willst du denn eigentlich berechnen? Vielleicht gibt es ja dafür auch noch andere Möglichkeiten.
Gruß Primut
Antwort 4 von EugenG
Hai!
Ich plane damit eine Simulation zu machen. Und nähmlich so:
Ich habe eine Liste von Zahlen. Und ich habe eine Liste von Funktionen, die ich natürlich selber als Makros schreibe. Jede dieser Funktionen benutz eine Auswahl von diesen Zahlen als Variablen, berechnet das Ergebnis und ersetzt eine der Zahlen durch das Ergebnis. Die Funktionen führe ich nacheinander manuel aus. Dabei soll die nächste Funktion schon die vorher berechneten Zahlen als Variablen nehmen.
Dabei kann ich nach jedem Schritt meine Ausgangszahlenliste beobachten. Alles klar?
Also noch mal die Frage:
Wie ist das machbar in einem Makro, dass eine Funktion ein Zellenwert als Variable benutzt, Funktionergebnis einmal ausrechnet und mit dem Ergebnis eineige der Zellen nachher einmal überschreibt?
Wie kann man in einem Makro Zirkelbezug vermeiden?
Wie kann man in einem Makro "Zielort" für das Ergebnis angeben?
Bin mal sehr gespannt!
Eugen
Ich plane damit eine Simulation zu machen. Und nähmlich so:
Ich habe eine Liste von Zahlen. Und ich habe eine Liste von Funktionen, die ich natürlich selber als Makros schreibe. Jede dieser Funktionen benutz eine Auswahl von diesen Zahlen als Variablen, berechnet das Ergebnis und ersetzt eine der Zahlen durch das Ergebnis. Die Funktionen führe ich nacheinander manuel aus. Dabei soll die nächste Funktion schon die vorher berechneten Zahlen als Variablen nehmen.
Dabei kann ich nach jedem Schritt meine Ausgangszahlenliste beobachten. Alles klar?
Also noch mal die Frage:
Wie ist das machbar in einem Makro, dass eine Funktion ein Zellenwert als Variable benutzt, Funktionergebnis einmal ausrechnet und mit dem Ergebnis eineige der Zellen nachher einmal überschreibt?
Wie kann man in einem Makro Zirkelbezug vermeiden?
Wie kann man in einem Makro "Zielort" für das Ergebnis angeben?
Bin mal sehr gespannt!
Eugen
Antwort 5 von Primut
Hi Eugen,
ja, alles klar. Aber wenn du Makros verwendest, wirst du sie ja auch selbst programmiert haben, das sind doch eigentlich Basics, Zellen auszulesen und anschließend wieder zu beschreiben. Hier mal ein Beispiel:
Hier werden beispielhaft die Werte aus Zelle A1 und B2 ausgelesen und anschließend mir neuen Werten überschrieben. Cells(Zeilennummer,Spaltennummer)
Wie hier dargestellt, werden die Werte nicht als Variablen sondern als feste Ausgangswerte verwendet. Daher kann auch kein Zirkelbezug entstehen bei manuellem Makrostart.
Im Gegensatz dazu entsteht ein Zirkelbezug bei einer Schleife die gleichzeitig denn Zellwert abruft und verändert, oder bei einem Makro, das automatisch gestartet wird, wenn eine Änderung des Tabellenblattes stattfindet und diese Änderung aber selbst durch Zellwertüberschreibung hervorruft.
Dieses Makro hier bezieht sich immer auf das aktuelle offene Tabellenblatt, im Ernstfall kannst du allerdings auch die Tabellenblätter direkt ansprechen.
Weil du von Simulation sprichst ich würde dir evtl. den Solver empfehlen, ein Add-Inn, das vielfältige Formeln und Bedingungen verknüpfen kann und in Abhängigkeit davon ein speziellen Zielwert ermittelt, den man sonst per Hand durch probieren ermitteln müßte, allerdings läßt sich das nicht mit anderen Makros verknüfen.
Gruß Primut
ja, alles klar. Aber wenn du Makros verwendest, wirst du sie ja auch selbst programmiert haben, das sind doch eigentlich Basics, Zellen auszulesen und anschließend wieder zu beschreiben. Hier mal ein Beispiel:
Sub Zellwerteueberschreiben()
Dim Wert1 As Double
Dim Wert2 As Double
Dim Erg1 As Double
Dim Erg2 As Double
Wert1 = Cells(1, 1).Value
Wert2 = Cells(2, 2).Value
Rem hier folgt die beliebige Berechnung
Erg1 = 5555 Rem Natürlich eigene Ergebniszuordnung vornehmen
Erg2 = 6666 Rem Natürlich eigene Ergebniszuordnung vornehmen
Rem Zuordnung der Ergebnisse zu den beliebigen Zellen
Cells(1, 1).Value = Erg1
Cells(2, 2).Value = Erg2
End Sub
Hier werden beispielhaft die Werte aus Zelle A1 und B2 ausgelesen und anschließend mir neuen Werten überschrieben. Cells(Zeilennummer,Spaltennummer)
Wie hier dargestellt, werden die Werte nicht als Variablen sondern als feste Ausgangswerte verwendet. Daher kann auch kein Zirkelbezug entstehen bei manuellem Makrostart.
Im Gegensatz dazu entsteht ein Zirkelbezug bei einer Schleife die gleichzeitig denn Zellwert abruft und verändert, oder bei einem Makro, das automatisch gestartet wird, wenn eine Änderung des Tabellenblattes stattfindet und diese Änderung aber selbst durch Zellwertüberschreibung hervorruft.
Dieses Makro hier bezieht sich immer auf das aktuelle offene Tabellenblatt, im Ernstfall kannst du allerdings auch die Tabellenblätter direkt ansprechen.
Weil du von Simulation sprichst ich würde dir evtl. den Solver empfehlen, ein Add-Inn, das vielfältige Formeln und Bedingungen verknüpfen kann und in Abhängigkeit davon ein speziellen Zielwert ermittelt, den man sonst per Hand durch probieren ermitteln müßte, allerdings läßt sich das nicht mit anderen Makros verknüfen.
Gruß Primut
Antwort 6 von EugenG
Ok! Das ist genau was ich brauche!
Aber da ich wohl noch ein blutiger Anfänger bin, könnt ihr mir noch genauer zeigen wie der Programmtext für eine Ausleseanweisung aussehen würde:
Also:
Der Zellenwert der Zelle A1 soll in die Variable Wert ausgelesen werden. Dann soll beliebige Berechung erfolgen z.B.: Erg = Wert + 1. Dann Soll Erg in die Zelle B1 reingeschrieben werden.
Etwa so?
Sub Zellwerteueberschreiben()
Dim Wert As Double
Dim Erg As Double
Wert = Cells(A1).Value
Erg = Wert + 1
Cells(B1).Value = Erg
End Sub
Das kann doch jeder sagen, oder!
Danke
Eugen
Aber da ich wohl noch ein blutiger Anfänger bin, könnt ihr mir noch genauer zeigen wie der Programmtext für eine Ausleseanweisung aussehen würde:
Also:
Der Zellenwert der Zelle A1 soll in die Variable Wert ausgelesen werden. Dann soll beliebige Berechung erfolgen z.B.: Erg = Wert + 1. Dann Soll Erg in die Zelle B1 reingeschrieben werden.
Etwa so?
Sub Zellwerteueberschreiben()
Dim Wert As Double
Dim Erg As Double
Wert = Cells(A1).Value
Erg = Wert + 1
Cells(B1).Value = Erg
End Sub
Das kann doch jeder sagen, oder!
Danke
Eugen
Antwort 7 von CaroS
Hi Eugen,
Du machst Fortschritte. Bei genauerem Hinsehen entdeckst Du sicherlich auch noch den kleinen Unterschied zwischen Deiner und Primuts Schreibweise:
Schreibe statt Wert = Cells(A1).Value
Wert = Cells(1, 1).Value
und statt Cells(B1).Value = Erg
Cells(1, 2).Value = Erg
Was hat denn Dein Debugger zu Cells(A1) gesagt?
Gruß,
CaroS
Du machst Fortschritte. Bei genauerem Hinsehen entdeckst Du sicherlich auch noch den kleinen Unterschied zwischen Deiner und Primuts Schreibweise:
Schreibe statt Wert = Cells(A1).Value
Wert = Cells(1, 1).Value
und statt Cells(B1).Value = Erg
Cells(1, 2).Value = Erg
Was hat denn Dein Debugger zu Cells(A1) gesagt?
Gruß,
CaroS

