---topics:セルに値を入れる、セルに色を塗る---

VBA編其ノ3 セルを操作する 後編

続きです。
前回(VBA編其ノ2)は、「セルを選択する」マクロを扱ったんでしたね。 今日は、さらに進んで、セルに値を入れてみましょう。 前回も言ったように、マウスとキーボードを使えば超かんたんなことなんだけど、コレをVBAでやります。 さて、どうなることやら。

セルに値を入れる

では、新しいマクロを書きます。
cells(4,7).value=123」と書いてください。※1
これは、「G4セル(cellsでは行と列が反対になるんでしたね)に「123」と入れてください」という意味になります。

「cells(4,7).value=123」で…
※1 「cells(4,7).value=123」で…

このマクロを動かすと…※2

G4セルに「123」が入力された
※2 G4セルに「123」が入力された

どうでしょうか。
前回の「セル選択」マクロを思い出してください。 「cells(●,●).」のところまでは前回と同じですね。
ちがいはその後ろ。
前回は「select」というワードを使って、「選択」という指令を出しました。 今回使ったのは「value = ●●」です。
…そう。
VBAは、後ろにどんなワードをもってくるかで動作が決まってくるんです※3

セル選択マクロとの比較
※3 セル選択マクロとの比較

じゃあ、もう1コ作りましょう。 今度は2行マクロを書きます。
1行目に「cells(1,1).value="やもめのジョナサン"」、
2行目に「cells(2,1).value="8時だョ!"
と書いてみてください※4
「チョンチョン(""、ダブルクォーテーション)」、忘れないでください。 文字列を入力したいときは、値の前後を「チョンチョン("")」で囲みます。

A1セル・A2セルに文字を入れる
※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 メッセージボックスの引数に使うと…
A2セルの値が参照される
※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

valueの2つの使い方 まとめ
※12 valueの2つの使い方 まとめ

なので、「現状の値を参照したい」ときはただの「.value」(イコールなし)を、「改めて値を入力したい」ときは「.value = ●●」を使う、と覚えていただければ。

ということで、みなさんも、ためしにいろんな値を入れてみてください※13 ※14

俺も遊んでみた
※13 俺も遊んでみた
アルカディア号って理想の組織だよな
※14 アルカディア号って理想の組織だよな

セルに色を塗る

では今度は、セルに塗りつぶしの色を入れてみましょう。 まず、一度シートをきれいにしてもらって良いですか? ここまで、文字を入力するマクロをいろいろ実験してきたのを、クリアにします※15

一度きれいにした
※15 一度きれいにした

では、新しいマクロ「cells(1,2).interior.colorindex = 3」を書いてください。 セルにの背景色が付くはずです※16 ※17

interior.colorindexを使うと…
※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

カラーインデックス「5」まで
※18 カラーインデックス「5」まで

このマクロだと、1行目に「1」という値が入り、そのとなりに色番号「1」の色が入る、はずです。 そして、2行目には色番号「2」が入り、3行目には…、となるはずです。
ちょっと動かしてみましょう※19

狙い通り
※19 狙い通り

よしよし。
青は色番号「5」、「1」は黒なんですね。 「2」は…、「白」です。 「塗りつぶしなし」ではありません。

では、課題!カラーインデックス「20」までの表を、同様に作ってみてください。 結構大変ですよ。
 ・
 ・

けっこう大変だな…
※20 けっこう大変だな…
結果こうなる
※21 結果こうなる

こんな感じになります※20 ※21
ちなみに、色番号は「56」まであります。 それより上を設定しようとすると、エラーになります※22 ※23

色番号「57」を設定しようとすると…
※22 色番号「57」を設定しようとすると…
怒られる
※23 怒られる

さらに。色番号を「0」にすると「塗りつぶし:なし」になります。
ためしに、セル(3,2)から(5,2)まで、色なしにしてみましょう※24 ※25

カラーインデックスを「0」にすると…
※24 カラーインデックスを「0」にすると…
塗りつぶし:なしになる
※25 塗りつぶし:なしになる

背景色じゃなくて、文字色そのものを設定したいときは、「.interior」のところを「.font」にしてやります。 つまり、「cells(3,3).font.colorindex = 3」のようにします※26 ※27

文字に色を付けるには「.font.colorindex = ●●」
※26 文字に色を付けるには「.font.colorindex = ●●」
こうなる
※27 こうなる

今回は内容盛りだくさんでお届けしました。 ちゃんとついてこれてますか?大丈夫ですか? 僕の方は勝手に「其ノ1」「其ノ2」なんて区切っていますが、良いんですよ、一気に読み通さなくても。 人それぞれ、自分のペースというものがありますから。
ということで、ゆっくりで良いので、少しずつできることを増やしていきましょう。 少しずつ。

Copyright(C)森田表計算