VBA編其ノ2 セルを操作する 前編
今回は、「セルを操作する」と題して、「セルを選択する」とか、「セルに指定した値を入れる」とか、「セルに色を塗る」とかしてみたいと思います。 手で作業するなら、どれも簡単なこと、と言うか、説明するまでもないようなことなんですが、コイツをVBAでやる、というのが今回の趣旨です。 解説量の割に成果としては地味になってしまうかもしれませんが、VBAの基本となることなので、一度は体験しておきましょう。
では、まず最初に、前回(VBA編其ノ1)で作ったマクロ練習bookを開きましょう※1。 前回、メッセージボックスを出すマクロを作ったヤツです。 マクロは全部、ここに書くんでしたね。 開いてみると…。
「マクロが無効にされました」というメッセージが出ました。
この状態だと、Excelの宣言通り、マクロは動きません。
ちょっと試しに、前回の「メッセージボックスを出す」マクロを動かそうとしてみると…※2 ※3。
動かせませんでした。
実はコレ、Excelのセキュリティが働いた結果でして。 というのも、マクロっていうのは、使いようによってはコンピュータウィルスにもなる危険性を秘めているんです。 マクロウィルスってヤツを、僕も実際にはまだ見たことはないのですが、ウワサですと、新しいExcelブックが延々と開きつづけて止まらないみたいなウィルスがポピュラーらしいです。 イヤですね。 もちろん、たいていの人は善用するためにマクロを使っているのですが、そこはホラ、世の中には悪意ある人もいますから。 なのでExcelは、「マクロ」と聞くととりあえず警戒するようにできているんです。
マクロを使えるようにするためには、※1の画面で「オプション」を開き※4、「このコンテンツを有効にする」にチェックを入れます※5。 そうするとマクロが有効になって、以前作成したマクロが動かせるようになりますので。
自分で作ったマクロですもの、安全に決まってますよね。
けど、他人の作ったものについては、警戒した方が良いかも…。
特に、見知らぬ相手から来たメールにエクセルマクロが添付されてたりなんかしたら、「有効」にしない方が良い、というか、そもそも開かない方が良いでしょう。
中身がどんなモンスターなのか、わかりませんからね。
ところで、「…アレ?自分のExcelでは、※1の警告メッセージ出ないよ?」って方もいらっしゃるかと思います。
おそらく、Excelの設定が、「マクロであればどんなものでも問答無用でOFFにする。警告も出さない」という風になっているのではないかと思います。
このままの状態ではマクロが使えないので、設定を変えましょう。
「開発」タブから、「マクロのセキュリティ」へ進んでください※6。
で、セキュリティのレベルを上から2番目の、「警告を表示してすべてのマクロを無効にする」に設定します※7。
「すべてのマクロを無効にする」とはなっていますが、これは、「とりあえず一旦は無効にする」という意味です。
このセキュリティレベルだと、操作によって、いつでもマクロを有効にすることができますので。
こうしておいて、ブックを一度閉じて再度開けば、※1の状態になります。
あとは上述の手順で「有効」にしてやってください。
4つあるマクロセキュリティのレベルのうち、最下段の「すべてのマクロを有効にする」は、Excelも言うとおり、オススメできません。 というのも、悪意あるマクロに対して、止める手立てがなくなってしまうからです。 ※7のように、上から2番目の「警告を表示してすべてのマクロを無効にする」に設定しておけば、マクロ有りブックを開くたびに「マクロを有効にする」にしなければならないわずらわしさはありますが、マクロウィルスに対して少なくとも1度はブレーキをかけてくれますので、この設定にしておくのが無難です。
さて。
マクロのセキュリティの話はこのぐらいにして。
本題に入りましょう。
セルを選択する
まずはじめに、「特定セルを選択する」というのをやってみましょう。
マウスならクリックだけで済むのですが…。
とりあえず、VBEを開いてください※8 ※9。
こうするんでしたね。
開くと、前回書いたマクロが並んでいます。
本日も、ココにマクロを書いていきましょう。
では、まずマクロのタイトルから。
「sub セル選択1」と入力してください※10 ※11。
「sub ○○○」がマクロの名前になるんでしたね。
そして、マクロのタイトルを入れると終わりの決まり文句「End Sub」が自動的に追加されるというのも、前回やりました。
ではいよいよ、マクロの中身。
cells(5,3).selectと入力してください※12。
これは、「上から5行目、左から3列目のセルを選択せよ」という指令になります。
あ、そうそう。
「cells(5,3)」の後ろは「.(ピリオド)」ね。
書けました?
じゃあ、動かしてみましょう。
通常のExcelシートの方に戻って、開発タブから動かすんでしたね※13 ※14。
地味なマクロです(笑)。
でも、ここにはVBAの基本が詰まっているので、ていねいに解説したいと思います。
あ、そうそう。
このマクロ、最初にカーソルがどこにあっても、C5セルが選択されるようになりますので※15 ※16。
では、解説。
セルを操作するときは、「cells」というワードを使います。
「cell」っていうのは、われわれが普段さんざん使っている、Excelのマス目「セル」のことね。
「C」から始まるスペルなんですね。「小さく区切られた部屋」っていう意味なんですが、生物の「細胞」の意味もあります。
で、「cells」の使い方は、
cells(行番号,列番号)
となっています。
だから例えば、cells(3,4)なら「3行目、4列目のセル」を、cells(1,10)なら「1行目、10列目のセル」を指します※17。
ちなみに、これまでのところひとつのセルだけを指定しているのですが、それでも必ず「cells」と複数形で使用します。
「×cell(5,3).select」はまちがいです。
「何で?」と言われましても…、「そういうものだ」と思ってください。
でもね、cells(5,3)という表記、「なんとなく、わかりづらいなー」と思った方、いると思います。 …そう。たいていセルって「A2」とか「B3」とか、列の名前をアルファベットで指定しますよね※18。 でも、VBAのcellsの方だと、それが「1,2,3…」と数字になっている。
それに、「A2」表記だと列の名前→行の名前の順番になっているのですが、cellsのルールだと行→列と、逆になってる※19。
うーん、なんとなく、しっくりこないよなー。
…1コ目の、「列番号がアルファベット/数字問題」は、「R1C1形式」に慣れてる人だと、そんなに気にならないと思うんですよ。 「R1C1形式」っていうのは、…他人の作ったExcelで、列名が「1,2,3…」になってるファイル、見たことありませんか? Excelの列名は、基本は「A列,B列,C列…」なんですが、それをオプションで「1,2,3…」に変えることができるんですよ※20 ※21。
…でもね、少なくとも僕はコレ、使いづらいんですよ。
列が数字になるだけならまだしも、関数入れたときの表示も変わっちゃうし。
だから僕は、R1C1形式は使いません。
R1C1ファンの方、すみません。
みなさんの方も、違和感が残るようでしたら、上と同様の手順で元に戻しておいてください。
「cells」のもうひとつの問題、「行番号→列番号順番問題」については、…えーと、慣れてください(笑)。 指定範囲の選択だけなら代替手段がないわけじゃないんだけど、後々応用することを考えると慣れていただくしかないんですよね。 だから、すみません、「cells(行番号、列番号)」で覚えてください。
…では、納得していただけたところで…、ていうか、納得していただけるような話ではなかったと思うんですが、とりあえず「事情」ってモンがある、ってことは理解していただけたと思うので、問題。 「B6セルを選択する」マクロを書いてください。 ハイ、チャレンジ。
・
・
どうでしょうか。
「B6セル」ということは、要するに、
「6行目、2列目のセル」ってことですよね※22。
なので、cells(6,2).selectと書きます※23。
動かしてみると…※24
ちゃんとB6セルが選択されましたね。よしよし。
では次!と行きたいところですが、長くなってきたので今回はここまで。
後編では、セルに値を入れていきますので、お楽しみに。