【Excel VBA入門】基本的なセルの操作方法をまとめて解説

操作編

マクロを作成するうえでセルの操作方法は必須の知識です。

セルの参照、削除、挿入などの方法をはじめとする基本的なセル操作についてご紹介します。

スポンサーリンク

セルの参照

マクロでよくつかうセルの参照方法についてご説明をします。

マクロの作成では、まずは目的のセルを参照してからそれに対して動作を加えていく流れになります。
とても大切な内容ですので、実際に操作をしながら少しずつでも身に付けていきましょう。

セルを参照する

まずはもっとも基本的なコードです。
すでにご存じの内容かと思いますが、あらためて確認をしておきましょう。

「セルA1」を選択したいとき

「Range」をつかった場合

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Range("A1").Select
Range("A1").Select
    Range("A1").Select

こちらはおなじみのコードかと思います。
セル名を指定する方法です。

「Cells」をつかった場合

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Cells(1,1).Select
Cells(1,1).Select
    Cells(1,1).Select

こちらは座標をつかってセルを指定する方法です。
ちなみに「Cells(行番号、列番号)」で表記されています。

こちらの方がコードの柔軟性がたかいので、もし迷われるのであればわたしはこちらの使用をオススメします。「変数」をつかった数の代入がしやすいのです。

セルの範囲を参照する

こちらは、セル単体ではなく範囲指定をしたい場合です。

「セルA1からセルC3」を範囲選択したいとき

「Range」をつかった場合

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Range("A1:C3").Select
Range("A1:C3").Select
    Range("A1:C3").Select

半角記号の「”(ダブルクォーテーション)」と「:(コロン)」をつかって範囲を指定します。

「Cells」をつかった場合

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Range(Cells(1, 1), Cells(3, 3)).Select
Range(Cells(1, 1), Cells(3, 3)).Select
    Range(Cells(1, 1), Cells(3, 3)).Select 

こちらも「Range」を使いますが、カッコ内で「Cells」をつかって座標指定をします。

「Range(”A1”)」と「Cells(1,1)」はおなじセルを指します。
同様に「Range(”C3”)」と「Cells(3,3)」もおなじセルを指しています。

行・列を参照する

セル単体ではなく行や列全体を指定したい場合はこのような方法をつかいます。

行・列を選択する場合

行の指定

「1行目」を選択したいとき

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Rows(1).Select
Rows(1).Select
    Rows(1).Select

「行」をあらわす「Rows」をつかいます。
カッコ内には数字をいれます。
例では「1」で「1行目」を指定しています。

「Range」で「数字だけ」をつかえば「行」を取得することもできます。
こちらは”複数行”の取得にも対応しています。

「1行目」と「3~5行目」を選択したいとき

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Range("1:1,3:5").Select
Range("1:1,3:5").Select
    Range("1:1,3:5").Select

列の指定

「1列目」を選択したいとき

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Columns(1).Select
Columns(1).Select
    Columns(1).Select

「列」をあらわす「Columns」をつかいます。
カッコ内には数字をいれます。
例では「1」で「1列目」を指定しています。

「Range」で「英字だけ」をつかえば「列」を取得することもできます。
こちらは”複数列”の取得にも対応しています。

「A列」と「C~D列」を選択したいとき

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Range("A:A, C:D").Select
Range("A:A, C:D").Select
    Range("A:A, C:D").Select

参照セルから行・列を指定する場合

「セルB2」から行を選択したいとき

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Cells(2, 2).EntireRow.Select
Cells(2, 2).EntireRow.Select
    Cells(2, 2).EntireRow.Select

「EntireRow」で「行全体」を指定します。
例では「セルB2」の行、つまり「2行目」を取得します。

「セルB2」から列を選択したいとき

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Cells(2, 2).EntireColumn.Select
Cells(2, 2).EntireColumn.Select
    Cells(2, 2).EntireColumn.Select

「EntireColumn」で「列全体」を指定します。
例では「セルB2」の列、つまり「2列目」を取得します。

近くのセルを参照する|Offset

指定したセルを起点にしてセルを参照することができます。

「セルB2」の「3つ下のセル」を取得したいとき

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Range("B2").Offset(3, 0).Select
Range("B2").Offset(3, 0).Select
    Range("B2").Offset(3, 0).Select

こちらでは「セルB5」が取得されます。

Offset(行番号,列番号)」をつかって基準セルからずらす調整をします。
引数には「プラス」だけでなく「マイナス」もつかいます。

