Supportnet Computer
Planet of Tech

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

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

Antwort 3 von Primut

Hi Eugen,

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?


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

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:

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

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: