エクセルVBA超入門講座(第3回)RangeとCellsの使い方

excel-vba-lecture03 Excelマクロ

前回の講座でVBAの書き方の基礎を解説しました。(詳しくはエクセルVBA超入門講座第2回参照)

その中でセルの簡単な操作方法についてお伝えしました。

今回はセル操作のもっと具体的な方法をお伝えします。

セル操作はマクロを作るうえで大事な超基礎となる必須スキルです。

ぜひ今回の講座でセル操作の基礎を学んで頂けると幸いです。

セルへの文字挿入方法(Valueプロパティ)

天馬先生
天馬先生

今回はセル操作についてもう少し詳しく解説していくよ

たけし
たけし

天馬先生、今日もよろしくお願いします!

天馬先生
天馬先生

まずは前回の復習をしてみましょう。

前回の講座でお伝えした内容を簡単に復習します。(詳しくは第2回講座のセルの操作方法)を参照

セルに値を入れるには以下の手順で行います。

  1. セルを指定
  2. 操作方法を指定
  3. 挿入する文字を指定

cell-operation

このマクロの実行結果は次のようになります。

macro-result

「Value」を使うとセルに指定した文字を入れる事ができます。

②で指定する部分をVBAで「プロパティ」と呼びます。

プロパティとは、セルの属性または動作の状態を示したものです。

セルには文字の色や、文字サイズ、記述されている文字、など様々な情報が含まれています。これらすべての情報がいわゆる「属性」と呼ばれるものです。

上の例ではA1セルの文字入力内容(属性)を「はじめてのVBA操作」という文字列に設定しています。これが「動作の状態」です。

Valueプロパティでは属性を設定する他にも、そのセルの情報を「取得」することが可能です。

急にプロパティだの属性だの言われてもなんだか良くわからない、という方のために第4回の講座でプロパティについて詳しく解説します。

とりあえず今回は、プロパティには「属性」と「動作の状態」2つの特性があるという事をおさえてもらえれば問題ありません。

次にValueプロパティを使ってセルの情報を「取得」する方法を解説します。

他のセルから文字をコピー(取得)する

天馬先生
天馬先生

セルに文字を入れる方法はもう分かったかな?

たけし
たけし

もうその方法はマスターしました!

天馬先生
天馬先生

素晴らしい!

では次に、他のセルから文字をコピーする方法を教えるよ

他のセルから文字をコピーする例を見てみましょう。

マクロ作成前の状態が次のようになっていたとします。

A1セルのみに文字「他のセルに文字をコピーする!」が入っている状態です。

before-copy

これに対して次のようなマクロを作成します。

cell-copy

マクロ実行結果は次のようになります。

after-copy

A1セルの文字がA5セルにコピーされました。

天馬先生
天馬先生

このように、セルへの文字挿入は文字列を直接指定する以外に、他のセルの文字をそのままコピーすることが出来るよ。

VBAの書き方は次のようになります。

Range(“操作対象のセルの位置”).Value = Range(“コピー元のセルの位置”).Value

上の例に当てはめると、以下の記述になります。

Range(“A1”).Value = Range(“A5”).Value

Valueプロパティの「取得」の機能を使った方法です。

たけし
たけし

なるほど!他のセルの文字をそのままコピーすることも出来るんですね!

選択中のセルを操作する(ActiveCell)

Rangeを使えば特定のセルへ文字を入れることが出来ますが、現在選択中のセルに対して操作することも出来ます。

このとき使うのが「ActiveCell」です。

具体的に見ましょう。

先ほどと同じでマクロ前の状態が以下だったとします。

このときA3セルを選択している状態です。

before-copy03

この状態で次のマクロを実行します。

active-copy

結果は次のようになります。

after-copy04

選択していたA3セルに文字がコピーされました。

このように「ActiveCell」を使うと、現在選択中のセルに対して操作が可能です。

VBAの書き方は次のようになります。

ActiveCell.Value = Range(“コピー元のセルの位置”).Value

次のように直接文字を指定しても大丈夫です。

ActiveCell.Value = “現在選択中のセルに文字を入れる!”

天馬先生
天馬先生

今後もっと複雑なマクロを作成するときに「ActiveCell」はよく使うので覚えておきましょう!

ValueプロパティとTextプロパティの違い

天馬先生
天馬先生

文字をコピーするときに、Valueプロパティの他にもう1つのプロパティがあるので紹介します。

他のセルの文字をコピーするときにValueプロパティ(.Value)を使いましたが、Textプロパティを使うことも出来ます。

例を見てみましょう。

text-copy

このマクロを実行すると次のようになります。

after-copy05

たけし
たけし

あれ?Value使ったときと一緒じゃないですか?

天馬先生
天馬先生

たけしくん鋭いね!この2つには次の違いがあるよ。

  1. Valueプロパティは値だけの情報、Textプロパティは書式を含んだ見た目の情報
  2. Valueプロパティは設定も取得も可能、Textプロパティは取得のみ可能
Valueプロパティは値だけの情報、Textプロパティは書式を含んだ見た目の情報

文字だとぱっと見わからないので、数値を使って比較しましょう。

マクロ実行前の状態が以下だったとします。

before-copy04

A1セルの書式は「数値(3桁でカンマ区切り)」になっています。

before-copy06

次のマクロを実行します。

cell-copy02

結果は次のようになります。

after-copy06

「Value」を指定したA3列は値の情報だけがコピーされました。