行番号列番号
プラス下に進む右に進む
マイナス上に進む左に進む

たとえば、「セルB2」を起点にした「Offset」はこのようになります。

Offset(行番号,列番号)」の引数と取得セル一覧

行番号列番号取得するセル
10B3
01C2
11C3
-10B1
0-1A2
-1-1A1

セルの削除と挿入

セルを削除、挿入する際の方法をご紹介します。

「セルそのもの」を操作することによって行ズレや列ズレが発生します。
予想外の動作にならないようにあらかじめ理解をしておきましょう。

セルを削除する

手入力でセルを削除する場合は「Delete」か「BackSpace」キーを使いますよね。

VBAではセルの削除にもおおきく分けると2種類あります。
混同することがないように注意しておきましょう。

メソッド名内容
Clearセルの入力値を消す
Deleteセル自体を消す

こちらの表をつかって具体例で確認をしましょう。

「Clear」をつかった場合

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Sub test_clear()
Range("A1").Clear
End Sub
Sub test_clear() Range("A1").Clear End Sub
Sub test_clear()
    Range("A1").Clear
End Sub

結果はこちら。

こちらは予想通りの結果かと思います。

「Delete」をつかった場合

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Sub test_delete()
Range("A1").Delete
End Sub
Sub test_delete() Range("A1").Delete End Sub
Sub test_delete()
    Range("A1").Delete
End Sub

結果はこちら。

こちらは予想外の結果ではないでしょうか。
「セルA1」ではなく「セルA3」の値が消えています。

これは「セルA1」そのものを削除したため「セルA1」より下にあったセルが上に移動しています。
そのため「セルA3」が消えたような結果になりました。

既定値ではこのような動作をしますが、これを「xlShift~」をつかって設定を変えることができます。

引数内容
xlShiftToLeft左方向にシフト
xlShiftUp上方向にシフト

たとえば、このように設定をします。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Sub test_delete_shift()
Range("A1").Delete Shift:=xlShiftToLeft
End Sub
Sub test_delete_shift() Range("A1").Delete Shift:=xlShiftToLeft End Sub
Sub test_delete_shift()
    Range("A1").Delete Shift:=xlShiftToLeft
End Sub

結果はこちら。

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

セルの範囲指定に対する削除の際「xlShift~」を省略した場合、自動判定によって挿入方向がきまります。
列数が行数以上の場合は「上方向にシフト」、列数が行数より少ない場合は「左方向にシフト」します。

判定ルールはありますが、誤作動を防ぐためにもシフト方向は指定することをオススメします。

セルを挿入する

セルを挿入するときも「Delete」と同じ考え方をします。
「xlShift~」をつかって設定します。

引数内容
xlShiftDown下方向にシフト
xlShiftToRight右方向にシフト

今回もこちらを操作してみましょう。

コードはこちら。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Sub test_insert()
Range("A1").Insert
End Sub
Sub test_insert() Range("A1").Insert End Sub
Sub test_insert()
    Range("A1").Insert
End Sub

結果はこちら。

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

セルの範囲指定に対する挿入の際「xlShift~」を省略した場合、自動判定によって挿入方向がきまります。
行数が列数以上の場合は「下方向にシフト」、列数が行数より少ない場合は「右方向にシフト」します。

こちらも削除とおなじく判定ルールはありますが、誤作動を防ぐためにもシフト方向は指定することをオススメします。

 

つづいて「xlShiftDown」をつかいます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Sub test_insert_down()
Range("A1").Insert shift:=xlShiftDown
End Sub
Sub test_insert_down() Range("A1").Insert shift:=xlShiftDown End Sub
Sub test_insert_down()
    Range("A1").Insert shift:=xlShiftDown
End Sub

結果はこちら。

先ほどと同じ結果になりました。
セルが「下方向にシフト」しています。

さいごに「xlShiftToRight」をつかいます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Sub test_insert_right()
Range("A1").Insert shift:=xlShiftToRight
End Sub
Sub test_insert_right() Range("A1").Insert shift:=xlShiftToRight End Sub
Sub test_insert_right()
    Range("A1").Insert shift:=xlShiftToRight
End Sub

結果はこちら。

セルが「右方向にシフト」していることが確認できます。

セルの設定

よく使われるセルの設定方法についてご紹介をします。

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

書式設定

赤枠内で設定ができる内容です。

  • 太字にする… オブジェクト名.Bold
  • 斜体にする… オブジェクト名.Itlic
  • 下線をひく… オブジェクト名.UnderLine

