Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1672to1676
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

Value-Zuweisung löscht Formeln im Zielbereich?

Value-Zuweisung löscht Formeln im Zielbereich?
30.01.2019 12:13:46
Burkhard
Hallo miteinander,
ich habe eine Tabelle mit einigen Zeilen, die zwar leer, aber formatiert sind und teilweise Formeln enthalten. Nun sollen aus einem anderen Bereich derselben Tabelle Zeilen hierhin kopiert werden, wobei Formatierungen und Formeln des Zielbereichs nicht überschrieben werden sollen.
Die Zwischenablage soll bei dieser Kopieraktion nicht benutzt werden - damit fällt .Copy und .PasteSpecial schon mal aus.
Ich habe es versucht mit:
        sMoveDest = lDestRow & ":" & lDestRow + iAdditionalNumberOfRows)
sMoveSource = lFirstRowToMove & ":" & lLastRowToMove
.Rows(sMoveDest).Value = .Rows(sMoveSource).Value

oder
 Dim rSource As Range, rDest As Range
Set rDest = .Rows(sMoveDest)
Set rSource = .Rows(sMoveSource)
rDest.Value = rSource.Value
In beiden Fällen werden die im Zielbereich vorhandenen Formeln gelöscht. Ich habe vorher geprüft: in (z.B.) N50 (Zielbereich) steht die Formel
| (Range("N50").Formula: =IF(COUNTIF(Q50:S50,"x")>0,"X","")
Aus dem Quellbereich würde z.B. N70 nach N50 kopiert werden. N70 hat aber keinen Inhalt
| (IsEmpty(Range("N70").Value = True).
Trotzdem ist nach der Zuweisung die Formel in N50 verschwunden. Obwohl doch eigentlich nur "values" übertragen werden sollen ...
| (Range("N50").Formula: )
Wie kann ich das verhindern? Was könnte/sollte ich dazu noch prüfen bzw. sicherstellen?
Vielen Dank schon mal für eure Ideen und Vorschläge!

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Value-Zuweisung löscht Formeln im Zielbereich?
30.01.2019 12:29:05
Rudi
Hallo,
versuch mal
rDest.Formula= rSource.Formula
Gruß
Rudi
AW: Value-Zuweisung löscht Formeln im Zielbereich?
30.01.2019 13:02:22
Burkhard
Hallo Rudi,
vielen Dank für die rasche Antwort - hat aber leider nichts gebracht. Die Formeln sind auch nach dieser Zuweisung weg. Insofern sehe ich keinen Unterschied zwischen rDest.Value = rSource.Value und rDest.Formula = rSource.Formula - wer kommt denn schon auf die Idee, mit .Formula auch values zu übertragen (und umgekehrt)! Scheinbar tun beide Zuweisungen dasselbe, nämlich values und formulas zu übertragen ...
Nicht gut!!
Grüße
Burkhard
AW: Value-Zuweisung löscht Formeln im Zielbereich?
30.01.2019 13:13:02
Rudi
Hallo,
.value überträgt Konstanten und Formelergebnisse.
Bei mir bleiben bei ZielRange.Formula = QuellRange2.Formula die Formeln erhalten.
Gruß
Rudi
Anzeige
AW: Value-Zuweisung löscht Formeln im Zielbereich?
30.01.2019 16:01:28
Burkhard
Hallo Rudi,
eben: Ergebnisse, aber doch nicht die Formeln selber! Oder?
Bei mir werden mit rDest.Formula = rSource.Formula zwar (für mich durchaus unlogischerweise!) die Werte/values nach rDest übertragen, aber die vorher dort vorhandenen Formeln sind danach weg. Was ist dann bei mir anders als bei dir?
rDest und rSource sind jeweils mehrere (aber gleich viele) komplette Zeilen. Die Spalten bzw. Zellen, die in rDest Formeln enthalten, haben in rSource keinen Wert/value. Und "kein Wert" in rSource heißt für mich: "Finger weg von den Formeln" in rDest. Ist aber nicht so :-(.
Hat das etwas damit zu tun, dass hier nicht einzelne Zellen übertragen werden?
Grüße
Burkhard
Anzeige
AW: Value-Zuweisung löscht Formeln im Zielbereich?
30.01.2019 16:24:27
Mullit
Hallo,
heißt für mich: "Finger weg von den Formeln"

...eben, aber auch nur für Dich, aber nich für Excel, das haut Dir nämlich dabei gewaltig auf die Finger...;-)
Ich glaub das müssen wir für 'VBA nicht ganz so Gute' machen: Bei einer Anweisung XXX.Value=YYY.Value wird alles, was sich in XXX befindet, vollständig mit dem Inhalt von YYY überschrieben.
Dabei ist es völlig egal ob sich in YYY Schneehasen, Zweigangschlagbohrmaschinen oder die Playmates des Monats befinden, aber auch weniger schnucklige Dinger, wie schwarze Löcher, das Vakuum eines Paralleluniversums, oder das absolute Nichts...
D.h. um es etwas weniger blumig zu formulieren, auch wenn YYY.Value gleich vbNullstring, "" , oder Empty ist, wird eben genau das in XXX.Value geschrieben, alles andere ist futsch..ätsch...
Bei XXX.Formula=YYY.Formula passiert gleiches eben mit der Formel...
Willst Du das verhindern, mußt Du vorher einen Abfrage-Beding. proggen, oder Du fügst die Werte in andere Zellen als die mit Inhalt belegten ein...
Jetzt bringen wir Dich 'VBA gut' aber ein ganzes Stück näher, was...;-)
Gruß, Mullit
Anzeige
AW: Value-Zuweisung löscht Formeln im Zielbereich?
30.01.2019 16:49:57
Burkhard
Hallo Mullit,
vielen Dank für deine anschauliche Beschreibung! Dass mit der Zuweisung auch ein Nullstring/Empty kopiert wird, ist mir inzwischen schon gedämmert. Das heißt für mich aber bedauerlicherweise, dass ich das so (also mit Range oder auch mit Rows) nicht machen kann. Ziel ist es ja nach wie vor, die "echten values" (und ausschließlich diese) aus dem Quellbereich in den Zielbereich zu bringen und den Zielbereich ansonsten unverändert zu lassen. Oder sieht da jemand eine andere Lösung als die einzelnen Zellen abzuklappern und bei HasFormula im Zielbereich nix zu machen? Oder zuerst die Formeln aus dem Zielbereich (einzeln) in den Quellbereich zu kopieren und dann die o.g. Zuweisung aufzurufen? Was wäre ggf. performanter?
Grüße
Burkhard
PS Ihr bringt mich in der Tat "VBA sehr gut" immer wieder ein Stückchen näher! ;-)
Anzeige
AW: Value-Zuweisung löscht Formeln im Zielbereich?
30.01.2019 19:17:09
Mullit
Hallo,
ok, also am perfomantesten (zum. für gr. Bereiche) wären da Arrays, mir ist noch nicht ganz klar, was Du nun wie, wo und durch was ersetzen willst, aber egal, mal ein triviales Bsp. für Formeln:
Option Explicit

