【VBA基礎編】セルを操作してみよう(初心者向け)

Excel VBA VBA基礎編


Excel VBA

セルを指定することができたらもうそのセルはあなたの思いのまま!
文字の入力や削除、行や列の削除などなんでもできちゃいます。事務職の私がとても使っていた操作のコードについて解説していきます。

セルの指定については下記の記事をご覧下さい。
→ 【VBA基礎編】操作したいのはなに?~セル編~(初心者向け)


目次

選択セルとアクティブセル

前回セルの指定に関する記事で指定指定指定…と言葉選びに「指定」を用いたのは選択アクティブと使い分けをしたかったからです。

  • 指定…操作したいセルを決めること。
  • 選択…実際にポチッとクリックすること。(複数選択可)
  • アクティブ…実行可能なセル(ひとつだけ)

選択とアクティブの違いを簡単に説明すると、B2~C6までドラッグした場合、この10個が選択セルになります。この状態で文字を入力するとB2にしか文字は入力されません。このB2がアクティブセル(ActiveCell)です。

セルをきちんと指定することができていれば、わざわざSelectメソッドでセルを選択する必要はありません。処理が遅くなる原因にもなります。また、Activateメソッドも私はセルに使ったことはなく、ワークブックやワークシートに対して使うことが多いです。

プロパティとメソッド

セルの指定の記事ではあえてRangeとCellsと表記しましたが、正確にはRangeプロパティとCellsプロパティといいます。これからVBAを勉強する上で、○○プロパティや○○メソッドをたくさん目にすることでしょう。私なりに解釈したふたつの違いはこんな感じ。

  • プロパティ:オブジェクトの情報に関するコード
    例)Valueプロパティはセルに入力されている値(=情報)を取得したり設定したりするために使う。
  • メソッド:オブジェクトの操作に関するコード
    例)Deleteメソッドはセルなどのオブジェクトを消す(=操作)ために使う。

理解できなくてもマクロは動きます(迷言)

.Valueは操作じゃない?

Valueは値を「取得する」ことや「入力(設定)する」ために使うから操作っぽいし…メソッドじゃないの?と思ったアナタ!私も思いました。下記のマクロを実行してみましょう。

Sub test()
	Range("A1").Value
End Sub

2行目のRange("A1").Valueとは、人でいうとセルA1に入力されている値を、これは数字(又は文字)だな~、と目で見て認識しただけの状態です。これではExcelは『その「情報」どうしたらいいかの指示は?』となってしまうのでコンパイルエラーを表示してきます。

【セル.Value = セル.Value】
これは何をしていると思いますか?
変数の宣言で解説した通り「=」は等号ではく代入演算子なので「←」を表しています。
左側で指定したセルの値を、右側で指定したセルの値で上書きする命令文です。ようはコピペ(値貼り付け)を行っています。コピーとペーストそれぞれコードはありますが、値貼り付けをしたいときは、この方法が一番早いのでValueプロパティを使ってみてくださいね。
※Valueプロパティを用いた実行速度についてはこちらの記事で比較しています。

事務職必見!よく使うコード

セルの値を入力(設定)する

Range("A1").Value = 100	'セルA1に100と入力する
Range("A1").Value = "テスト"	'セルA1にテストと入力する

文字列として値を入力したい場合は文字列の前後を「”(ダブルクォーテーション)」で囲みます。「"」はセルに入力されません。

【セルの数式を取得、設定するには】
Formulaプロパティというものがあります。数式を他のセルからコピペしたいときはこちらを使いましょう。Valueプロパティだと数式の答え(戻り値)がコピペされてしまいます。

セルの値や書式を削除する

Range("A1").Clear		'セルA1の書式と値を削除する
Range("A1").ClearFormats	'セルA1の書式を削除する
Range("A1").ClearContents	'セルA1の値を削除する
Range("A1").Value = ""		'セルA1の値を空白にする

Clear/ClearFormats/ClearContentsメソッドを使って削除する方法と、Valueプロパティを使って値を空白にする形で削除する方法があります。

セルの挿入と削除

挿入するには

オブジェクト.Insert (Shift,CopyOrigin)

  • シフトの方向を設定します。
    右方向:xlToRight
    下方向:xlDown
  • セルの書式のコピー元を設定します。
    隣接した左or上のセル:xlFormatFromLeftOrAbove
    隣接した右or下のセル:xlFormatFromRightOrBelow

削除するには

オブジェクト.Delete (Shift)

  • シフトの方向を設定します。
    左方向:xlToLeft
    上方向:xlUp

【設定項目について】
Shift及びCopyOriginは省略可能です。しかし、Shiftにおいてセル範囲を指定する場合、どちらにシフトするかはマクロを実行しないとわからないので必ず設定しましょう。行や列を指定する場合は、シフトの方向が決まっているため省略して問題ありません。

コード例

Sub セルの挿入と削除の練習()
    Range("A7:F7").Delete Shift:=xlUp		'セルA7~F7を削除し上方向にシフト
    Range("B1").EntireColumn.Insert _		'B列に列を挿入し、
	CopyOrigin:=xlFormatFromRightOrBelow	'右隣のセルの書式をコピーする
End Sub

設定項目と設定値は「:=」で繋ぎます。セルの挿入・削除を行うと表内のセル位置がずれるので、セルのずれを見込んでマクロを組みましょう。

※3行目の「␣_(半角スペース+アンダーバー)」は行継続文字といいます。基本的に1ステートメント1行で書くことがルールですが、読みやすくするために途中で改行して書くときに活用します。
可読性UPが目的なので区切りの良いところで使いましょう。


自分の写真
りり
セルA1の指定を範囲や行・列にすることで操作が広がります。

QooQ