前回は、ワークブックやワークシートを指定する方法を書いた。
さらに、「.」(ドット)を置いてより小さく細かいものを設定するとも書いた。
ワークブック→ワークシート→セル……といった具合だ。
もう少し、そのあたりを詳しく説明しようかと思う。


セルより細かいものは無いのか?


実はさらに細かい設定がある。
エクセルのセル一つ一つは非常に多くの情報を持っている。

・高さ
・幅
・フォント名
・フォントサイズ
・フォントスタイル
・文字色
・背景色
・下線の有無
・文字飾り
・文字の配置(左詰、上詰めなどの設定)
・罫線
・他のセルとの結合状態
などなど、いろいろな設定がある。

セルの中に書く文字はVBAで「Value」となる。
これまで「~.Cells(1,2) = "A"」などと書いてきたが、正確に省略せずに書くとすれば「~.Cells(1, 2).Value = "A"」となる。
省略したときはValueとして扱うようになっているので、Cellsの何かまでを書かなくてもこの場合は問題なかった。


では、今日のマクロを。

====================================================

Sub Test008()
Sheet1.Cells(5, 5).Value = "ABCDE"
Sheet1.Cells(5, 5).RowHeight = 30
Sheet1.Cells(5, 5).ColumnWidth = 40
Sheet1.Cells(5, 5).Font.Name = "Times New Roaman"
Sheet1.Cells(5, 5).Font.Size = 15
Sheet1.Cells(5, 5).Font.Bold = True
Sheet1.Cells(5, 5).Font.Italic = True
Sheet1.Cells(5, 5).Font.Color = vbBlue
Sheet1.Cells(5, 5).Interior.Color = vbRed
Sheet1.Cells(5, 5).Font.Underline = xlUnderlineStyleSingle
Sheet1.Cells(5, 5).Font.Shadow = True
Sheet1.Cells(5, 5).HorizontalAlignment = xlHAlignLeft
Sheet1.Cells(5, 5).VerticalAlignment = xlVAlignBottom
Sheet1.Cells(5, 5).Borders(xlDiagonalUp).LineStyle = xlContinuous
Sheet1.Range(Sheet1.Cells(6, 5), Sheet1.Cells(6, 6)).Merge
End Sub

====================================================

今日のはちょっと長い。


前回の内容でお気づきの方も多いと思うが、WorkbooksもWorksheetsもCellsもみんな複数形だ。
なぜかは知らないが、とにかくこれらは複数形で書く。
実行してエラーが起きたときは、単数形になっていないか確認することも大切だ。

それから、「=」(イコール)の使い方に戸惑っている方もいるかと思う。
算数や数学で習ってきたイコールは、イコールを挟んで左右が等しいことを示している。
しかし、プログラムの世界では違う。
A = B と書かれたら、「AをBにする」と解釈するとわかりやすいだろう。


今日は疲れたのでマクロの解説は次回に。
前回は「Cells(縦,横)」を使ってエクセルシートへの書き込む方法を説明した。
今回はアクティブではないシートのセルにも書き込む方法を説明する。

シートの指定の仕方にはいくつか方法がある。

では、まず下準備として、エクセル本体の「Sheet1」のシート名を変える。
とりあえず「1番」とでもしておこう。
$国民総プログラマー化計画

シート名を変えたら、Visual Basic Editorを開いて次の3つのマクロを書いてみよう。
書く場所はModule1の前回の続きでよい。

====================================================

Sub Test003()
Sheet1.Cells(2, 2) = "A"
End Sub

====================================================

Sub Test004()
Worksheets("1番").Cells(3, 3) = "B"
End Sub

====================================================

Sub Test005()
Worksheets(1).Cells(4, 4) = "C"
End Sub

====================================================

前回はセルに数字を入れたが、今回は文字列を入れる。
文字列の場合は "" ダブルコーテーションで囲ってやる。
書き終わったらエクセル本体へと戻って、メニューバーの「ツール」→「マクロ」→「マクロ」と進み、Test003、Test004、Testを005をそれぞれ実行してほしい。
いずれも「1番」のシートに書き込まれたはずだ。