Public Sub test()
   Dim avntSource() As Variant, avntTarget() As Variant
   Dim ialngRow As Long, ialngColumn As Long
   avntSource() = Cells(1, 1).Resize(3, 3).Formula
   avntTarget() = Cells(4, 6).Resize(6, 8).Formula
   For ialngRow = 1 To Ubound(avntSource, 1)
        For ialngColumn = 1 To Ubound(avntSource, 2)
            If avntSource(ialngRow, ialngColumn) <> vbNullString Then _
                avntTarget(ialngRow, ialngColumn) = avntSource(ialngRow, ialngColumn)
        Next
   Next
   Cells(4, 6).Resize(6, 8).Formula = avntTarget()
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

 ABCDEFGH
15676787978935  78985768456
2575   78934564456
3 6768978  789456445654
45677    5676787978935
55676787978935  575456
657557  7896768978
75676768978     

ZelleFormel
A1=A5
B1=B5
C1=C5
A2=A6
B2=B6
B3=B7
C3=C7
F4=A5
G4=B5
H4=C5
F5=A6
G5=B6
H5=H2
F6=F3
G6=B7
H6=C7
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Und mal gleich noch ein Array-Tutorial hinten dran, quasi als Rundum-Sorglos-Paket...;-)
http://www.online-excel.de/excel/singsel_vba.php?f=152
Gruß, Mullit
Anzeige
AW: Value-Zuweisung löscht Formeln im Zielbereich?
31.01.2019 09:32:56
Burkhard
Hallo Mullit,
du bist wirklich rührend besorgt um mich ;-) vielen Dank!
Die Lösung mit dem Array finde ich ziemlich schick. Auf die Idee, Zellen auf diese Weise in ein Array zu werfen und dann auch wieder rauszuholen, bin ich noch gar nicht gekommen (siehste: again what learned!).
Danke dir und allen anderen!
Burkhard
Wie bitte soll das logisch gehen?
30.01.2019 12:36:07
EtoPHG
Hallo,
Excel und VBA gut? Wirklich?
Was genau willst du in die Zielzelle (die eine Formel enthält!) kopieren?
Wenn es sich um eine neue oder andere Formel handelt ok. Aber den Wert der Zelle mit kopieren überschreiben löscht nun mal die Formel. Das dürfte wohl logisch sein. Oder willst du Excel dazu zwingen die ein anderes Resultat, als das der Formel, anzuzeigen?
Gruess Hansueli
Anzeige
AW: Wie bitte soll das logisch gehen?
30.01.2019 13:15:28
Burkhard
Hallo Hansueli,
ich finde das sehr logisch:
- wenn die Quellzelle einen Inhalt (value) hat, überschreibt dieser die Zielzelle und damit auch eine evtl. dort vorhandene Formel.
- wenn dem nicht so ist, bleibt die Formel in der Zielzelle erhalten.
Ich sehe hier kein logisches Problem. Dass in meinem konkreten Fall "dem nicht so ist", habe ich ja vorher geprüft - trotzdem wird die Formel in der Zielzelle gelöscht. Ist das etwa logischer?
Grüße
Burkhard
Value heißt nicht Inhalt...
30.01.2019 13:32:26
Rudi
... sondern WERT. Der kann auch per Formel errechnet sein.
AW: Value - Inhalt - Wert ...
30.01.2019 14:41:36
Burkhard
... ist doch eigentlich zweitrangig. (Und oftmals ein Übersetzungs- oder Dokumentationsproblem, aber das ist eine andere Geschichte.) Ich hätte meine "Bedingung" auch so formulieren können, ohne dass sich inhaltlich etwas geändert hätte:
- wenn die Quellzelle einen Wert (value) hat, überschreibt dieser die Zielzelle und damit auch eine evtl. dort vorhandene Formel.
- wenn dem nicht so ist, bleibt die Formel in der Zielzelle erhalten.

