見出し画像

【Excelマクロ】現在のシートの小文字を大文字に変換するマクロ【VBA】

すべてのセルに対して編集を行いたいケースは稀に存在する。一般的には行と列のループによって記述するだろうか。

Sub EditCell()
    Dim r As Long
    Dim c As Long
    For r = 1 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
        For c = 1 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
            セルに対する処理
        Next
    Next
End Sub

二重ループが嫌だという場合はFor Each...Next ステートメントによって処理を試みる人もいるかもしれない。

また、パフォーマンスについて懸念する人もいるだろう。
たとえばセルに対する処理が文字列操作であれば、高速化の方法はいくつか存在する。
処理前にセルが空白セルかを判定する方法は、簡単に記述できるが空白セルの割合によっては効果的である。
範囲を二次元配列に代入し、二次元配列に対して文字列操作を行ったあと、二次元配列を範囲に代入する方法は、ステップ数こそ増加するが効果は大きいだろう。Google Apps Script(GAS)の経験がある人はむしろ配列に移して加工する習慣になっているかもしれない。

ただ、今回は、「現在のシートの小文字を大文字に変換する」ということなので、別のアプローチを紹介する。

Sub ToUpper()
    Dim i As Long
    For i = 0 To 25
        ActiveSheet.Cells.Replace Chr(Asc("a") + i), Chr(Asc("A") + i), xlPart
    Next
End Sub

For...Next ステートメントReplace関数によって、すなわち文字コード上で英大文字や英小文字は連続していることを利用してループと置換によって"a"を"A"に、"b"を"B"に……"z"を"Z"に置換している。
Asc関数およびChr関数は文字と文字コードを示す整数を相互に変換する関数であり、詳細はリンク先で確認してほしい。

このように、発想を転換することで、簡素、かつ、(そこまで)低速ではない処理を記述することができると個人的には興奮する。

この記事が気に入ったらサポートをしてみませんか?