Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Automatisch Formeln in Werte umwandeln mit VBA

Automatisch Formeln in Werte umwandeln mit VBA
28.02.2007 10:05:15
Salim
Hallo zusammen,
ich würde gerne folgendes machen:
in C4: Eingabe eines Anfangsdatums, der sich nicht ändert.
in C5: Eingabe des aktuellen Datums, der immer wieder aktualisiert wird.
In den Spalten D bis AY steht in jeder Spalte in Zeile 8 einen Datum mit verschiedenen Formeln darunter in den Zeilen 9 bis 23.
Ich würde gerne wissen, ob es möglich ist, einen VBA-Code zu programmieren, der die Zeile 8 durchläuft und in den Spalten wo gilt: Datum in Zeile 8 liegt in der Vergangenheit: Formeln in den Zeile 9-23 in Werte umwandeln.
Wäre Super
Danke
Salim
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatisch Formeln in Werte umwandeln mit VBA
28.02.2007 10:19:00
IngGi
Hallo Salim,
das geht zum Beispiel so:

Sub test()
Dim rng As Range
For Each rng In Sheets("Tabelle1").Range("D8:AY8")
   If rng < Date Then
      rng.Offset(1, 0).Resize(15 , 1).Copy
      rng.Offset(1, 0).Resize(15, 1).P asteSpecial Paste:=xlPasteValues
   End If
Next 'rng
End Sub

Gruß Ingolf
Anzeige
AW: Automatisch Formeln in Werte umwandeln mit VBA
28.02.2007 10:41:21
Salim
Hallo Ingolf,
vielen Dank. Ich bring es aber noch nicht zum Laufen.
Ich habe versucht Date durch C5 (aktuellen Datum) zu ersetzen.
Wenn ich dann ausführen möchte, schreibt er: Index ausserhalb des gültigen Bereichs?
Gruss
Salim
AW: Automatisch Formeln in Werte umwandeln mit VBA
28.02.2007 10:52:07
Bertram
Hallo Salim,
Date liefert das aktuelle Datum, ansonsten Range("C5").Value
Gruß
Bertram
Anzeige
AW: Automatisch Formeln in Werte umwandeln mit VBA
28.02.2007 10:56:52
Salim
Hallo Bertram,
Danke für den Tip.
Wenn ich dann ausführen möchte, schreibt er aber trotzdem: Index ausserhalb des gültigen Bereichs.
Woran liegts?
Gruss
Salim
AW: Automatisch Formeln in Werte umwandeln mit VBA
28.02.2007 11:03:49
IngGi
Hallo Salim,
hast du vielleicht ein Leerzeichen in "Tabelle 10" - also so, wie es hier steht und eigentlich heißt es "Tabelle10" - also ohne Leerzeichen? Ansonsten klick bei der Fehlermeldung mal auf "Debuggen" und sag mir, welche Programmzeile gelb hinterlegt ist.
Gruß Ingolf
Anzeige
AW: Automatisch Formeln in Werte umwandeln mit VBA
28.02.2007 11:11:23
Salim
Hallo Ingolf,
Wenn ich dann ausführen möchte, schreibt er: Index ausserhalb des gültigen Bereichs.
Es gibt keine Debuggen bzw. ich weiss nicht wie ich es hervorrufen kann.
Gruss
Salim
AW: Automatisch Formeln in Werte umwandeln mit VBA
28.02.2007 12:38:00
IngGi
Hallo Salim,
ich konnte den von dir beschriebenen Fehler jetzt reproduzieren, indem ich einen falschen Tabellenblattnamen angegeben habe. Wenn du den richtigen Tabellenblattnamen angegeben hast, ist vielleicht eine andere Arbeitsmappe aktiv? Gib mal zusätzlich noch den Arbeitsmappennamen nach folgendem Muster an:
For Each rng In Workbooks("Dateiname.xls").Sheets("Tabelle1").Range("D8:AY8")
Gruß Ingolf
Anzeige
AW: Automatisch Formeln in Werte umwandeln mit VBA
28.02.2007 14:02:00
Salim
Super klappt jetzt
Danke
AW: Automatisch Formeln in Werte umwandeln mit VBA
28.02.2007 10:32:00
Klaus
Hallo Salim,
dieser Code sollte es tuen.
Gruß,
Klaus M.vdT.