Entscheidend ist doch, dass der Wert/value das ERGEBNIS einer Formel sein kann, aber nicht die Formel selber - oder sehe ich das falsch?
Anzeige
AW: Value - Inhalt - Wert ...
30.01.2019 14:43:10
Daniel
Wenn du einen ganzen Bereich kopieren und einfügen willst, kannst du ja nicht individuell pro Zelle sagen ob er Werte oder Formeln einfügen soll. Klingt so, als müsste man da schon Zelle für Zelle vorgehen und individuell kopieren.
ja, das siehst du völlig falsch!
30.01.2019 15:02:46
EtoPHG
Burkhard,
Eine Zelle kann 1 von 3 möglichen "Werten" enthalten:
1) Nichts / Leer
2) einen fixen Wert (Zahl oder String)
3) eine Formel beginnend mit "="
Kopieren heisst den Wert der Quelle in die Zielzelle übertragen, nichts anderes!
Dein Verständnis des Objekts Range und dessen Eigenschaften, bzw. deine Logik der darauf angewandten Methoden ist völlig verquer.
Gruess Hansueli
Anzeige
AW: Verständnis - Ergebnis
30.01.2019 16:26:05
Burkhard
aalso ...
... mag ja sein, dass mein Verständnis an dieser Stelle nicht den Tatsachen entspricht. Ich dachte halt, dass ich mit .values auf den Fall 2) und mit .formula auf den Fall 3) zugreife. Und dass im Fall 1) eben nichts passiert - nichts übertragen ist ja etwas anderes als die Zielzelle zu löschen, also dort "nichts" hineinzuschreiben. Das ist wohl der Knackpunkt.
Aber sei's wie's sei: letztendlich ist mein Verständnis ja eigentlich egal. Der Punkt ist, dass VBA das machen soll, was ich benötige - das Ergebnis ist entscheidend. Und da sehe ich irgendwie noch nicht wirklich Land.
Vielen Dank für eure Geduld!
Burkhard
Anzeige
Das sind Zustände, keine Fälle! (owT)
30.01.2019 18:43:39
EtoPHG

AW: Verständnis - Ergebnis
31.01.2019 13:44:29
Rudi
Hallo,
dann schau dir doch mal die Range.SpecialCells-Methode an.
Hier kannst du unterscheiden, ob du auf Zellen mit Konstanten oder mit Formeln zugreifst.
Gruß
Rudi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige