SpecialCells

Tämän artikkelin esimerkit tiedostossa autofilter.xlsm

Range.SpecialCells

Range.SpecialCells-menetelmä vastaa Excelin Home (Aloitus) -välilehden  Find – Go To Special (Etsi – Siirry määräten) -toimintoa. Jollei toiminto ole tuttu, niin kannattaa tutustua. Toiminnon käyttöä VBA:n puolella voit opetella nauhoittamalla toiminnon ensin Excelin puolella.

Tyhjien solujen korvaaminen

Seuraava ohjelma korvaa aktiivisen solun ympärillä olevan aineiston tyhjät solut x:llä.

Sub ReplaceEmpty()
    On Error Resume Next
    ActiveCell.CurrentRegion.SpecialCells(xlCellTypeBlanks). _
        Value = "x"
    On Error GoTo 0
End Sub

SpecialCells-menetelmän argumentilla xlCellTypeBlanks löydetään nimen omaan tyhjät solut.

On Error Resume next on tarpeen. Muutoin ohjelma pysähtyy virheeseen, jos tyhjiä soluja ei löydy.

Kaavat arvoiksi

Kaavoilla laskettujen tulosten muuttaminen pelkiksi arvoiksi onnistuu seuraavalla ohjelmalla.

Sub FormulaAsValues1()
    On Error Resume Next
    ActiveCell.CurrentRegion.SpecialCells _
        (xlCellTypeFormulas).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    On Error GoTo 0
End Sub

SpecialCells-menetelmän argumentilla xlCellTypeFormulas löydetään nimen omaan tyhjät solut.

Ohjelma heikko kohta on PasteSpecial-menetelmä. Se ei toimi toivotulla tavalla, jos kaavoja sisältävät solut eivät ole vierekkäisissä ja allekkaisissa soluissa. Seuraava ohjelma on parempi, koska se toimii vaikka Select-menetelmän valitsema alue olisi monivalinta.

Sub FormulasAsValues2()
Dim Cell As Range
    On Error Resume Next
    ActiveCell.CurrentRegion.SpecialCells _
        (xlCellTypeFormulas).Select
    For Each Cell In Selection
        Cell.Value = Cell.Value
    Next Cell
    On Error GoTo 0
End Sub

Eri tyyppisten solujen tunnistaminen

Seuraava ohjelma värjää merkkijonotiedon, numerotiedon, kaavat ja tyhjät omilla taustaväreillään

Sub ColorCells()
    On Error Resume Next
    With ActiveCell.CurrentRegion
        .SpecialCells(xlCellTypeConstants, xlNumbers). _
            Interior.Color = RGB(197, 217, 241)
        .SpecialCells(xlCellTypeConstants, xlTextValues). _
            Interior.Color = RGB(242, 220, 219)
        .SpecialCells(xlCellTypeBlanks). _
            Interior.Color = RGB(242, 242, 242)
        .SpecialCells(xlCellTypeFormulas). _
            Interior.Color = RGB(235, 241, 222)
    End With
    On Error GoTo 0
End Sub

Argumentilla xlCellTypeConstants poimitaan solut, jotka eivät sisällä laskentakaavaa. Toisella argumentilla tarkennetaan, onko kyseessä numerotieto xlNumbers vai merkkijonotieto xlTextValues.

Lisätietoa

Lisätietoa Range.SpecialCells -menetelmän argumenteista Range.SpecialCells -menetelmän ohjetoiminnosta. 

Tämän artikkelin esimerkit tiedostossa autofilter.xlsm

Mainokset