SpecialCells – Varianter på Klistra Värde i Excel VBA
I det dagliga Excelarbetet vill man ofta göra om cellers formler till värden. Förutom den mest rättframma metoden
PasteSpecial Paste:=xlValues
så finns det ett annat sätt att utföra konverteringen på. Excel erbjuder en objektklass som heter SpecialCells och som vi kan dra nytta av i det här sammanhanget.
SpecialCells – en användbar objektklass i Excel
SpecialCells-klassen når du antingen via endera
- tangent F5
- menyn Home – Find & Select – Go To Special.
Ett litet dialogfönster öppnas som inte medger mer än inmatning av en cellreferens.
Men om vi trycker på knappen “Special” så öppnas ett riktigt intressant fönster, nämligen “SpecialCells“.
För att kort beskriva den här funktionen så räcker det med att kryssa i t ex “Empty cells” och trycka Ok. Excel kommer då att markera alla tomma celler på hela kalkylbladet, eller inom det markerade området under förutsätning att flera celler är markerade.
Om vi istället anger “Cells with Formulas” så kommer samtliga celler innehållande formler att markeras. Det är den här varianten av SpecialCells som vi drar nytta av i det här VBA-tipset.
VBA-kod för att konvertera SpecialCells till konstanter
SpecialCells-funktionerna kan du alltså använda dig av direkt från kalkylbladet. Men du kommer givetvis åt funktionera via VBA också. Nedan följer ett par exempel på applicering av SpecialCells i Excel för att konvertera till värden.
1. Göra om samtliga kalkylbladets formler till värden
Sub FormlerSheetTillKonstanter() With ActiveSheet.UsedRange.SpecialCells(xlFormulas) .Value = .Value End With End Sub |
2. Konvertera markerade cellers formler till värden
I det här exemplet utgår vi från de kalkylbladsceller som för ögonblicket är markerade. Observera att även celler som redan innehåller konstanter kan ingå i det markerade området.
Sub FormlerRangeTillKonstanter() With Selection.SpecialCells(xlFormulas) .Value = .Value End With End Sub |
3. Göra om samtliga celler i hela Excelboken till värden
För att konvertera samtliga formler i hela Excelboken till värden så måste vi lägga till en funktion som loppar igenom samtliga i boken ingående kalkylblad.
Sub FormlerBokTillKonstanter() intlExcelFlikar = ActiveWorkbook.Worksheets.Count For i = 1 To intlExcelFlikar Worksheets(i).Activate With ActiveSheet.UsedRange.SpecialCells(xlFormulas) .Value = .Value End With Next i End Sub |
Andra VBA-tillämpningar på SpecialCells
Som tidigare nämnts så är SpecialCells-objektet mycket användbar både vid direkt arbete i kalkylbladet som i makrosammanhang. I exemplen ovan har vi använt oss av xlFormulas men det finns flera andra praktiska varianter som du kan ha i bakhuvudet.
Personligen har jag vid ett flertal tillfällen funnit SpecialCells(xlCellTypeComments) väldigt värdefull då jag velat rensa stora Excelböcker från cellkommentarer med ett enkelt svep.
- SpecialCells(xlCellTypeBlanks) → Tomma celler
- SpecialCells(xlCellTypeAllFormatConditions) → Celler med villkorade format (Conditional formats)
- SpecialCells(xlCellTypeComments) → Celler med cellkommentarer