11. april 2003 - 10:26Der er
11 kommentarer og 2 løsninger
Kædeformler til værdier
Hej, er der mon nogen der kan hjælpe med at konvertere fra kædeformler i 50 ark til værdier, gerne via en makro, da det jo ellers er lidt besværligt at tage ark efter ark. mvh alj
Kan du fortælle lidt mere? Er der andet end kædeformler - altså almindelige formler, som ikke skal konverteres til værdier?
Er alle 50 ark i samme projektmappe?
I hvilke områder i de enkelte ark står cellerne.'
Denne kode kører samtlige celler (16 millioner) i samtlige ark igennem og udskifter formler til værdier. Men det er selvfølgelig uholdbart på grund af tiden det tager. Du er derfor nødt til at være lidt mere specifik omkring behovet.
Sub FormulaToValue() For Each s In ActiveWorkbook.Sheets For Each c In s.Cells If c.HasFormula = True Then c.Value = c.Value End If Next c Next s End Sub
bak-> Dit forslag er ligesom janvogts (flemmings) forslag bedre end mit fordi det kun medtager usedrange. men kan stadig være ret tidskrævende hvis usedrange er stort.
I de ekstreme tilfælde vil denne her være meget hurtigere Sub test() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets ws.Cells.Copy ws.Cells.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode=False Next End Sub
Og her har du så en, der er bedst ved begrænsede områder i hvert ark (ens områder). Til gengæld skulle den så vidt jeg lige kan se kun erstatte formler, der indeholder referencer til andre projektmapper, mens formler der ikke gør det lades stå uændrede:
Sub FormulaToValue() For Each s In ActiveWorkbook.Sheets For Each c In s.Range("a1:a3").Cells a = c.Formula If c.HasFormula = True Then If Mid(a, 2, 1) = "'" Then c.Value = c.Value End If End If Next c Next s End Sub
Måske har vi bare misforstået spørgsmålet. Denne makro erstatter alle formler med links/kæder til eksterne regneark/projektmapper med værdierne.
Sub ErstatKæder() Dim c As Range Dim Firstaddress As String Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets With ws.UsedRange Set c = .Find("xls", LookIn:=xlFormulas) If Not c Is Nothing Then Firstaddress = c.Address Do c.Value = c.Value Set c = .FindNext(c) Loop While Not c Is Nothing ' And c.Address <> Firstaddress End If End With Next End Sub
Tak for point, men hvad med bak, som har bidraget rigeligt til debatten og løsningen ?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.