---topics:セルに値を入れる、セルに色を塗る---
VBA編其ノ3 セルを操作する 後編
続きです。
前回(VBA編其ノ2)は、「セルを選択する」マクロを扱ったんでしたね。
今日は、さらに進んで、セルに値を入れてみましょう。
前回も言ったように、マウスとキーボードを使えば超かんたんなことなんだけど、コレをVBAでやります。
さて、どうなることやら。
セルに値を入れる
では、新しいマクロを書きます。
「cells(4,7).value=123」と書いてください。※1
これは、「G4セル(cellsでは行と列が反対になるんでしたね)に「123」と入れてください」という意味になります。
※1 「cells(4,7).value=123」で…
このマクロを動かすと…※2
※2 G4セルに「123」が入力された
どうでしょうか。
前回の「セル選択」マクロを思い出してください。
「cells(●,●).」のところまでは前回と同じですね。
ちがいはその後ろ。
前回は「select」というワードを使って、「選択」という指令を出しました。
今回使ったのは「value = ●●」です。
…そう。
VBAは、後ろにどんなワードをもってくるかで動作が決まってくるんです※3。
※3 セル選択マクロとの比較
じゃあ、もう1コ作りましょう。
今度は2行マクロを書きます。
1行目に「cells(1,1).value="やもめのジョナサン"」、
2行目に「cells(2,1).value="8時だョ!"」
と書いてみてください※4。
「チョンチョン(""、ダブルクォーテーション)」、忘れないでください。
文字列を入力したいときは、値の前後を「チョンチョン("")」で囲みます。
※4 A1セル・A2セルに文字を入れるマクロ
動かすと、こうなります※5。
※5 こうなった
<この機会にちょっとお話>
「値を入れる前に、セルを選択しなくても良いの?」と思う方もいるかと思います。
つまり、
cells(1,1).select
cells(1,1).value="やもめのジョナサン"
cells(2,1).select
cells(2,1).value="8時だョ!"
としなくても良いの?と。
…うーん、まちがいじゃないです。
この↑マクロも普通に動きます。
けど、冗長です。
たしかに、マウス操作のときは、まずカーソルを合わせなければなりません。
だけど、VBAではわざわざ選択しなくても値を入れられるので、こういう↑書き方はしなくて大丈夫です。
…ただ、繰り返しますが、まちがいではないです。
選択→値入力、という文をあえて書くケースもあります。
だけど、そういうことをするときは、それなりの理由があるときにしておきましょう。
「value」の2つの使い方
ここまで、「value = ●●」という文の解説をしてきました。
このかたちだと、イコールの後ろに来る値が入力されます。
でも、valueにはもう1コ使い方があります。
このかたちのときは、イコールを使いません。
比較のために、新しく次↓のマクロを書いてみてください。
msgbox cells(2,1).value & "全員集合"
前々回(VBA編其ノ1)で使った、メッセージボックス文と組み合わせています。
で、こうすると…※6 ※7
※6 メッセージボックスの引数に使うと…
※7 A2セルの値が参照される
イコールを使わないこのかたちだと、セル内の値が参照されるんです。
つまり、セル(2,1)の値を見に行ってくれている、というワケ。
…え?趣旨がよくわからない?
…じゃあ、実験のために、セル(2,1)の値のdeleteしてみましょうか※8。
そのうえで、もう1回同じマクロを動かしてみましょう※9。
※8 空にした この状態でさっきのマクロを動かすと…
※9 ただの「全員集合」に
メッセージボックスのマクロはセル(2,1)を見に行っていますが、セル(2,1)が空っぽなので、こうなります※10。
※10 ただの「全員集合」になっちゃうしくみ
なんとなくわかってきました?
…では、さらにしつこく行きます(すみません、しつこいのが芸風なので…)。
セル(2,1)を「ケーズだョ!」に打ち変えてください。
直接入力しちゃって良いですよ。
この状態でマクロを使うと…、もう、おわかりですよね※11。
※11 こうなりますわな
「value」って「値」って意味ですよね。
…そうそう、VBAやるにあたって、英語がある程度できた方が理解が早いですよ。
と言うのも、VBAのワードって、「value」も「select」も「cells」もそうだけど、要は英語なのでね。
…とは言っても、「英会話がペラペラ」とかそんな高レベルの話じゃないです。
単語の意味がなんとなくわかる、そんなレベル。
あ!
そこの真面目な人!
「今から中学3年間の英語の復習しなきゃ!」とか深刻にならないように。
…僕の話をすると、VBAに「column」ってワードが出てくるんですが、僕は「「コラムン」って何だろう…そういえばFFⅡに「コラム」って敵キャラがいたな…たしか「しょうにゅうせき」と同じグラフィックの…」とか見当違いのことばかり考えていて、いまひとつイメージが湧かなくて。
で、「column」は「row」とセットで出てくることが多く、「column」が「列」、「row」が「行」という意味なのですが、どっちがどっちだかよく混乱していました。
だけど、もともとの英語の意味が「column=列」、「row=行」なので、英単語の意味がわかるとイメージしやすいよな、ということです
(でもそもそも、「行」と「列」が混乱しやすいよな。
「行」がヨコ、「列」がタテです。
僕は、「2本線がヨコに走っているから「行」=ヨコ、タテに走っているから「列」=タテ、と覚えました)。
さらに言ってしまえば、大丈夫です、わからない単語があっても良いんですよ、調べれば。
ネット辞書だとアルク(alc)がおすすめです。
…さて。話を戻して。
「value」は「値」という意味です。
だから、「cells(2,1).value」とは「セル(2,1)の値」という意味になります。
ここまではOKですね。
で、イコールの付かないただの「.value」のとき(メッセージボックスでの使い方のとき)は、現状のセル(2,1)の値を見に行く、という動作をします。
それに対して、「.value = ●●」のときは、セル(2,1)に新しく●●という値を入れる、という動作になります※12。
※12 valueの2つの使い方 まとめ
なので、「現状の値を参照したい」ときはただの「.value」(イコールなし)を、「改めて値を入力したい」ときは「.value = ●●」を使う、と覚えていただければ。
ということで、みなさんも、ためしにいろんな値を入れてみてください※13 ※14。
※13 俺も遊んでみた
※14 アルカディア号って理想の組織だよな
セルに色を塗る
では今度は、セルに塗りつぶしの色を入れてみましょう。
まず、一度シートをきれいにしてもらって良いですか?
ここまで、文字を入力するマクロをいろいろ実験してきたのを、クリアにします※15。
※15 一度きれいにした
では、新しいマクロ「cells(1,2).interior.colorindex = 3」を書いてください。
セルに赤の背景色が付くはずです※16 ※17。
※16 interior.colorindexを使うと…
※17 色が塗られる
背景色を付けるには「interior.colorindex」というワードを使います。
2つのワードがくっついていますね。
「interior」は、…お部屋の「インテリア」ってことば、使いますよね?
アレを思い起こすとイメージしやすいかも。
「interior」は、「(範囲の)中、内部」という意味です。
「colorindex」の方は、「色番号」くらいの意味です。
Excelは色それぞれに番号が振られていて、イコールの後ろでそれを設定してやります。
カラーインデックス「3」が赤なので、画面のようになります。
つまり、「.interior.colorindex = 3」とは、「(セルの)中の色番号を「3」に設定してください」という意味になります。
では、他の色はどうなるのでしょうか。
ためしに、カラーインデックス1~5までを表示させてみましょう。
次↓のマクロを書いてください※18。
cells(1,1).value = 1
cells(1,2).interior.colorindex = 1
cells(2,1).value = 2
cells(2,2).interior.colorindex = 2
cells(3,1).value = 3
cells(3,2).interior.colorindex = 3
cells(4,1).value = 4
cells(4,2).interior.colorindex = 4
cells(5,1).value = 5
cells(5,2).interior.colorindex = 5
※18 カラーインデックス「5」まで
このマクロだと、1行目に「1」という値が入り、そのとなりに色番号「1」の色が入る、はずです。
そして、2行目には色番号「2」が入り、3行目には…、となるはずです。
ちょっと動かしてみましょう※19。
※19 狙い通り
よしよし。
青は色番号「5」、「1」は黒なんですね。
「2」は…、「白」です。
「塗りつぶしなし」ではありません。
では、課題!カラーインデックス「20」までの表を、同様に作ってみてください。
結構大変ですよ。
・
・
※20 けっこう大変だな…
※21 結果こうなる
こんな感じになります※20 ※21。
ちなみに、色番号は「56」まであります。
それより上を設定しようとすると、エラーになります※22 ※23。
※22 色番号「57」を設定しようとすると…
※23 怒られる
さらに。色番号を「0」にすると「塗りつぶし:なし」になります。
ためしに、セル(3,2)から(5,2)まで、色なしにしてみましょう※24 ※25。
※24 カラーインデックスを「0」にすると…
※25 塗りつぶし:なしになる
背景色じゃなくて、文字色そのものを設定したいときは、「.interior」のところを「.font」にしてやります。
つまり、「cells(3,3).font.colorindex = 3」のようにします※26 ※27。
※26 文字に色を付けるには「.font.colorindex = ●●」
※27 こうなる
今回は内容盛りだくさんでお届けしました。
ちゃんとついてこれてますか?大丈夫ですか?
僕の方は勝手に「其ノ1」「其ノ2」なんて区切っていますが、良いんですよ、一気に読み通さなくても。
人それぞれ、自分のペースというものがありますから。
ということで、ゆっくりで良いので、少しずつできることを増やしていきましょう。
少しずつ。