Option Explicit
Sub Umwandeln()
Dim iCol As Integer
Dim AktDat As Date
Application.ScreenUpdating = False 'Bildschirmflackern verhindern
AktDat = Range("C5") 'Datum übergeben
For iCol = 4 To 51   'Spalte D bis AY
If Cells(8, iCol) < AktDat Then                         'Wenn das Datum kleiner ist
Range(Cells(9, iCol), Cells(23, iCol)).Copy           'Dann kopiere die Formeln
Range(Cells(9, iCol), Cells(23, iCol)).PasteSpecial _
Paste:=xlPasteValues                                 'und füge sie mit "Inhalte _
einfügen" wieder ein
End If
Next iCol            'Spalte D bis AY
With Application
.CutCopyMode = False    'Die gestrichelte Linie vom kopieren abschalten
.ScreenUpdating = True  'Bildschirmaktualisierung anschalten
End With
End Sub

Anzeige
Ingolfs Code ist besser :-)
28.02.2007 10:33:53
Klaus
Hallo Salim,
nimm Ingolfs Code der ist eleganter.
Hallo Ingolf,
vielen Dank, man lernt nie aus ^^
Gruß an beide,
Klaus M.vdT.
AW: Ingolfs Code ist besser :-)
28.02.2007 10:46:00
Salim
Hallo Klaus,
Danke für deine Hilfe.
Ich bringe jedoch die Formel vom Ingolf nicht zum laufen.
Ich habe Date durch C5 ersetzt und Tabelle 1 durch Tabelle 10 (entspricht in der VBA Zuordnung den gültigen Tabellenblatt)
Beim Ausführen kommt eine Fehlermeldung: Index ausserhalb des gültigen Bereichs.
Hast du eine Idee?
Gruss und Danke
Salim
Anzeige
AW: Ingolfs Code ist besser :-)
28.02.2007 12:25:00
Klaus
ungetestet:

Sub test()
Dim rng As Range
Dim AktDat as Date
AktDat = Range("C5")
For Each rng In Sheets("NameDerTabelle").Range("D8:AY8")
If rng < AktDat Then
rng.Offset(1, 0).Resize(15 , 1).Copy
rng.Offset(1, 0).Resize(15, 1).P asteSpecial Paste:=xlPasteValues
End If
Next 'rng
End Sub