「Text」を使ったA5列では書式(3桁カンマ区切り)もコピーされました。

このような違いがあります。

ちなみに、A5の書式設定を見ると「通貨」に設定されています。

Value-format

「あれ?Valueプロパティ使えば書式も一緒にコピーされるんじゃないの?」と思われた方は鋭いです。

Valueプロパティは見た目をそろえるプロパティです。

試しにセルに「1,234,567,890」とカンマ区切りで入力してみて下さい。

書式が「通貨」になるかと思います。

これはExcelが勝手に判断し、書式を通貨にしてくれているんですね。

A5のセルをあらかじめ「数値」に指定していれば「数値」としてそのまま扱ってくれます。

書式ごと丸々コピーする方法もありますが、ここで説明すると長くなるので、別の講座でまた解説します。

とりあえず今回は次の要点だけおさえましょう。

Valueプロパティは値だけの情報、Textは書式を含んだ見た目の情報

また、ValueプロパティとTextプロパティには次の違いがあります。

Valueプロパティは設定も取得も可能、Textプロパティは取得のみ可能

試しに次のようなマクロを作ります。

セルの文字の「設定」にTextプロパティを使ってみます。

cell-copy04

マクロを実行するとエラーになります。

03-vba-error

Textプロパティはセルの情報を「取得」することは出来ても、情報を「設定」することは出来ません。

たけし
たけし

なるほど。なんとなくValueプロパティとTextプロパティの違いは分かりました。

たけし
たけし

でもTextプロパティをセルの取得に使うとエラーになっちゃうんですよね?

そしたらValueプロパティだけ使えば良いんじゃないですか?

天馬先生
天馬先生

いいところに気づいたね!確かにその通りな部分もあるんだけど、Textプロパティが有効な時もあるんだ。

天馬先生
天馬先生

例えば、書式はコピーしたくなくて、値の中身だけコピーしたいときなどは「Textプロパティ」が有効になるよ。

たけし
たけし

なるほど。確かに書式はコピーしたくない時もありそうですね!

「Valueプロパティ」と「Textプロパティ」の2つの特性の違いをおさえて、必要に応じて使いわけましょう!

プロパティは省略可能

ValueやTextなど、いちいち指定するのは面倒だと思いますよね。

実はこのプロパティは省略可能です。

次のExcelに対してマクロを作成します。

before-copy07

ValueプロパティやTextプロパティを省略します。

omit-property

このマクロ実行結果は次のようになります。

after-copy06

プロパティを省略すると勝手に「Value」として扱ってくれます。

省略しても適当な処理をしてくれるのがVBAの便利なところですね。

私は毎度書くようにしていますが、プロパティを省略するかどうかは自由です。

セルの操作方法(Cells)

天馬先生
天馬先生

Rangeの使い方はだいたい理解してもらえたところで、もう1つのセル操作方法をお伝えします。

セルの操作方法としてRange以外に「Cells」というものがあります。

VBAの例を見てみましょう。

vba-cells

実行結果は次のようになります。

cells-result

C3列に文字が入ってきました。

Cellではセルの位置を次のように指定します。

Cells(行番号,列番号)

行番号:何行目かを指定します。

列番号:何列目かを指定します。A列を1列目とするためC列は3列目に該当します。

もう一度マクロを見てみると、Cells(2,3).Valueと指定しているため、2行目の3列目、つまりC3セルを指定しているという事になります。

Rangeを使ってC3列を表わす場合は「Range(“A3”)」と記載します。

上の例に当てはめると、以下の記述になります。

Cells(2,3).Value = “Cellsを使ってみよう!”

たけし
たけし

なるほど。2種類の方法があるんですね。

たけし
たけし

でもRangeの方がセルの位置をそのまま記載しているので直観的に分かりやすいですね。

天馬先生
天馬先生

たしかに。でもRangeよりもCellsの方が良いときもあるんだ。

Rangeだけ使えば良いような気もしますが、もっと複雑な処理をするマクロ、たとえば列をどんどん右に移動させて使うときなどはRangeよりもCellsを使った方が効率が良い場合があります。

また、RangeよりもCellsの方が処理が速いといった特徴もあります。

何万、何十万もの大量のデータを扱う場合は処理時間に大きく差が出てきますが、扱うデータ量が少ない場合は正直ほとんど差はありません。

扱うデータや作るマクロの内容に応じて使いわけましょう!

まとめ

今回はセル操作方法について前回より詳しく解説しました。

簡単に復習します。

  • セルの指定方法には「Range」と「Cells」の2つの方法がある。
  • プロパティとは属性または動作の状態を表わしたもの
  • プロパティには「Valueプロパティ」と「Textプロパティ」がある
  • Valueプロパティは値の情報のみ、Textプロパティは見た目も含んだ情報
  • Valueプロパティは設定も取得も可能、Textプロパティは取得のみ可能
  • プロパティは省略可能で、省略するとValueプロパティとして扱われる
  • 現在選択中のセルは「ActiveCell」で指定する

色々な情報が出てきて混乱するかもしれませんが、好きなマクロを組んでみて、それぞれの違いをご自身の目で見てみると違いが分かってくると思います。

セル操作は奥が深くまだまだ説明できていない事がたくさんあります。

別の講座で1つずつゆっくり丁寧に解説していきますので、次回以降もご覧いただけると幸いです。

最後までお読みいただき、ありがとうございました!

~天然マクロ学校~

コメント

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