まず、Test003の「Sheet1」と記述する方法。
この「Sheet1」とはVisual Basic Editorのプロジェクトエクスプローラに記載されているシート名である。
括弧の中の表記ではない。
ちなみに括弧の中はエクセル本体のシート名が表示されている。
$国民総プログラマー化計画


続いてTest004の「Worksheets("1番")」と記述する方法。
これは単純にシート名をそのままダブルコーテーションで囲って括弧の中に入れてやれば良い。

最後にTest005の「Worksheets(1)」と記述する方法。
これは左から1番目のシートという意味である。
左から2番目のシートを指定したければ「Worksheets(2)」にすれば良い。

ワークシートを指定できれば、ワークブックの指定もしたくなる。
まず、新規でエクセルを立ち上げて「TEST」という名前でいったん保存して閉じて、立ち上げ直す。

Visual Basic EditorのプロジェクトエクスプローラにTest.xlsが出ていればOK。
Module1の先ほどの続きに次の2つのマクロを書こう。

$国民総プログラマー化計画


====================================================

Sub Test006()
Workbooks("TEST.xls").Worksheets(1).Cells(5, 5) = "D"
End Sub

====================================================

Sub Test007()
Workbooks("TEST.xls").Worksheets("Sheet1").Cells(6, 6) = "E"
End Sub

====================================================

ワークブックの指定の仕方はワークブック名をそのままダブルコーテーションで囲って括弧の中に入れてやれば良い。
ただし、拡張子の.xlsを忘れずに!
そしてそのあとに続くシートの指定の仕方に制限があり、Test003のようなシートの指定の仕方はできないので注意が必要だ。

ちなみに、マクロが動いているワークブックそのものを指定する場合は、
ThisWorkbook.Worksheets~
と書く方法もある。
覚えておくと便利だ。

VBやVBAというのは、「.」(ドット)を置いてより小さい単位のものを書くようになっている。
ワークブック→ワークシート→セル……といった具合だ。
今日はエクセルのシートに何かを記入するときの動作を説明しようと思う。

まずはVisual Basic Editorを立ち上げる。
前回はThisWorkbookにメッセージボックスのコマンドを書いたけど、今回は別のところにマクロを書こう。
「Microsoft Excel Object」を右クリック「挿入」→「標準モジュール」と進むとModule1ができる。
$国民総プログラマー化計画

では、このModule1の中に次のマクロを書いてみよう。

====================================================

Sub Test001()
Cells(1, 1) = 1
End Sub

====================================================

書いたら前回と同じように、エクセル本体へと戻って、メニューバーの「ツール」→「マクロ」→「マクロ」と進み、Test001を実行する。


すると、エクセルシートの縦1、横1の位置に「1」と記入されたはずだ。


では再びVisual Basic Editorに戻って、今度は次のマクロを書いてみよう。

====================================================

Sub Test002()
Range("A1") = 2
End Sub

====================================================

エクセル本体へと戻って、メニューバーの「ツール」→「マクロ」→「マクロ」と進み、Test002を実行する。

先ほどと同じ位置に今度は「2」と書かれたはずだ。


エクセルシートのセルの使い方には「Cells」と「Range」の2種類がある。

Cellsを使う場合は、括弧の中は(縦コンマ横)だ。
Rangeを使う場合は、括弧の中は(横縦でダブルコーテーション)だ。



できる限り、Cellsを使うことをすすめる。
理由は、さらにレベルアップして複雑なセルの操作を行なうようになったときにRangeは使いにくいからだ。

縦が数字で横がABC…のシートに慣れてしまっている人には最初は戸惑うかもしれないが、ぜひCellsに慣れてほしい。



さて、Excelというのは通常の設定であれば、シートが3枚ある。
Test001とTest002ではどのシートに記入するかは指定していない。
この場合、現在表示されているシート(アクティブなシート)に記入される。
もちろんアクティブではないシートにも書き込むことはできるが、その方法はまた今度。
昨日までにエクセルとVisual Basic Editorの基本設定は完了した。


それではいよいよ簡単なマクロを作ってみよう。


ところで、mixiのコミュニティに「笑える画像」というのがある。
そのコミュニティのトップ画像がこんなのだ。
$国民総プログラマー化計画