Was meinst du denn mit "entspricht der VBA Zuordung"? Wenn das Blatt Tabelle10 heisst, nenn es auch sheets("Tabelle10"). Wenn es MiracleEingabeBlatt heisst, dann Sheets("MiracleEingabeBlatt")
Gruß,
Klaus
Anzeige
AW: Ingolfs Code ist besser :-)
28.02.2007 14:03:11
Salim
Hallo,
Danke für die Unterstützung
Jetzt klappts
Gruss
Salim
AW: Ingolfs Code ist besser :-)
28.02.2007 16:52:00
Klaus
.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Automatisch Formeln in Werte umwandeln mit VBA


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und gehe zu dem Arbeitsblatt, in dem Du die Formeln in Werte umwandeln möchtest.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Füge ein neues Modul hinzu: Klicke auf Einfügen > Modul.

  4. Kopiere den folgenden VBA-Code in das neue Modul:

    Sub Umwandeln()
        Dim iCol As Integer
        Dim AktDat As Date
        Application.ScreenUpdating = False ' Bildschirmflackern verhindern
        AktDat = Range("C5") ' Datum übergeben
        For iCol = 4 To 51   ' Spalte D bis AY
            If Cells(8, iCol) < AktDat Then ' Wenn das Datum kleiner ist
                Range(Cells(9, iCol), Cells(23, iCol)).Copy ' Dann kopiere die Formeln
                Range(Cells(9, iCol), Cells(23, iCol)).PasteSpecial _
                Paste:=xlPasteValues ' und füge sie mit "Inhalte einfügen" wieder ein
            End If
        Next iCol ' Spalte D bis AY
        With Application
            .CutCopyMode = False ' Die gestrichelte Linie vom Kopieren abschalten
            .ScreenUpdating = True ' Bildschirmaktualisierung anschalten
        End With
    End Sub
  5. Schließe den VBA-Editor und gehe zurück zu Excel.

  6. Führe das Makro aus: Drücke ALT + F8, wähle Umwandeln und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Index außerhalb des gültigen Bereichs:

    • Überprüfe, ob der Tabellenblattname korrekt ist. Wenn Dein Blatt "Tabelle10" heißt, stelle sicher, dass Du Sheets("Tabelle10") verwendest.
    • Achte darauf, dass die Zellen in der angegebenen Range auch wirklich existieren und keine Leerzeichen im Tabellennamen sind.
  • Das Datum wird nicht korrekt erkannt:

    • Stelle sicher, dass in Zelle C5 ein gültiges Datum eingegeben ist. Du kannst auch stattdessen Date verwenden, um das aktuelle Datum zu nutzen.

Alternative Methoden

Falls Du die Formeln in Werte umwandeln möchtest, ohne VBA zu verwenden, kannst Du die folgenden Methoden nutzen:

  1. Kopieren und Einfügen:

    • Markiere die Zellen mit den Formeln.
    • Kopiere sie (CTRL + C).
    • Rechtsklicke auf die Zielzellen und wähle Inhalte einfügen > Werte.
  2. Verwenden von Tastenkombinationen:

    • Wähle die Zellen mit den Formeln aus.
    • Drücke CTRL + C, dann ALT + E, S, V und ENTER, um die Formeln in Werte umzuwandeln.

Praktische Beispiele

Nehmen wir an, Du hast in Zeile 8 Datumsangaben in den Zellen D8 bis AY8 und möchtest die Formeln in den Zeilen 9 bis 23 umwandeln, wenn das Datum in Zeile 8 in der Vergangenheit liegt. Mit dem obigen VBA-Skript wird dies automatisch durchgeführt.

Beispielcode:

For Each rng In Sheets("DeinTabellenblatt").Range("D8:AY8")
    If rng < AktDat Then
        rng.Offset(1, 0).Resize(15, 1).Copy
        rng.Offset(1, 0).Resize(15, 1).PasteSpecial Paste:=xlPasteValues
    End If
Next

Tipps für Profis

  • Optimierung des Codes: Du kannst den Code optimieren, indem Du nur die Spalten durchläufst, die tatsächlich Werte enthalten, um die Ausführung zu beschleunigen.
  • Fehlermeldungen ausblenden: Um störende Fehlermeldungen während der Ausführung des Makros zu vermeiden, kannst Du On Error Resume Next verwenden.

FAQ: Häufige Fragen

1. Wie kann ich die Excel-Formel automatisch in einen Wert umwandeln, ohne VBA zu verwenden?
Du kannst die Formeln einfach kopieren und dann über Inhalte einfügen die Werte einfügen.

2. Was ist der Unterschied zwischen Paste und PasteSpecial?
Paste fügt die gesamte Formatierung und Formeln ein, während PasteSpecial es ermöglicht, nur die Werte oder spezifische Formate einzufügen.

3. Kann ich den VBA-Code anpassen, um nur bestimmte Formeln umzuwandeln?
Ja, Du kannst Bedingungen in den Code einfügen, um nur bestimmte Formeln zu erkennen und diese in Werte umzuwandeln.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige