前回の講座でVBAの書き方の基礎を解説しました。(詳しくはエクセルVBA超入門講座第2回参照)
その中でセルの簡単な操作方法についてお伝えしました。
今回はセル操作のもっと具体的な方法をお伝えします。
セル操作はマクロを作るうえで大事な超基礎となる必須スキルです。
ぜひ今回の講座でセル操作の基礎を学んで頂けると幸いです。
セルへの文字挿入方法(Valueプロパティ)
今回はセル操作についてもう少し詳しく解説していくよ
天馬先生、今日もよろしくお願いします!
まずは前回の復習をしてみましょう。
前回の講座でお伝えした内容を簡単に復習します。(詳しくは第2回講座のセルの操作方法)を参照
セルに値を入れるには以下の手順で行います。
- セルを指定
- 操作方法を指定
- 挿入する文字を指定
このマクロの実行結果は次のようになります。
「Value」を使うとセルに指定した文字を入れる事ができます。
②で指定する部分をVBAで「プロパティ」と呼びます。
プロパティとは、セルの属性または動作の状態を示したものです。
セルには文字の色や、文字サイズ、記述されている文字、など様々な情報が含まれています。これらすべての情報がいわゆる「属性」と呼ばれるものです。
上の例ではA1セルの文字入力内容(属性)を「はじめてのVBA操作」という文字列に設定しています。これが「動作の状態」です。
Valueプロパティでは属性を設定する他にも、そのセルの情報を「取得」することが可能です。
急にプロパティだの属性だの言われてもなんだか良くわからない、という方のために第4回の講座でプロパティについて詳しく解説します。
とりあえず今回は、プロパティには「属性」と「動作の状態」2つの特性があるという事をおさえてもらえれば問題ありません。
次にValueプロパティを使ってセルの情報を「取得」する方法を解説します。
他のセルから文字をコピー(取得)する
セルに文字を入れる方法はもう分かったかな?
もうその方法はマスターしました!
素晴らしい!
では次に、他のセルから文字をコピーする方法を教えるよ
他のセルから文字をコピーする例を見てみましょう。
マクロ作成前の状態が次のようになっていたとします。
A1セルのみに文字「他のセルに文字をコピーする!」が入っている状態です。
これに対して次のようなマクロを作成します。
マクロ実行結果は次のようになります。
A1セルの文字がA5セルにコピーされました。
このように、セルへの文字挿入は文字列を直接指定する以外に、他のセルの文字をそのままコピーすることが出来るよ。
VBAの書き方は次のようになります。
上の例に当てはめると、以下の記述になります。
Range(“A1”).Value = Range(“A5”).Value
Valueプロパティの「取得」の機能を使った方法です。
なるほど!他のセルの文字をそのままコピーすることも出来るんですね!
選択中のセルを操作する(ActiveCell)
Rangeを使えば特定のセルへ文字を入れることが出来ますが、現在選択中のセルに対して操作することも出来ます。
このとき使うのが「ActiveCell」です。
具体的に見ましょう。
先ほどと同じでマクロ前の状態が以下だったとします。
このときA3セルを選択している状態です。
この状態で次のマクロを実行します。
結果は次のようになります。
選択していたA3セルに文字がコピーされました。
このように「ActiveCell」を使うと、現在選択中のセルに対して操作が可能です。
VBAの書き方は次のようになります。
次のように直接文字を指定しても大丈夫です。
ActiveCell.Value = “現在選択中のセルに文字を入れる!”
今後もっと複雑なマクロを作成するときに「ActiveCell」はよく使うので覚えておきましょう!
ValueプロパティとTextプロパティの違い
文字をコピーするときに、Valueプロパティの他にもう1つのプロパティがあるので紹介します。
他のセルの文字をコピーするときにValueプロパティ(.Value)を使いましたが、Textプロパティを使うことも出来ます。
例を見てみましょう。
このマクロを実行すると次のようになります。
あれ?Value使ったときと一緒じゃないですか?
たけしくん鋭いね!この2つには次の違いがあるよ。
文字だとぱっと見わからないので、数値を使って比較しましょう。
マクロ実行前の状態が以下だったとします。
A1セルの書式は「数値(3桁でカンマ区切り)」になっています。
次のマクロを実行します。
結果は次のようになります。
「Value」を指定したA3列は値の情報だけがコピーされました。
「Text」を使ったA5列では書式(3桁カンマ区切り)もコピーされました。
このような違いがあります。
ちなみに、A5の書式設定を見ると「通貨」に設定されています。
「あれ?Valueプロパティ使えば書式も一緒にコピーされるんじゃないの?」と思われた方は鋭いです。
Valueプロパティは見た目をそろえるプロパティです。
試しにセルに「1,234,567,890」とカンマ区切りで入力してみて下さい。
書式が「通貨」になるかと思います。
これはExcelが勝手に判断し、書式を通貨にしてくれているんですね。
A5のセルをあらかじめ「数値」に指定していれば「数値」としてそのまま扱ってくれます。
書式ごと丸々コピーする方法もありますが、ここで説明すると長くなるので、別の講座でまた解説します。
とりあえず今回は次の要点だけおさえましょう。
また、ValueプロパティとTextプロパティには次の違いがあります。
試しに次のようなマクロを作ります。
セルの文字の「設定」にTextプロパティを使ってみます。
マクロを実行するとエラーになります。
Textプロパティはセルの情報を「取得」することは出来ても、情報を「設定」することは出来ません。
なるほど。なんとなくValueプロパティとTextプロパティの違いは分かりました。
でもTextプロパティをセルの取得に使うとエラーになっちゃうんですよね?
そしたらValueプロパティだけ使えば良いんじゃないですか?
いいところに気づいたね!確かにその通りな部分もあるんだけど、Textプロパティが有効な時もあるんだ。
例えば、書式はコピーしたくなくて、値の中身だけコピーしたいときなどは「Textプロパティ」が有効になるよ。
なるほど。確かに書式はコピーしたくない時もありそうですね!
「Valueプロパティ」と「Textプロパティ」の2つの特性の違いをおさえて、必要に応じて使いわけましょう!
プロパティは省略可能
ValueやTextなど、いちいち指定するのは面倒だと思いますよね。
実はこのプロパティは省略可能です。
次のExcelに対してマクロを作成します。
ValueプロパティやTextプロパティを省略します。
このマクロ実行結果は次のようになります。
プロパティを省略すると勝手に「Value」として扱ってくれます。
省略しても適当な処理をしてくれるのがVBAの便利なところですね。
私は毎度書くようにしていますが、プロパティを省略するかどうかは自由です。
セルの操作方法(Cells)
Rangeの使い方はだいたい理解してもらえたところで、もう1つのセル操作方法をお伝えします。
セルの操作方法としてRange以外に「Cells」というものがあります。
VBAの例を見てみましょう。
実行結果は次のようになります。
C3列に文字が入ってきました。
Cellではセルの位置を次のように指定します。
行番号:何行目かを指定します。
列番号:何列目かを指定します。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つずつゆっくり丁寧に解説していきますので、次回以降もご覧いただけると幸いです。
最後までお読みいただき、ありがとうございました!
~天然マクロ学校~
コメント