Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zellen mit Formeln fixieren
#1
Hi,
wie kann ich Zellen in einer Spalte der Tabelle mit Formeln als Wert fixieren, wenn die Formel einen Wert ergibt? Mit VBA.
Mit freundlichen Grüßen  :)
Michael
Antworten Top
#2
Hi Micha,

es mag an der vorgerückten Stunde liegen, aber diese Deine Frage verstehe ich nun garnicht.

Was soll "fixiert" werden? Wann ergeben die Formeln einen Wert und wann nicht?

Kannst Du mal näher erklären, was wann wo und wie per VBA passieren soll?
Überlegen macht überlegen
Gruss aus dem schönen Hunsrück
_______ Klaus-Martin _______
Antworten Top
#3
Hi K@M,

liegt sicher nicht an der Zeit, aber ich wußte auch nicht wie ich das formulieren soll:

Inhaltsverzeichnis

C
5Bohrmaschine
6Waschmaschine
7Vortlaufend
8
Formeln der Tabelle
ZelleFormel
C5=WENNFEHLER(INDEX(Geräte!B$3:Geräte!Z$3;1+11*(ZEILE(Geräte!A1)-1));"")
C6=WENNFEHLER(INDEX(Geräte!B$3:Geräte!Z$3;1+11*(ZEILE(Geräte!A2)-1));"")
C7=WENNFEHLER(INDEX(Geräte!B$3:Geräte!Z$3;1+11*(ZEILE(Geräte!A3)-1));"")
C8=WENNFEHLER(INDEX(Geräte!B$3:Geräte!Z$3;1+11*(ZEILE(Geräte!A4)-1));"")

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8

In dem Beispiel wirds vielleicht deutlich: bis C7 stehen Werte in der Zelle, ab C8 eben "", da die Bedingungen nicht erfüllt werden. Ich möchte mittels VBA nun erreichen, daß die Zellen bis C7 oder später ermittelt werden, wo das Ergebnis der Formel eben nicht "" ergibt und diese Zellen dann fixieren, also statt der Formel den Wert (Formelergebnis) in die Zelle eintragen.
 Die Zellen danach in der Spalte sollen weiter die Formel enthalten.

Die Aktion soll eine Sortierung der Spalte ermöglichen, die mit Formeln nicht möglich ist.

Hoffe nun ist der Plan verständlich.
Mit freundlichen Grüßen  :)
Michael
Antworten Top
#4
Hallo Michael,

so ganz wirklich habe ich es immer noch nicht verstanden.
Willst Du sowas erreichen? ... dann möge es nützlich sein.

Zitat:'   Soll ein markierter Zellbereich keine Formeln mehr enthalten, können diese
'   Formeln in Festwerte umgewandelt werden:

Sub Formeln_In_Festwerte_I ()
    Dim Zelle As Range
    Dim Meldung As String
    Meldung = MsgBox("Sollen Formeln im markierten Zellbereich" & vbNewLine & _
        "wirklich in Festwerte umgewandelt werden ?" & vbNewLine & vbNewLine & _
        "Diese Änderung ist nicht rückgängig zu machen !", vbYesNo, "ACHTUNG!")
    If Meldung = "7" Then Exit Sub
    On Error Resume Next
    For Each Zelle In Selecion
        If Zelle.HasFormula = True Then Zelle.Formula = Zelle.Value
    Next Zelle
End Sub



'   Soll ein markierter Zellbereich keine Formeln mehr enthalten, kann dies
'   auch per Copy&Paste realisiert werden:

Sub Formeln_In_Festwerte_ II ()
    Dim WS As Worksheet
    Set WS = This Workbook.Worksheets("Tabelle1")
    With WS.Range("A1:Z1000")
        .Copy
        .PasteSpecial xlPaste.Values
    End With
    Application.CutCopyMode = False
End Sub


* wenn ich mich recht erinnere, stammen die Codes von Russi
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#5
Moin Peter,

vielen Dank für deinen Lösungsansatz, wenn dort nun der Bezug nicht auf einen fixen Bereich vorgegeben wäre, sondern der Bereich ermittelt würde, der als Ergebnis der Formel eben z.B. die ersten 3 Ergebniszeilen ermittelt hätte und das dann als umzuwandelknden Bereich berücksichtigt, dann wäre die Lösung perfekt.

Also mal als Ablaufbeschreibung:
Ermittle per Code in Bereich C5: xxxxx, ob die Formel dieser Zelle einen Rückgabewert ergibt, ungleich Leer
wenn ja, wandel den Bereich oder diese Zelle um von Formel in Wert
sonst Ende des Codes.

Oder anders herum,
ermitle die erste Zelle in Bereich C5: xxxx, die als Formelergebnis Leer ergibt und wandle die Zellen darüber bis C5 um in fixen Wert.
Mit freundlichen Grüßen  :)
Michael
Antworten Top
#6
Hi Michael,

als ganz einfache Variante:


Code:
Sub Test()
Dim loCo As Long
Dim loLetzte As Long
Dim rng As Range
loLetzte = Cells(Rows.Count, 3).End(xlUp).Row

    For loCo = 5 To loLetzte
        Set rng = Cells(loCo, 3)
        If rng <> "" Then rng.Value = rng.Value
    Next

End Sub
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
[-] Folgende(r) 1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag:
  • Zwergel
Antworten Top
#7
Hallo Micha,
Sub FormelnzuWerten()
Dim rngF As Range
For Each rngF In Range(Range("C5"), Range("C5").End(xlDown).SpecialCells(xlCellTypeFormulas))
If Len(rngF.Value) Then
rngF.Value = rngF.Value
Else
Exit For
End If
Next rngF
End Sub
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Zwergel
Antworten Top
#8
Hi,

mit Edgars Code klappts soweit, aber da die Formel in C10:C11 statt des Leer eine Null einträgt, knallt der Code dort die Formel auch raus.

Das müßte noch geändert werden, wobei mir nicht klar ist, warum da die Null auftritt.

Bei Uwes Code behandelt der Code statt C die Spalte B, das verstehe ich absolut nicht.
Mit freundlichen Grüßen  :)
Michael
Antworten Top
#9
Hi Micha,

(16.10.2017, 10:34)Zwergel schrieb: Bei Uwes Code behandelt der Code statt C die Spalte B, das verstehe ich absolut nicht.
ich auch nicht.  Huh

Aber es war trotzdem nicht ganz richtig. Kannst ja nochmal damit probieren:
Sub FormelnzuWerten()
 Dim rngF As Range
 On Error Resume Next
 For Each rngF In Range(Range("C5"), Range("C5").End(xlDown)).SpecialCells(xlCellTypeFormulas)
   If Len(rngF.Value) Then
     rngF.Value = rngF.Value
   Else
     Exit For
   End If
 Next rngF
 On Error GoTo 0
End Sub
Gruß Uwe
Antworten Top
#10
Hi Michael,


wenn die Formel stimmt, die Du gepostet hast, dann kann die keine 0 auswerfen, da sie ab C8 abwärts in einen Fehler läuft. Dein Bezugsbereich ist B3:Z3, ab Zeile 8 bist Du aber außerhalb des Bereichs (AI3).
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste