マクロを作成するうえでセルの操作方法は必須の知識です。
セルの参照、削除、挿入などの方法をはじめとする基本的なセル操作についてご紹介します。
セルの参照
マクロでよくつかうセルの参照方法についてご説明をします。
マクロの作成では、まずは目的のセルを参照してからそれに対して動作を加えていく流れになります。
とても大切な内容ですので、実際に操作をしながら少しずつでも身に付けていきましょう。
セルを参照する
まずはもっとも基本的なコードです。
すでにご存じの内容かと思いますが、あらためて確認をしておきましょう。
「セルA1」を選択したいとき
「Range」をつかった場合
Range("A1").Select
こちらはおなじみのコードかと思います。
セル名を指定する方法です。
「Cells」をつかった場合
Cells(1,1).Select
こちらは座標をつかってセルを指定する方法です。
ちなみに「Cells(行番号、列番号)」で表記されています。

こちらの方がコードの柔軟性がたかいので、もし迷われるのであればわたしはこちらの使用をオススメします。「変数」をつかった数の代入がしやすいのです。
セルの範囲を参照する
こちらは、セル単体ではなく範囲指定をしたい場合です。
「セルA1からセルC3」を範囲選択したいとき
「Range」をつかった場合
Range("A1:C3").Select
半角記号の「”(ダブルクォーテーション)」と「:(コロン)」をつかって範囲を指定します。
「Cells」をつかった場合
Range(Cells(1, 1), Cells(3, 3)).Select
こちらも「Range」を使いますが、カッコ内で「Cells」をつかって座標指定をします。
「Range(”A1”)」と「Cells(1,1)」はおなじセルを指します。
同様に「Range(”C3”)」と「Cells(3,3)」もおなじセルを指しています。
行・列を参照する
セル単体ではなく行や列全体を指定したい場合はこのような方法をつかいます。
行・列を選択する場合
行の指定
「1行目」を選択したいとき
Rows(1).Select
「行」をあらわす「Rows」をつかいます。
カッコ内には数字をいれます。
例では「1」で「1行目」を指定しています。
「Range」で「数字だけ」をつかえば「行」を取得することもできます。
こちらは”複数行”の取得にも対応しています。
「1行目」と「3~5行目」を選択したいとき
Range("1:1,3:5").Select
列の指定
「1列目」を選択したいとき
Columns(1).Select
「列」をあらわす「Columns」をつかいます。
カッコ内には数字をいれます。
例では「1」で「1列目」を指定しています。
「Range」で「英字だけ」をつかえば「列」を取得することもできます。
こちらは”複数列”の取得にも対応しています。
「A列」と「C~D列」を選択したいとき
Range("A:A, C:D").Select
参照セルから行・列を指定する場合
「セルB2」から行を選択したいとき
Cells(2, 2).EntireRow.Select
「EntireRow」で「行全体」を指定します。
例では「セルB2」の行、つまり「2行目」を取得します。
「セルB2」から列を選択したいとき
Cells(2, 2).EntireColumn.Select
「EntireColumn」で「列全体」を指定します。
例では「セルB2」の列、つまり「2列目」を取得します。
近くのセルを参照する|Offset
指定したセルを起点にしてセルを参照することができます。
「セルB2」の「3つ下のセル」を取得したいとき
Range("B2").Offset(3, 0).Select
こちらでは「セルB5」が取得されます。
「Offset(行番号,列番号)」をつかって基準セルからずらす調整をします。
引数には「プラス」だけでなく「マイナス」もつかいます。
行番号 | 列番号 | |
プラス | 下に進む | 右に進む |
マイナス | 上に進む | 左に進む |
たとえば、「セルB2」を起点にした「Offset」はこのようになります。

「Offset(行番号,列番号)」の引数と取得セル一覧
行番号 | 列番号 | 取得するセル |
1 | 0 | B3 |
0 | 1 | C2 |
1 | 1 | C3 |
-1 | 0 | B1 |
0 | -1 | A2 |
-1 | -1 | A1 |
セルの削除と挿入
セルを削除、挿入する際の方法をご紹介します。
「セルそのもの」を操作することによって行ズレや列ズレが発生します。
予想外の動作にならないようにあらかじめ理解をしておきましょう。
セルを削除する
手入力でセルを削除する場合は「Delete」か「BackSpace」キーを使いますよね。
VBAではセルの削除にもおおきく分けると2種類あります。
混同することがないように注意しておきましょう。
メソッド名 | 内容 |
Clear | セルの入力値を消す |
Delete | セル自体を消す |
こちらの表をつかって具体例で確認をしましょう。

