Först publicerad: 2009-05-19

SpecialCells – Varianter på Klistra Värde i Excel VBA

go-to-specialI 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