フォントとサイズ

おなじように、赤枠内で設定ができる内容です。

  • フォントを変える…オブジェクト名.Font.Name = ”「フォント名」”
  • サイズを変える… オブジェクト名.Font.Size = 「サイズ数」

フォント名は、エクセルの選択タブの中からあらかじめ決めておいてください。
あとはそのフォント名を「””(ダブルクォーテーション)」のなかで指定するだけです。

たとえば、「セルA1」のフォントを「メイリオ」にするときのコードはこちらです。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Sub test()
Range("A1").Font.Name = "メイリオ"
End Sub
Sub test() Range("A1").Font.Name = "メイリオ" End Sub
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」を結合するコードはこちらです。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Sub test()
Range("A1:C1").MergeCells = True
End Sub
Sub test() Range("A1:C1").MergeCells = True End Sub
Sub test()
    Range("A1:C1").MergeCells = True
End Sub

実行結果はこちらです。

行列の幅調整

行幅の調整

行幅を調整したいときのコードをご紹介します。
こちらではもっともよく使うと思われる「自動調整」の方法をご説明します。

  • 行幅を調整…オブジェクト名.EntireRow.AutoFit
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Cells.EntireRow.AutoFit
Cells.EntireRow.AutoFit
    Cells.EntireRow.AutoFit

こちらが実行結果です。
「セル全体を対象」として行幅の調整をしていますのでワークシート全体に適用されます。

列幅の調整

列幅を調整したいときのコードをご紹介します。
こちらではもっともよく使うと思われる「自動調整」の方法をご説明します。

  • 列幅を調整…オブジェクト名.EntireColumn.AutoFit
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Cells.EntireColumn.AutoFit
Cells.EntireColumn.AutoFit
    Cells.EntireColumn.AutoFit

こちらが実行結果です。
「セル全体を対象」として列幅の調整をしていますのでワークシート全体に適用されます。

セルの最終行を取得

こちらはとてもよく利用しています。
マクロで操作したい表の形が一定でないときに重宝する書き方です。

セルの最終行を選択したいとき

最終行の取得にあたってEndプロパティをつかいます
使用する引数はこちらです。

プロパティ名引数内容
EndxlUp上方向の終端
EndxlDown下方向の終端

指定セルから選択する場合

このようなリストがあった場合の最下行の取得コードはこちらです。

「セルA1」の列を基準にしています。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Sub last_row1()
Range("A1").End(xlDown).Select
End Sub
Sub last_row1() Range("A1").End(xlDown).Select End Sub
Sub last_row1()
    Range("A1").End(xlDown).Select
End Sub

こちらが実行結果です。
「セルA6」が選択されています。

最下行から選択する場合

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

さきほどの指定セルから取得する場合と比較してみましょう。

おなじコードを実行したところ、「セルA3」が選択されてしまいました。

これを回避する方法がこちらです。

  1. セルの一番下の行を指定する(最大行の指定)
  2. そこから上に進んで最初にデータが入っていたセルを終端とする
  3. 終端情報をもとにセルを選択する

具体的には「変数」をつかってコードを記述します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Sub last_row2()
Dim last_row As Long
last_row = Cells(Rows.Count, 1).End(xlUp).Row
Cells(last_row, 1).Select
End Sub
Sub last_row2() Dim last_row As Long last_row = Cells(Rows.Count, 1).End(xlUp).Row Cells(last_row, 1).Select End Sub
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プロパティをつかいます
使用する引数はこちらです。

プロパティ名引数内容
EndxlToRight右方向の終端
EndxlToLeft左方向の終端

こちらの「最終列」を選択しましょう。
例のごとく欠損列があります。

こちらも「最終行」の取得とおなじ考え方です。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Sub last_column()
Dim last_column As Long
last_column = Cells(1, Columns.Count).End(xlToLeft).Column
Cells(1, last_column).Select
End Sub
Sub last_column() Dim last_column As Long last_column = Cells(1, Columns.Count).End(xlToLeft).Column Cells(1, last_column).Select End Sub
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」が選択されました。

まとめ

基本的なセル操作についてご説明をしました。

これらはとてもよく使うのもばかりですので、少しずつコードを書きながらセルの動かし方に慣れていきましょう。

ちなみにわたしは実際にサンプルコードをたくさん書いてセルを動かす練習をよくしていました。

タイトルとURLをコピーしました