「Clear」をつかった場合
Sub test_clear() Range("A1").Clear End Sub
結果はこちら。

こちらは予想通りの結果かと思います。
「Delete」をつかった場合
Sub test_delete() Range("A1").Delete End Sub
結果はこちら。

こちらは予想外の結果ではないでしょうか。
「セルA1」ではなく「セルA3」の値が消えています。
これは「セルA1」そのものを削除したため「セルA1」より下にあったセルが上に移動しています。
そのため「セルA3」が消えたような結果になりました。
既定値ではこのような動作をしますが、これを「xlShift~」をつかって設定を変えることができます。
引数 | 内容 |
xlShiftToLeft | 左方向にシフト |
xlShiftUp | 上方向にシフト |
たとえば、このように設定をします。
Sub test_delete_shift() Range("A1").Delete Shift:=xlShiftToLeft End Sub
結果はこちら。

「左方向にシフト」を指定しているため、先ほどとはちがった結果になりましたね。

判定ルールはありますが、誤作動を防ぐためにもシフト方向は指定することをオススメします。
セルを挿入する
セルを挿入するときも「Delete」と同じ考え方をします。
「xlShift~」をつかって設定します。
引数 | 内容 |
xlShiftDown | 下方向にシフト |
xlShiftToRight | 右方向にシフト |
今回もこちらを操作してみましょう。

コードはこちら。
Sub test_insert() Range("A1").Insert End Sub
結果はこちら。

「下方向にシフト」しました。

こちらも削除とおなじく判定ルールはありますが、誤作動を防ぐためにもシフト方向は指定することをオススメします。
つづいて「xlShiftDown」をつかいます。
Sub test_insert_down() Range("A1").Insert shift:=xlShiftDown End Sub
結果はこちら。

先ほどと同じ結果になりました。
セルが「下方向にシフト」しています。
さいごに「xlShiftToRight」をつかいます。
Sub test_insert_right() Range("A1").Insert shift:=xlShiftToRight End Sub
結果はこちら。

セルが「右方向にシフト」していることが確認できます。
セルの設定
よく使われるセルの設定方法についてご紹介をします。

次に紹介する方法で直接コードを記述してもいいのですが、「マクロの記録」をつかって部分的にコードを移植する方法もあります!こちらの方がお手軽に設定できることが多いのでオススメします。
書式設定
赤枠内で設定ができる内容です。

- 太字にする… オブジェクト名.Bold
- 斜体にする… オブジェクト名.Itlic
- 下線をひく… オブジェクト名.UnderLine
フォントとサイズ
おなじように、赤枠内で設定ができる内容です。

- フォントを変える…オブジェクト名.Font.Name = ”「フォント名」”
- サイズを変える… オブジェクト名.Font.Size = 「サイズ数」
フォント名は、エクセルの選択タブの中からあらかじめ決めておいてください。
あとはそのフォント名を「””(ダブルクォーテーション)」のなかで指定するだけです。
たとえば、「セルA1」のフォントを「メイリオ」にするときのコードはこちらです。
Sub test() Range("A1").Font.Name = "メイリオ" End Sub
色の設定
こちらも赤枠内で設定ができる内容です。

- 文字色をかえる… オブジェクト名.Font.Color = RGB(数,数,数)
- セル色をかえる… オブジェクト名.Interior.Color = RGB(数,数,数)
※数は「0~255」を指定します。
罫線の設定
こちらも赤枠内で設定ができる内容です。

