VBA- Fehler beim übertragen einer Formel
Hallo Excel-Liebhaber,
in dem nachstehendem Makro habe ich einen Fehler drin, den ich leider nicht gelöst bekomme.
In der Hoffnung das mir jemand weiterhelfen kann.
Es geht darum das eine Formel, die in Zelle C13 steht in die Zeilen ab C20 reinkopiert wird, in denen ein "X" in Spalte A steht.
Das selektieren der korrekten Zeilen funktioniert, aber anstelle der Formel erhalte ich je nachdem was ich an dem Makro ändere entweder den Wert 0 oder =0.
Die Formel ist eine Summenproduktformel. (Nicht das das nachher das ausschlaggebende wäre).
Vielen Dank schon mal an alle vorab die sich die Zeit zum reinschauen genommen haben.
Gruß Helmut
Das Makor wird über eine Befehlsbutton gestartet.
Private Sub CommandButton1_Click()
Dim a As String
Dim i As Long
Dim lz As Long
'letzte Zeile ermitteln
lz = Sheets(1).Cells(Rows.Count, "a").End(xlUp).Row
'Formel auf Variable zuweisen
a = "=" & Cells(13, 3).Value
'Durchlauf
For i = 20 To lz
If Cells(i, 1).Value = "X" Then
Range("c" & i & ":da" & i).Value = a
End If
Next i
'Inhalte einfügen
Range("c20:fz" & i).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
Application.CutCopyMode = False
MsgBox "fertig"
End Sub
Antwort schreiben
Antwort 1 von Denkanstoßer vom 27.11.2019, 17:56 Options
Ho,
anstelle von a = "=" & Cells(13, 3).Value würde ich empfehlen:
a=Cells(13,3).Formula
mfg
Antwort 2 von finger59 vom 28.11.2019, 07:14 Options
Hallo Denkanstoßer,
leider immer noch nicht das gewünschte Ergebnis.
Bei der Änderung kam leider auch nur 0 als Ergebnis raus.
Mit Deiner Änderung habe ich dann nochmal die Zeile...
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=
in
Selection.PasteSpecial Paste:=xlPasteFormulars, ....
geändert und erhalte jetzt zumindest schon mal die Formel
reingestellt.
Allerdings ohne Anpassung der Zellbezüge. Sprich er greift die Formel aus C13 und kopiert die 1:1 in alle selektierten Zeilen.
(d.h. aus $B13 bleibt auch $B13 und wird nicht zu $B20)
Hast Du da evtl. noch eine Idee?
Natürlich auch die Bitte an andere Leser, die mir evtl. da weiterhelfen könnten....
Vielen Dank für die erhaltene Hilfe
Gruß Helmut
Antwort 3 von Denkanstoßer vom 28.11.2019, 12:46 Options
Hi,
das liegt wohl an den 'absoluten Bezügen' in der Ursprungsformel in C13 - entferne das $-Zeichen aus der Formel
mfg
Antwort 4 von finger59 vom 28.11.2019, 15:02 Options
Hallo,
nein.. leider ist das nicht mein Problem... habe es getestet, aber dann werden die Formel in den weiteren Zellen auch falsch gefüllt.
Der Bezug in meiner Formel bezieht sich auf die Spalte B und wenn ich dann das $-Zeichen vor dem B wegnehme, dann würde er beim Füllen der Zeile z.B. in D20 den Bezug auf C20 machen und somit könnte wieder kein Ergebnis rauskommen.
Manuell funktioniert das mit der Formel nur irgendwie kriege ich
es in dem Makro nicht rein.
Problem wie gehabt. Entweder erhalte ich als Wert eine 0, oder meine Formel ohne Anpassung.
Vielen Dank auf jeden Fall für den Tip, auch wenn er leider nicht mein erhofftes Resultat brachte.
Gruß Helmut
Antwort 5 von DukeNT vom 28.11.2019, 15:20 Options
Hallo Helmut,
schreib doch mal wie deine Summenprodukt-Formel in C13 aussieht und wie die Formel dann in z.B. Zelle C20 und D20 aussehen soll.
Gruß Niels
Antwort 6 von finger59 vom 28.11.2019, 15:44 Options
Hallo Niels,
in der Zelle C13 im Arbeitsblatt erfasste Werte steht diese Formel:
=SUMMENPRODUKT(('alle Daten'!$A$2:$A$1000='erfasste Werte'!$B13)*('alle Daten'!$C$2:$C$1000='erfasste Werte'!C$19)*('alle Daten'!$F$2:$F$1000))
Mein bisheriges Problem ist, je nachdem was ich im Makro eingebe, ob Values oder Formulas erhalte ich den Wert 0 oder die Formel, so wie sie oben steht.
Formel in C20 sollte dann sein:
=SUMMENPRODUKT(('alle Daten'!$A$2:$A$1000='erfasste Werte'!$B20)*('alle Daten'!$C$2:$C$1000='erfasste Werte'!C$19)*('alle Daten'!$F$2:$F$1000))
Formel in D20 sollte dann identisch mit C20 sein.
Wenn ein "X" wieder in Zelle A22 stehen sollte dann:
=SUMMENPRODUKT(('alle Daten'!$A$2:$A$1000='erfasste Werte'!$B22)*('alle Daten'!$C$2:$C$1000='erfasste Werte'!C$19)*('alle Daten'!$F$2:$F$1000))
Die Fettmarkierten Zahlen dürften sich nur anpassen, der Rest müsste bleiben.
Vielen Dank für Deine Anfrage.
Gruß Helmut
Antwort 7 von DukeNT vom 28.11.2019, 16:20 OptionsLösung
Ok änder die Formal in C13 mal wie folgt:
=SUMMENPRODUKT(('alle Daten'!$A$2:$A$1000='erfasste werte'!$B13)*('alle Daten'!$C$2:$C$1000='erfasste werte'
!$C$19)*('alle Daten'!$F$2:$F$1000))
den Teil:
Zitat:
'Inhalte einfügen
Range("c20:fz" & i).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
verstehe ich nicht. Du kopierst Bereich C20 bis z.B. FZ40 und überschreibst den gleichen Bereich wieder?
Den Teil hab ich erstmal weg gelassen.
Versuch mal folgenden Code:
Private Sub CommandButton1_Click()
Dim a As String
Dim i As Long
Dim lz As Long
'letzte Zeile ermitteln
lz = Sheets(1).Cells(Rows.Count, "a").End(xlUp).Row
'Durchlauf
For i = 20 To lz
If Cells(i, 1).Value = "X" Then
Cells(13, 3).Copy Destination:=Cells(i, 3)
Cells(i, 3).Copy Destination:=Range("d" & i & ":da" & i)
End If
Next i
Range("A1").Select
Application.CutCopyMode = False
MsgBox "fertig"
End Sub
Gruß Niels
Antwort 8 von finger59 vom 28.11.2019, 16:35 Options
Hi Niels....
vielen vielen Dank.
Jetzt sieht das Ergebnis als Formeleintragung wie gewünscht aus und alle Daten werden entsprechend richtig gerechnet.
Endlich ! Vielen vielen Dank...
Allerdings...
den festen Bezug in $C$19 habe ich wieder auf C$19 geändert, weil dort ja einer der beiden Suchfaktoren für das andere Arbeitsblatt steht.
Warum ich die eingetragene Formel gleich wieder gelöscht haben wollte... nun, das ist eine Frage des Arbeitsspeichers, der in der Vergangenheit bei meinen Versuchen in die Kniee gegangen ist.
Ich wollte die Formel eintragen lassen und dann mit kopieren und Inhalte einfügen - Werte nur noch die Zahl stehen lassen, so daß der Arbeitsspeicher nicht wirklich belastet wird, zumal die Datei mit den vermehrten Formeleinträgen sich unnötig aufbläht. Aber das kriege ich jetzt auch noch gelöst in dem ich einfach den gesamten Tabellenbereich markiere und dann mit Inhalte einfügen - Werte drübergehe.
Vielen Dank all denjenigen die an meinem Problem mitgeholfen oder einfach nur teilgehabt haben und vielleicht konnte mein Problem ja auch das von einem anderen Excel-User mit gelöst haben.
Gruß Helmut