これ、笑える?


俺にとっては面白くも何ともないね。
だって簡単に作れるから。


では、エクセルを立ち上げ、Visual Basic Editorを開く。
昨日の設定通りになっているだろうか?
なっていなければもう一度設定をし直していただきたい。

$国民総プログラマー化計画

プロジェクトウィンドウの中に「ThisWorkbook」と書かれたものがあるだろうか?
無ければ「VBAProject(Book1)」を展開し、さらに「Microsoft Excel Objects」を展開すると出てくるはずだ。

「ThisWorkbook」をダブルクリックすると右側にThisWorkbook(コード)と書かれたウィンドウが表示される。
昨日の設定で変数の宣言を強制しているので、1行目に「Option Explicit」と書かれているはずだ。
その「Option Explicit」の下に何行目からでも良いので、次のコードを書いてみてほしい。
覚えるために、コピペは使わずに入力すべし。

====================================================

Sub Test1()
MsgBox "コンピュータの電源が入っていません。", vbExclamation, "警告"
End Sub

====================================================

$国民総プログラマー化計画

「Sub Test1()」と入力すると自動的に下に「End Sub」が表記されると思うが、自動的に現れた「End Sub」をそのまま使用して構わない。

書き終わったら、Visual Basic Editorを最小化するか閉じて、Excel本体を表示させる。
Excelのメニューバー「ツール」→「マクロ」→「マクロ」と進む。
マクロウィンドウの中に「ThisWorkbook.Test1」というのがあるので、選択して「実行ボタン」をクリック。
これでVisual Basic EditorのThisWorkbookに書いたTest1のマクロが実行される。
$国民総プログラマー化計画

OSの種類によって表示のされ方は異なるが、どこかで見たようなメッセージボックスが表示されたと思う。
俺の場合はVistaなのでこんな感じだが。
$国民総プログラマー化計画

もし途中でエラーが起こった方は、Visual Basic Editorの上に■ボタン(停止、リセット)があるのでそこをクリックして、もう一度書き直してから再度実行。


では、このマクロについて解説する。
実行するマクロはSubとEnd Subで囲まれたあいだに書く決まりになっている。
上の部分はSub、Private Sub、Public Sub のいずれかで始める。
それぞれの違いについては今度気が向いたときに書く。

Sub のあとには名前をつける。
名前は何でも良いが、他のマクロと同じ名前はつけられない。
実行するとエラーが起きる。

名前のあとには()をつける。
これも決まりのようなもので、とりあえず括弧の中身は空にしておく。

マクロの単位の終了地点を示すのがEnd Subである。
基本的にはSubとEnd Subの間に書かれたものがマクロ実行の“最小単位”となる。


重要なのはその間に書かれたもの。
MsgBox はメッセージボックスを表示させる命令。

その後ろに続いて、本文を記述する。
文字列をコードに直接記述する場合は「"」ダブルコーテーションで囲ってやる決まりになっている。

本文のあとにコンマを置いてその後ろの vbExclamation は感嘆符を表示させるコマンド。
この部分ではボタンの表示も指示できる。
vbYesNoと記述すれば「はい」「いいえ」のボタンが表示されるし、vbExclamation + VbYesNoと記述すれば、感嘆符と「はい」「いいえ」ボタンが表示される。

さらにコンマを置いてその後ろがメッセージボックスのタイトルを記述する。

ボタンの種類やタイトルは以下のように省略することができる。

MsgBox "コンピュータの電源が入っていません。"

その場合はボタンは「OK」のみでタイトルには「Microsoft Excel」と表記される。

$国民総プログラマー化計画


これを知ってしまったら、笑える画像で笑うことなどできない。





おさらい:
メッセージボックスの表示方法
MsgBox 本文, ボタン表示形式や感嘆符などの設定, タイトル
早速マクロを書いてみたいところではあるが、まずはエクセルやVisual Basic Editorの設定を行なう。
マクロを組むための最低限の環境整備は必要だ。

決して楽しいものではないが、必要なものなのでちょっとだけ我慢してもらいたい。

