初めに
このコーナーはエクセルは使っているけど「表を作ってデータを入れるだけ。印刷するだけ。」という極々初心者の方向けに書いています。エクセルに付属しているVBAと呼ばれるマクロを使ってエクセルを制御するプログラミング手法の学習を手助けしようと思い書き始めました。
「マクロなら知ってるよ!」と言う方は全部読み飛ばしてください。
プログラムと言うと少し難しく思われるかもしれません。このコーナーではエクセル初心者が学習しやすい様にできるだけ専門用語を使わずに又、画面の変化もできるだけ細かく、どこをどのようにするのか、どう表現したらわかりやすくなるか心掛けて書きました。
エクセルを使ってプログラミングの手法を身に着けたら、きっとエクセルを自由自在に操ることが楽しくなると思います。是非そうなってほしいと思います。
それでは始めてみましょう。
エクセルを起動します
筆者の場合、エクセルは、矢印をクリックします
空白のブックをクリックします。
空白の何も書かれていないエクセルのシートが表示されました。
さて、ここからプログラムを書く場所を表示します
画面の左側下部にこの開いているシート名が「Sheet1」と書かれたタブがあるのでそこにカーソルを合わせて右クリックします。
下図の様なメニューが出てきますから、その中央付近に「コードの表示(V)」というのがありますから、そこをクリックします。
こんな画面が表示されたら、もう少しです。
矢印のところに(General)と書いたコンボボックスがあるので、ここをクリックします。
コンボボックスが開いて「Worksheet」と表示されている所をクリックします。
下図のようなコードが自動的にかきこまれます。
さて、いよいよここからコードを書きます。
そこに書かれているコードです
① Private Sub Worksheet_SelectionChange(ByVal Target As Range)
② End Sub
何かを処理するためのコードは①と②の間の行間に書き込みます。
①はエクセルのワークシートのその時、選択されているセルとは違うセルを選択したときに動作するきっかけになる一文です。②と一緒に自動的に書き込まれています。
②は動作する処理の終了を意味します。
それでは、早速何か書いてみましょう。