- 罫線を引く…オブジェクト名.Borders(罫線の場所).LineStyle =(罫線の種類)
罫線の場所
値 | 内容 |
なし | 格子 |
xlEdgeTop | 上線 |
xlEdgeBottom | 下線 |
xlEdgeLeft | 左線 |
xlEdgeRight | 右線 |
xlInsideHorizontal | 選択範囲の内側(横線) |
xlInsideVertical | 選択範囲の内側(縦線) |
xlDiagonalDown | 左上から右下への斜線 |
xlDiagonalUp | 左下から右上への斜線 |
罫線の種類
値 | 内容 |
xlContinuous | 実線 |
xlDash | 破線 |
xlDot | 点線 |
xlDouble | 二本線 |
xlDashDot | 一点鎖線 |
xlDashDotDot | 二点鎖線 |
xlSlantDashDot | 斜破線 |
xlLineStyleNone | 線なし |
結合
こちらも赤枠内で設定ができる内容です。

- セルを結合する…オブジェクト名.MergeCells=「True」or「False」
セルを結合するときはセルの範囲を指定して「MergeCells」メソッドをつかいます。
MergeCells =「True」でセルを結合し、MergeCells =「False」で結合を解除します。
たとえば、「セルA1」から「セルC1」を結合するコードはこちらです。
Sub test() Range("A1:C1").MergeCells = True End Sub
実行結果はこちらです。

行列の幅調整
行幅の調整
行幅を調整したいときのコードをご紹介します。
こちらではもっともよく使うと思われる「自動調整」の方法をご説明します。
- 行幅を調整…オブジェクト名.EntireRow.AutoFit
Cells.EntireRow.AutoFit
こちらが実行結果です。
「セル全体を対象」として行幅の調整をしていますのでワークシート全体に適用されます。

列幅の調整
列幅を調整したいときのコードをご紹介します。
こちらではもっともよく使うと思われる「自動調整」の方法をご説明します。
- 列幅を調整…オブジェクト名.EntireColumn.AutoFit
Cells.EntireColumn.AutoFit
こちらが実行結果です。
「セル全体を対象」として列幅の調整をしていますのでワークシート全体に適用されます。

セルの最終行を取得
こちらはとてもよく利用しています。
マクロで操作したい表の形が一定でないときに重宝する書き方です。
セルの最終行を選択したいとき
最終行の取得にあたって「End」プロパティをつかいます。
使用する引数はこちらです。
プロパティ名 | 引数 | 内容 |
End | xlUp | 上方向の終端 |
End | xlDown | 下方向の終端 |
指定セルから選択する場合

このようなリストがあった場合の最下行の取得コードはこちらです。
「セルA1」の列を基準にしています。
Sub last_row1() Range("A1").End(xlDown).Select End Sub
こちらが実行結果です。
「セルA6」が選択されています。

最下行から選択する場合
ではこのようなリストがあった場合、どのようにすれば最下行を取得できるのでしょうか。

さきほどの指定セルから取得する場合と比較してみましょう。
おなじコードを実行したところ、「セルA3」が選択されてしまいました。

これを回避する方法がこちらです。
- セルの一番下の行を指定する(最大行の指定)
- そこから上に進んで最初にデータが入っていたセルを終端とする
- 終端情報をもとにセルを選択する
具体的には「変数」をつかってコードを記述します。
Sub last_row2() Dim last_row As Long last_row = Cells(Rows.Count, 1).End(xlUp).Row Cells(last_row, 1).Select End Sub
実行結果はこちらです。
「セルA6」が選択されました。


とてもよく使うテクニックですので、しっかり理解を深めておきましょう。
セルの最終列を取得
セルの最終列を選択したいとき
最終列の取得にも「End」プロパティをつかいます。
使用する引数はこちらです。
プロパティ名 | 引数 | 内容 |
End | xlToRight | 右方向の終端 |
End | xlToLeft | 左方向の終端 |
こちらの「最終列」を選択しましょう。
例のごとく欠損列があります。

こちらも「最終行」の取得とおなじ考え方です。
Sub last_column() Dim last_column As Long last_column = Cells(1, Columns.Count).End(xlToLeft).Column Cells(1, last_column).Select End Sub
実行結果はこちらです。
「セルD1」が選択されました。

まとめ
基本的なセル操作についてご説明をしました。
これらはとてもよく使うのもばかりですので、少しずつコードを書きながらセルの動かし方に慣れていきましょう。
ちなみにわたしは実際にサンプルコードをたくさん書いてセルを動かす練習をよくしていました。