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

Alle Formeln durch Werte ersetzen

Alle Formeln durch Werte ersetzen
24.02.2015 10:42:00
Tim
Hallo
Ich möchte alle Formeln via Makro durch Werte substituieren.
Dafür verwende ich:

Sub All_Cells_In_All_WorkSheets_1()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
sh.Select
With sh.UsedRange
.Cells.Copy
.Cells.PasteSpecial xlPasteValues
.Cells(1).Select
End With
Application.CutCopyMode = False
Next sh
End Sub

Das gibt mir aber eine Fehlermeldung das die Bereiche (ausgeschnitten und einzufügen) unterschiedliche Formen und Grösse haben sind.
Ich blende Spalten aus und verwende Filter in dem Sheet. Ich vermute dass es daran liegt.
Gibt es eine alternative Möglichkeit?
Grüsse

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alle Formeln durch Werte ersetzen
24.02.2015 10:49:42
Daniel
Hi
das Problem ist, dass Excel ausgeblendete Bereiche nicht bearbeitet und kopiert
beim Einfügen versucht es dann, diese Lücken aufzufüllen und die folgenen einzufügenden Zellen nachzurücken.
Dh wenn du Zeile 2 ausblendest und Zeile 1-3 kopierst, werden die Zeilen 1 und 3 kopiert und in die Zellen 1-2 eingegfügt.
Dieses Aufrücken funktioniert nicht, wenn Zeilen und Spalten ausgeblendet sind, weil Excel dann nicht weiss, ob es nach links oder nach oben aufrücken soll.
ausserdem ist das Einfügen von Werten in gefiltere Bereiche kritisch.
Wenn alle Zellen bearbeitet werden sollen, ist es am sinnvollsten, wenn du alles einblendest.
Wenn nur die sichtbaren Zellen bearbeitet werden sollen, müsstest du eine Schleife über alle Areas des sichtbaren Bereichs (eine Area sind alle Zellen, die einen lückenlosen, rechteckigen Zellblock bilden) bilden und jede Area einzeln kopieren und als Wert einfügen.
deswegen, was willst du tun:
a) alle Zellen bearbeiten
b) nur die sichtbaren Zellen bearbeiten.
Gruß Daniel

Anzeige
langsame Methode
24.02.2015 11:30:47
Klaus
Hi,
Zelle für Zelle wird funktionieren, ist aber bestimmt sau langsam.
Sub Test()
Dim r As Range
For Each r In ActiveSheet.UsedRange
r.Value = r.Value  'macht das gleiche wie copy - pastevalues
Next r
End Sub
Grüße,
Klaus M.vdT.

AW: langsame Methode
24.02.2015 14:05:44
Tim
Danke für die Antworten!
Wenn man Screenupdate und FormelCalculation ausschaltet läuft die Schleife durch alle Zellen noch in einem tragbaren ausmass durch (zumindest in meinem fall).
grüsse

AW: langsame Methode
24.02.2015 16:30:48
Klaus
Tim,
die Variante von Daniel:
dim Bereich as Range
For each Bereich in Cells.SpecialCells(xlcelltypeFormulas).Areas
Bereich.Formula = Bereich.Value
Next

sollte etwas schneller laufen.
Meine Schleife fasst alle Zellen an, die Version von Daniel nur jene Zellen in denen Formeln stehen.
Grüße,
Klaus M.vdT.

Anzeige
AW: anmerkung
24.02.2015 14:16:00
Daniel
Klaus schrieb:
"r.Value = r.Value 'macht das gleiche wie copy - pastevalues"
stimmt fast.
Es gibt einen Unterschied.
Wenn beispielsweise das Formelergebnis der kopierten Zelle ein Text ist, der wie eine Zahl aussieht (="123"), dann bleibt bei Copy/PasteSpecial dieser Wert ein Text.
Bei .Value = .Value wird jedoch der Text in eine Zahl gewandelt.
Oder wenn das Formelergbnis der Leerstring ist (""), dann enthält nach Copy/PasteSpecial diese Zelle weiterhin den Text "", während nach .Value = .Value diese Zelle dann tatsächlich leer ist.
Gruß Daniel

AW: geht das....
24.02.2015 12:02:43
hary
Moin
...nicht besser mit SpecialCells?
Dim bereich As Range
Set bereich = Cells.SpecialCells(xlCellTypeFormulas)
bereich.Value = bereich.Value

gruss hary

Anzeige
AW: geht das....
24.02.2015 12:12:06
Daniel
HI
nicht unbedingt.
.Formula = .value kann nur rechteckige, lückenlos zusammenhängende Zellbereiche verarbeiten.
Wenn, dann wieder mit Schleife über die Areas des Gesamtbereichs:
dim Bereich as Range
For each Bereich in Cells.SpecialCells(xlcelltypeFormulas).Areas
Bereich.Formula = Bereich.Value
Next
Gruß Daniel

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige