SpecialCells


Metoden SpecialCells returnerar en eller flera celler som matchar en specificerad celltyp eller värde inom ett specificerat cellområde.

Metoden kan vara mycket värdefull att använda sig av i olika sammanhang men för att kunna hantera den på ett önskat sätt måste vi förstå att


Följande celltyper finns att tillgå:

  • xlCellTypeAllFormatConditions - För att hitta alla celler som har villkorsstyrd formatering.
  • xlCellTypeAllValidation - För att hitta alla celler som har datavalidering.
  • xlCellTypeBlanks - För att hitta alla tomma celler i cellområdet.
  • xlCellTypeComments - För att hitta alla celler som har kommenterarer.
  • xlCellTypeConstants - För att hitta alla celler med konstanta värden i sig (tal o text).
  • xlCellTypeFormulas - För att hitta alla celler med formler / funktioner.
  • xlCellTypeLastCell - För att hitta den sista cellen i det använda cellområdet i arbetsbladet. Dock kan den vara vansklig att använda, i synnerhet om det använda cellområdet reduceras och den sist använda cellen ej återställs mha ActiveSheet.UsedRange.
  • xlCellTypeSameFormatConditions - För att hitta alla celler som har samma format som den första cellen i det angivna cellområdet.
  • xlCellTypeSameValidation - För att hitta alla celler som har samma datavalidering som den första cellen i det angivna cellområdet.
  • xlCellTypeVisible - För att hitta alla synliga celler.

 

För celltyperna xlCellTypeFormulas och xlCellTypeConstants kan ytterligare värden specificeras för mha av följande XlSpecialCellsValue:

 

I följande exempel demonstreras hur vi mha SpecialCells och celltypen xlCellTypeConstants kan kopiera endast celler med konstanter från ett blad till ett annat.

Option Explicit  

Sub Kopiera_Endast_Värden()

   '© 2002 Alla rättigheter XL-Dennis

   Dim wbBok As Workbook

   Dim wsBlad1 As Worksheet, wsBlad2 As Worksheet

   Dim rnKalla As Range

 

   Set wbBok = ThisWorkbook

   Set wsBlad1 = wbBok.Worksheets("Blad1")

   Set wsBlad2 = wbBok.Worksheets("Blad2")

 

   On Error GoTo Felhantering  

   With wsBlad1

      Set rnKalla = .Range("A1:A10")

      'Här omdefinieras range-variabeln till att endast omfatta

      'celler med värden i.

      Set rnKalla = rnKalla.SpecialCells(xlCellTypeConstants)

   End With

 

   rnKalla.Copy wsBlad2.Range("A1")

   Exit Sub

 

Felhantering:

   MsgBox "Hittade inga celler som uppfyller villkoret i det angivna cellområdet."

End Sub

 

I nästa exempel demonstreras xlCellTypeFormulas och xlError. Noterbart är att vi här endast identifierar celler vars funktioners/formlers resulterar i felvärden, såsom #Division/0! och #Saknas!

Sub Rakna_Endast_xlErrors()

 '© 2002 Alla rättigheter XL-Dennis

   Dim wbBok As Workbook

   Dim wsBlad1 As Worksheet

   Dim rnKalla As Range

 

   Set wbBok = ThisWorkbook

   Set wsBlad1 = wbBok.Worksheets("Blad1")

 

   With wsBlad1

      Set rnKalla = .Range("A1:A10")

      'Här omdefinieras range-variabeln till att endast omfatta

      'celler vars funktioners / formlers resulterar i felmeddelanden.

      Set rnKalla = rnKalla.SpecialCells(xlCellTypeFormulas, xlErrors)

   End With

 

   MsgBox rnKalla.Cells.Count

 End Sub