ちなみに、エクセルのVersionは2003以下をメインに書く。
2007はExcel自体の画面のレイアウトが大幅に変わっている。
Visual Basic Editorはそれほど大きな変化は無かったはず。
2007ユーザーはExcel本体側の設定は自力で頑張ってほしい。


さて、まずはExcelを起動。

$国民総プログラマー化計画

起動したら、メニューバーの「ツール」→「オプション」と進む。
オプションウィンドウが開くと中に「全般」と書かれたタブがある。
その中に「R1C1 参照形式を使用する」という項目があるので、そこにチェックを入れる。
下の「OK」をクリックするとエクセルシートの横列の表記が「ABC~」から「123~」に変わる。
マクロを組んでいく上では、タテ・ヨコともに数値表記の方がやりやすい場合が多々ある。


続いて、セキュリティ設定。

メニューバーの「ツール」→「マクロ」→「セキュリティ」と進む。
セキュリティレベルは「中」に設定。
「高」ではダメ。
「低」でも構わないが、安全を考慮すると推奨できない。


さて、いよいよVisual Basic Editorを起動。

メニューバーの「ツール」→「マクロ」→「Visual Basic Editor」
もしくはAltキーを押しながらF11キーを押しても起動する。


起動したVisual Basic Editorの画面はどうなっているだろうか?

$国民総プログラマー化計画

上のようにプロジェクトとプロパティが開いていない場合は、メニューバーの「表示」からプロジェクトエクスプローラ、またはプロパティウインドウをクリックすると開く。
開いたら写真のように左端にでも寄せておく。

ツールバーの標準ツールが表示されていない場合は、メニューバーの「表示」→「ツールバー」から「標準」にチェックを入れる。


あとはちょっとした設定を。
メニューバーの「ツール」→「オプション」を開く。
編集タブを開くといろいろな設定がある。
「自動構文チェック」や「変数の宣言を強制する」はチェックを入れておく。
自動メンバ表示やクイックヒント、データヒントもあると便利。
国民総プログラマー化計画


以上で基本設定終了。


次回は簡単なプログラムを作ってみよう!
今日から、新たなブログをスタートする。
これ、ブログ2本目。

内容はVisual Basic for Applicationについて。
「マクロ」とか「VBA」とか言うモノ。

事務系の仕事をしている人、実験のデータ集計に苦労している学生にとっては大いに役立つかもしれないし、趣味でやってみたい人もいるだろうし…、これからの時代覚えて損はないスキルかと思う。

興味はあるけど、何から始めればいいのかわからない。
そもそもVBAでどんなことができるのかわからない。
そんな人も多いでしょう。

始めようと思って本屋に行ってみたけど、並んでいる本の中身が全然理解できない人も多いでしょう。
分厚いVBA本を見ただけでやる気が失せたり、本を開いてもまず出てくるのは「基礎」だとか「VB Edit
orの使い方」だとかが書いてあって、いったい何ができるのか一向に見えてこない。
そりゃぁ、やる気も興味も失うのは必然。


俺がVBAと出会ったのは新入社員のころ。
会社では生産工程を管理するシステムの導入をしていて、VBA、VB、SQLなどを使っている。
システム導入にかかわる仕事をすることになり、VBAをいじることになった。
その時点でのVBAスキルは、初心者向け講習を2時間受けただけ。
中身はFor NextとIf文くらいのもので、With や Do~Loopなんて知らなかった。
そんな状態で、「これ変更して」って依頼が来る。
職場にはVBAができる人はおらず、かといって本社の担当者に丸投げするのもつまらないので、孤軍奮闘独学で学ぶことにした。

それから12ヶ月ちょっとが過ぎた。
自分で言うのも何だが、かなりスキルは上がった。


VBAについてはいろいろな本が出ているし、わかりやすいHPも結構ある。
でも、そういうものがあっても、スタートするきっかけは多いにこしたことはない。
それに自分なりの考え方を書くことで、つまずいていた人が先に進めるきっかけを与えられるかもしれない。

とにかく、初心者や未経験者にわかりやすいものにしたいと考えている。
ただし、基本は俺が書きたいときに書きたいものを書くので!

End Sub