エクセルの実際のコードエディターの様子
コードの説明
1 2 3 4 5 6 7 8 |
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'ここに書いたプログラムコードはワークシートの選択したセルをチェンジしたとき処理が実行されます ' 'B列の8行目に「初めまして」と文字列を表示するコードです Range("b8") = "初めまして" End Sub |
行番号1と8はエクセルが自動的に書き込みます。
2,3,4はコメント行です。先頭行に「’」半角のアポストロフィーを付けます。自動的に文字色がグリーンに設定されコメント文であることが一目でわかるようになっています。5,7行目はただの空白行です(コードを見やすくするために入れてます)
(コメント行と空白行はプログラムの処理には影響しません。普通は具体的な処理の内容を説明する文を書きます。)
6行目がこのプログラムの具体的な処理内容です。Range()はワークシートのセルの番地を指定するためのオブジェクトです。かっこの中に番地を設定します。=”何々” はイコールの左辺にたいして何々という文字列を代入するという意味です。つまり「ワークシートの今とは違うセルを選択したら、B列の8行目のセルに初めましてと書き込む」という処理を実行します。
オブジェクトの仕組みはとても難しいのでここでは説明しません。プログラムの全体像を取っ付き易く知っていただく為に極、あっさり、ざっくりと書いています。興味のある場合は検索すると様々説明しているサイトが沢山ありますから調べてみてください。
では、やってみましょう
上記を参考にプログラムを書いてみましょう。
コメントは何を書いても処理には影響しません
6行目のコードでは文字列以外はすべて半角英数で書きます。(お約束です)
文字列はダブルクォーテーションで囲います。(お約束です)
range()のセル番地指定もダブルクォーテーションで囲います。(お約束です)
rangeと小文字で書いても綴りが間違っていなければ、Rangeと自動的に先頭が大文字に変わります。
6行目を書き込んだら、ワークシートを表示させます。赤丸のアイコンをクリックします。
ワークシートが表示されます。大抵最初はA列の1行目のセルが選択されていると思いますので
ここでは、D列の10行目をクリックしてみました(今選択されているセル以外のセルならどこでもOKです)
B列の8行目に「初めまして」とちゃんと表示されましたね。
コードをちゃんと書いたつもりでも、下記のようにエラーになることもあります。
ここでは敢えてRange(”b8”)のダブルクォーテーションをはずしてRange(b8)と書き換えて実行してみました。
すると、見事にエラーダイアログが開きました。ので「デバック」のボタンをクリックします。
エラーのある行が黄色く色づけされます。
この行をよく見ると(b8)のところのダブルクォーテーションがついていません(わざと外したので
当たり前ですね)
エラーのある行が分かったので矢印のアイコンをクリックしてデバックモードを解除します。
Range(”b8”)と書き換えて再度ワークシートを表示してやってみます。
どうでしょう。うまくいったでしょうか。
色々な書き方
Range()と同じように使えるcells()でやってみます。
1 2 3 4 5 6 7 8 9 10 |
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'ここに書いたプログラムコードはワークシートの選択したセルをチェンジしたとき処理が実行されます ' 'B列の8行目に「初めまして」と文字列を表示するコードです Range("b8") = "初めまして" '------------------------------------------- '9行目の2列目のセルに「初めました」と表示するコードです Cells(9, 2) = "初めました" End Sub |
6行目に仕切り線を入れて、7行目に説明コメントをいれます。
8行目に Cells(9, 2) = “初めました” と処理内容を書き込みました。
ワークシートを表示させて、どこか別のセルをクリックしてみます。
コード文が間違っていなければ、先ほどのB8のセルの下に「始めました」と表示されたはずです。
Cells(9, 2)の意味
9行目で2列目のセルと読みます。行と列をカンマで区切って数字で示してやります。
どんなことに使いますか。
ほんの一例です。
ワークシートに社員の氏名と年齢、性別、電話番号などのデータが蓄積されているとします。
ある特定の社員名をセルに打ち込んだらそのセルの右のセルに電話番号を表示する。や
社員番号を打ち込んだら氏名を表示するなどです。使い方は無限大です。
(range()とcells()はエクセルのプログラムを書くときには必ず必要になるオブジェクトですから徐々に使い方をマスターしてくださいね)
Bookを保存しておきましょう。
今回はこのくらいにしておきます。
次回からもこのブックを使って学習できるように保存しておくことにします。
下図の赤矢印の×ボタンをクリックしてでエクセルブックを終了します。
すると、保存のダイアログが開くので保存ボタンをクリックします。
すでに、保存されていればそのまま終了します。
初めて保存するときは下図のようなファイル名設定のウインドウが開きますので、赤矢印の保存ボタンをクリックします。
エクセルでは先ほど書いたプログラムのことを、「マクロ」と表現しています。
そして、ブックを保存するときブックにマクロが含まれるときは、ファイルの保存形式をマクロ用に設定するように聞いてくるダイアログが開きます。
ここで、「はい」ボタンを押すと書いたプログラムは保存されませんから、一旦ここでは赤矢印の「いいえ」ボタンを押します。
下図の赤矢印の「ファイルの種類」ボックスをクリックします。
ファイルの種類一覧が開きますから上から二番目くらいにある「Excelマクロ有効ブック」と書かれている所をクリックします。
青矢印1の保存されるフォルダーは標準では「ドキュメント」になっていること、赤矢印2のファイル形式を確認して、赤矢印3の保存ボタンをクリックしたら、これで終了です
筆者の場合、作業しやすさのため、保存フォルダーは「デスクトップ」にしています。
デスクトップに保存するには、一番左のディレクトリー選択ボックスの中から「デスクトップ」をクリックすれば青矢印のところがデスクトップに変わります。
これで、エクセルが終了します。次回からもこのブックを使って学習しましょう。
次回はプログラムを制御する方法を解説します。
コメント
[…] 第一回目、まずはエクセル本体を起動するところから始まって、VBAのコードを書くエディターを表示させ、簡単なコードを書いてセルに文字列を表示してみました。 […]
[…] 第一回目、まずはエクセル本体を起動するところから始まって、VBAのコードを書くエディターを表示させ、簡単なコードを書いてセルに文字列を表示してみました。 […]