2015 年度 琉球大学公開講座
2015 年度琉球大学公開講座 はじめての Excel の VBA プログラミング 2015 年 8 月 15 日 ( 土 ) 10:00~16:00 農学部地域農業工学科 鹿内健志 1 注意事項 この部屋は飲食禁止です ペットボトル等は可 飲食は隣の 221 室 ( 会議室 ) にて 琉球大学は建物内禁煙です 喫煙はパソコン室前, 中庭にて御願いします クーラーの温度調整は随時おっしゃってください パソコンやインターネットの不正利用は禁止です 2 1
内容 Excelを用いて, 表の作成やグラフの作成などが容易にできるようになっています この講座では, このような基本的なExcelを既に活用している人たちが, さらに複雑な処理を行うことができる ExcelVBAの基本的技術を身に付けることを目的にします いままでExcelVBAを使ったことはないが, ExcelVBAやプログラミングに挑戦してみたいという人に, マクロとは何か, プログラムとは何かという基本的な知識を実習を通して学習していきます 3 自己紹介 鹿内健志 ( しかないたけし ) 大阪府茨木市に生まれる 九州大学農学部農業工学科農業機械学コース卒業 1990 年ヤンマーの技術研究所に入社 ディーゼルエンジンの研究 開発 1994 年琉球大学農学部 ( 現在まで ) 情報システムを利用した農業生産支援システムの開発 サトウキビ機械収穫作業のスケジューリング 台風で壊れない環境制御型グリーンハウスの開発 4 2
大城梨実さん アシスタント 大学院地域農業工学コース修士 1 年 新垣龍一さん 農学部地域農業工学科 4 年生 操作等でわからないことがあれば, その場で手を挙げて, 聞いて下さい 5 予定 10:00-10:15 ガイダンス 10:15-10:45 Excel VBA/ マクロとは 10:45-12:00 VBA の基礎文法 12:00-13:00 昼休み ( 学内食堂が休業です 各自で取って下さい ) 13:00-13:30 Excel のマクロの自動記録 13:30-14:00 変数の使い方 14:00-14:15 休憩 14:15-15:45 条件分岐 と 繰り返し 関数を使って複雑なデータ処理 15:45-16:00 質問, まとめ, 修了証, アンケート 6 3
ドライブ K: 共有ドライブ ( 全員がアクセス可能 ) N: 固有のドライブ ( 自分だけがアクセス可能 ) K ドライブのデータを N ドライブにコピーし, 作業中は N ドライブに書き込んで下さい 持ちかえるときは N ドライブをコピーして持ち帰って下さい 7 質問があれば 公開講座修了後, 質問等があれば 農学部地域農業工学科鹿内健志 tshikana@agr.u-ryukyu.ac.jp まで, メール下さい 8 4
1.Excel VBA/ マクロとは 1 Excel の VBA と マクロ マクロ あらかじめ作成した 命令書 " に従って ソフトを自動実行させる機能 VBA 命令書を作るためのプログラミング言語が Excel では VBA(Visual Basic for Applications) と呼ばれる 2 5
Excel マクロの記録 という機能 これを使うと ユーザーが実際に操作した内容を記録して自動化できる このことから マクロ = 操作の記録と思っている人がいるが 正しくない マクロ = 操作を記録する VBA= プログラムを記述する マクロ あらかじめ作成した 命令書 " に従って ソフトを自動実行させる機能 VBA 命令書を作るためのプログラミング言語 3 Excel の起動 4 6
VBA の利用の準備 ファイル ー オプション ー リボンのユーザー設定 5 右の メインタブ にある 開発 チェックをつけて OK 6 7
Excel2007 の場合 開発タブの表示 7 開発 タブをリボンに表示するにチェックをつけて OK 8 8
リボンに 開発 タブが追加される 開発 タブを選択すると マクロ などのメニューが並んでいる 9 マクロを書いてみよう クリック 開発 タブで VisualBasic ボタンを押す [Alt] キーを押しながら [F11] キーを押しても起動 10 9
挿入 メニューの 標準モジュール を選ぶ すると 画面左側の プロジエクト 欄に Module1 といいツリーが追加され 右側には真っ白な編集画面が聞く モジュールとは, マクロを書く用紙のようなもの 通常のマクロは, 標準モジュールに記述する Module1 は 1 つめのモジュール ( 複数のモジュールを挿入して, マクロを管理することもできる ) 11 マクロを管理するモジュール ここにマクロの命令文を書く マクロの作成や編集などに使うツール Visual Basic Editor (VBE と呼ぶ ) 12 10
命令文 ( コード ) を記述する 13 実習 1 1 完成品 Sample1 1.xlsm 14 11
11 行目には Sub と入力し 空白に続けて Sample1( マクロの名前 ) を入力する マクロの名前は何でもよいが 同じモジュール内で 同じ名前のマクロは作れない 2 マクロの名前まで入力したら Enter キーを押す すると 入力したマクロ名の後ろに空のかっこが挿入され さらに EndSub という一文が自動的に追加される ( マクロの終わりを表す一文 ) 15 マクロの命令文 ( コード ) は この Sub マクロ名 () から EndSub の間に記述するのが基本となる マクロ名の後ろに挿入された空のかっこは マクロにとって特別な記号で 高度なマクロを作成するとき このかっこの中に必要な情報を記述する ( 今回は 取りあえず必要な記号と理解する ) 12 16
VBE では 1 行記述して Enter キーを押すたびに 文法やスペルなどのチェックが行われ 必要に応じて決まった記号や文字を追加してくれる VBA で使用する主な単語は Sub End のように先頭の 1 文字を大文字で入力するが これも自動的に変換してくれるので 全て小文字で入力しても構わない 17 Sub マクロ名 () と End Sub の間にコード ( 命令 ) を記述する その際 [Tab] キーを押してインデント ( 字下げ ) する習慣を身に付けること VBA では コードの構造を把握しやすくするために 要所でインデントを行うのが作法 18 13
コードの内容 Sheet2 を選択する C2(2 行 3 列目の ) セルに Ecel VBA と入力する Cells (2,3) の, の後ろや = の両側には半角スペースがある VBA では 記号の前後にスペースが必要になることがあるが 実際はあまり意識しなくてよい ほとんどの場合 Enter キーを押して改行すると VBE が自動的に補ってくれる 19 マクロを実行する (1) 実行したいマクロの内部にカーソルを置いて ツールバーの [Sub/ ユーザーフォームの実行 ] ボタンを押す ( 今回のマクロは Sheet2 というシートを選択する命令が含まれるので Sheet2 が存在しないとエラーが発生する シートがない場合は実行前に挿入しておく ) 20 14
今回のマクロは Sheet2 というシートを選択する命令が含まれるので Sheet2 が存在しないとエラーが発生する シートがない場合は実行前に挿入しておく 21 マクロを実行する (2) 開発 タブにある マクロ ボタンからも実行できる マクロ 画面で マクロ名を選択し 実行 ボタンを押す ここで 編集 ボタンを押すと VBE が起動して 選んだマクロを編集できる 22 15
ファイルの保存 作成したマクロを保存するには ブック ( ファイル ) に名前を付けて保存する マクロのコードは セル内に入力した数値や計算式などと同じように ブックのデータとして保存される このとき注意したいのが ファイル形式 マクロ入りのブックを保存するときは ファイルの種類 を マクロ有効ブック と指定する必要がある 23 N ドライブに, Sample1.xlsm で保存 24 16
Excel 2003 以前は 標準のファイル形式にマクロを保存できたが Excel 2007 以降はセキュリティ上 標準のファイル形式とマクロを含むファイルの形式が分けられている マクロは便利な半面 データを破壊するような悪意のあるプログラム ( マクロウイルス ) も作成が可能 そのため マクロ入りブックを区別して 意図せずにマクロを実行できないようにしてある 25 26 17
Excel2007 の場合 27 実習 1 2 完成品 Sample1 2.xlsm 28 18
Sheet1 の B4 セルに, ABC を入力 マクロを作成してください 29 30 19
マクロの名前の規則 31 マクロを実行する カーソルの位置 32 20
マクロを実行する カーソルの位置 一旦,2 つのシートのセルから Excel VBA と ABC を削除し, カーソルを移動し, マクロの実行 33 マクロを実行する カーソルの位置 カーソルを 2 つのマクロの外へ移動し, マクロの実行 34 21
実行するマクロを選択する 35 モジュール モジュール とは プログラムを記述するためのシートです ひとつのモジュールには複数のプログラムを記述できます マクロを記録すると 操作内容が Module( モジュール ) に記述されます 36 22
プロシージャ VBA では モジュールに記述されたプログラムのことを プロシージャ といいます プロシージャは Sub から EndSub までがひとつの実行単位になります プロシージャは VBA の命令文のかたまり 37 23
2.VBA の基礎文法 1 Excel の VBA と マクロ マクロ あらかじめ作成した 命令書 " に従って ソフトを自動実行させる機能 VBA 命令書を作るためのプログラミング言語が Excel では VBA(Visual Basic for Applications) と呼ばれる VBA は言語 文法 2 24
命令文の構文 3 命令文の構文 今回の講座では, まず, オブジェクト式の特徴を理解しておきたい 一般に マクロが書けない, 他人のコードが読めない といった VBA に対する悩みの多くは オブジェクト式の理解不足によることが多いと言われる 4 25
オブジェクト式の基本 2 文型 5 何らかの動作を伴う命令で を する と翻訳できる 例えば セルを削除する ブック ( ファイル ) を聞いたりする 6 26
対象の様子や状態を調べたり設定したりするときの書き方 の を する と翻訳できる 例えば セルに値を入力する シートの名前を調べる 7 文型 (2) で使う = 記号は 数学で学習する 等しい という意味ではない 右側の値を 左側に代入する という働きを担う記号 1 行 2 列目のセル (B2) の値に 日経 と言う文字を代入する VBA などのプログラミングでの 値 とは 数字や文字のこと と理解しておく 8 27
= 記号は 右側の値を 左側に代入する x x 1 xにを代入する 1 x 1 xにx 1を代入する x x 1 の式は数学としては成立しないがプログラムとして, 翻訳して考える 9 作成したコードの文型は? 10 28
2 行目の命令 文型 (1) に相当 を口口する の形 Sheet2 を選択する 11 3 行目の命令 文型 (2) に相当 の を する 2 行 3 列目のセル (C2) の値に Excel VBA を代入する 12 29
13 対象 オブジェク卜 命令 メソッド 様子 プロパティ オブジェクト, メソッド, プロパティが, それぞれどのようなものか, どのように記述されるのかを次に学習します これらが理解できないため, 自習の際, 躓く 30 14
オブジェクトとは オブジェクト とは直訳すると もの という意味 オブジェクト - 処理の対象となるもの オブジェクトには ブック ( ファイル ), シート, セルなどがあります 15 オブジェク卜の階層構造 各オブジェクトが親子関係を持つ オブジェクトの関係を階層構造で表現できる 16 31
オブジェクト ( 対象 ) は 上位の階層から順にピリオドで区切って表現する オブジェクトの階層構造 17 コレクション ( 集合体 ) 同じオブジェクトの集まりをオブジェクトの コレクションJ といいます コレクションはオブジェクトの複数形で表現します たとえば 開いているすべてのブックを Workbooksコレクション 指定されたブックまたは作業中のブックにあるすべてのシートを Worksheetsコレクション 18 32
複数のオブジェクト ( コレクション ) の中からひとつのオブジェクトを指定するには 特定のオブジェクトを指定する いきなりブック名で指定しない 表現方法コレクション ( 名前 ) 19 田中 ( 特定のオブジェクト ) を VBA で指定する場合 田中 生徒たち 田中 コレクション 特定のオブジェクト 20 33
いきなり Book1.xlsx と指定はできない いきなり Sheet1 と指定はできない 21 Sheet2 の C2 のセルを指定するとき オブジェクトの階層構造 Workbooks コレクション ( 現在開いているブック ) の中の Book1.xlsx と言う名前のブックの中の, Worksheets コレクション ( すべてのシート ) の中の Sheet2 と言う名前のシートの中の, 2 行 3 列目 (C2) のセル 疑問?: セルはCellsだけか 22? 34
セルの表現 セルを指し示す書き方は コレクションを指定しない Range または Cells という単語を使う (2 方法 ) セルの番地を文字で指定 A1 セル : Range( A1 ) A1~B3 セル : Range( A1 :B3 ) セルの行番号と列番号を数字で指定 C2 セル : Cells (2,3 ) Range の用に範囲で指定することはできない 23 文字 ( の中は文字 ) Range( C2 ) Cells(2,3) 数字 24 35
文字 ( の中は文字 ) Range( C2 ) Cells(2,3) Range: オブジェクト Cells: プロパティ 数字 プロパティは本来, オブジェクト名. プロパティ名 ( 対象. 様子 ) といった書式にて, オブジェクトとセットで記述するもの しかし,Cells プロパティの書式は, プロパティのみで記述される これは基点となるオブジェクトの記述を省略した形 Cells プロパティは基点となるオブジェクトの記述を省略すると, 自動的に (A1 のセルが基点となり ) 行, 列のセルを指定する と覚える ( 厳密な説明は面倒になるので ) 25 基点オブジェクトからCellsプロパティで指定 ( このスライドは理解しなくても良い ) 指定したオブジェクトを基点とし, そこから相対的に行と列を指定してセルを指定する 26 36
文字 ( の中は文字 ) Range( C2 ) Cells(2,3) 数字セルを指定する方法に,Range と Cells があり, 文字列でセルを指定するか, 行番号と列番号で指定するかの違いがあると理解すれば良い 27 親オブジェクトの記述の省略 省略した場合 アクテイブなオブジェクトが親オブジェク卜として認識される アクティブ : 表示している 例 Book1 に含まれる Sheet2 にある C2 セルを表現する時 複数のブック ( ファイル )Book.1.xlsx,Book2.xlsがあり, Book2 が表示されているとき Sheet2 が表示されていない場合 例えば Sheet1 が表示されているとき Sheet2 が表示されていれば,OK 28 37
実習 2 1 完成品 Sample2 1.xlsm を起動してください 29 30 38
オブジェクトの階層構造 省略した場合 アクテイブなオブジェクトが親オブジェク卜アクティブ : 今, 表示している 31 プロパティ とは プロパティ とは直訳すると 属性 という意味 プロパティ : オブジェクトの状態を表すもの 対象 オブジェク卜 命令 メソッド 様子 プロパティ 32 39
オブジェクトの状態 とは たとえば A1 セル というオブジェクト 文字列や数値が入力 文字色 フォント サイズなどの書式を設定 数式も入力 罫線をつけたり 縦横の大きさを変更可能 33 普段 Excel を使っている中で 何度も目にしたり触ったりしている書式などの設定項目のこと 34 40
A1 セルには, さまざまなプロパテイがあります A1 セル以外のセルも 同様のプロパテイがあります セルはどれも同じ種類のプロパティを持ちますが それぞれのプロパティの中身はセルごとに異なります ワークシートなどセル以外のオブジェクトも そのオブジェクごとに特有のプロパティを持ちます 35 プロパティの使い方 それぞれのプロパティに 名前 が割り振られている オブジェクト名とプロパティ名を半角の. ( ピリオド ) で結んで記述する プロシージャの中に 上記の書式で記述すれば そのオブジェクトのプロパティが扱えるようになる 36 41
プロパティを取得する プロパティを取得する とは 目的のオブデジェクトの現在のプロパテイの中身を取得すること 取得した中身は 計算などに利用する VBAの書式 37 実習 2 2 完成品 Sample2 2.xlsm を起動して, 実行してください 38 42
MsgBox 関数 ( ) 内の値を表示する関数 39 コメント アポストロフィ ( ) で始まる文 - コメント行 マクロの動作とは無関係で, 本文と区別するために緑色 1 マクロの動作を誰がみてもわかるように説明文を添える時 2 わざと, 動作させないようにするとき 3 修正作業などの時, 万が一の際, いつでも元のコードに復元できるように 1 ( 説明行 ) 3 1( ステートメントの横に記載 ) 2 ( 動作確認など ) 40 43
コメントブロック機能 41 MsgBox (Range("A4").Value) A4 セルのオブジェクトとして Range( A4 ) と記述し 値というプロパティを取得するために. ( ピリオド ) に続けて Value と記述 値のプロパティ名 Value 44 MsgBox 関数 ( ) 内の値を表示する関数 42
Range( A4 ).Value という記述によって A4 セルに現在入力されている値を取得し MsgBox 関数で 表示するという処理を行うコード 43 プロパティを取得する プロパティを取得する とは 目的のオブデジェクトの現在のプロパテイの中身を取得すること 取得した中身は 計算などに利用する VBAの書式 44 45
プロパティを設定する プロパティを設定する とは 目的のオブジェクトのプロパテイの中身を変更すること そのオブジェクトの状態を変更するという意味 たとえば A1セルの文字色が現在赤色なのを青色に変更する 現在空白のA1セルに値を入力する 該当するプロパティに変更したい内容を設定する VBAの書式 45 実習 2 2 完成品 Sample2 2.xlsm 46 46
Range("E4").Value = 98 E4 セルの Value プロパティに 98 という数値を代入する処理を行うコード 47 vbred は赤色を表す定数 ( 定数 : ある決まった値を持つ文字列 ) 青を表す vbblue 黒を表す vbblack など Range("E4").Font.Color = vbred Range( E4 ) という E4 セルのオブジェクトに続け, Font でフォントのオブジェクトを示す ( Range( E4 ).Font で E4 セルのフォント を意味 ) Color は色のプロパティ名 ( Font.Color で フォントの色 を意味 ) Range( E4 ).Font.Color で E4 セルのフォントの色 というプロパティに赤色を意味する定数 vbred を代入する処理 48 47
Range("E4").Font.Color = vbred Range( E4 ) という E4 セルのオブジェクトに続け, Font でフォントのオブジェクトを示す ( Range( E4 ).Font で E4 セルのフォント を意味 ) Color は色のプロパティ名 ( Font.Color で フォントの色 を意味 ) 49 厳密には Font オブジェクトは Range オブジェクトの Font プロパティで取得する という定義になっている しかし ここで説明したような解読の仕方で実用上大きな問題はない とにかく階層構造になっていることだけを理解しておけば OK オブジェクトの階層構造は. を日本語の の と見なして コードを左から順番に読んでいくと 比較的容易に把握できる オブジェクトの階層構造の話は初心者には相当ややこしいので 今すぐに理解できなくとも心配せず 何度か読み直したり 先に進んだ後で 再び 理解すれば良い とりあえずは Range( E4 ).Font.Color. は E4 セルのフォントの色 というプロパティを表す とだけ把握できればよい 50 48
Range("E4").Font.Color = vbred Range( E4 ).Font.Color で E4 セルのフォントの色 というプロパティに赤色を意味する定数 vbred を代入する処理 vbred は赤色を表す定数 ( 定数 : ある決まった値を持つ文字列 ) 青を表す vbblue 黒を表す vbblack など 51 オブジ工クトおよびプロパティを扱うコツ & 注意点 ExcelVBA には膨大な数のオブジェクトやプロパテイがある その中から 自分が再現したい操作をプログラミングするために 適切なオブジェクトやプロパティを選ぶ必要がある いかにして自分が必要とするオブジェクトやプロパティを見つけるか? すべてのオブジェクトやプロパティをおぼえるのは無理 どのオブジェクトが親オブジェクトになっているのか どのプロパティが設定できるのかすべておぼえるのも無理 結局, ヘルプを活用したり VBA 関連の書籍を参考にしたりして オブジェクトやプロパテイを探して何度も繰り返していくうちに 使えるようになっていく 49 52
対象 オブジェク卜 命令 メソッド 様子 プロパティ 53 メソッドとは メソッド : オブジェクトの動作 A1 セル というオブジェクトを考える A1 セルに入力されている文字列や数値 右クリック [ 削除 ] などで削除できる 値や書式をコピー & 貼り付けできる A1 セルに対する操作は オブジェクトの 動作 であり A1 セル オブジェクトのメソッドになるのです メソッドとは簡単にいえば 普段 Excel を使っている中で 何度も利用している各種操作のこと 54 50
メソッドの使い方の基本 それぞれのメソッドに 名前 が割り振られる メソッド名を VBE 上にて 定められた書式に則って記述する オブジェクト名とメソッド名を半角の. ( ピリオド ) で結んで記述 55 実習 2 2 完成品 Sample2 2.xlsm 56 51
例 57 58 52
練習問題 Sample2 2 を使ってセル A7 に Hello と表示 59 練習問題 Sample4 を使ってセル A7 に Sample2 2_ 練習問題.xlsm Hello と表示 60 53
メソッドの動作を細かく指示する ワークシートを追加する場合 普通に追加すると, ワークシートはアクティブシートの左側に挿入 VBA 構文では 2 番目のシートの右に など, 細かな指示をAddメソッドに与えて挿入する 61 実習 2 3 完成品 Sample2 3.xlsm 62 54
63 オブジェクト メソッド 引数 引数 とは メソッドが実行する際の 条件 を指定するためのVBA の仕組み メソッドメによっては, どのように動作するのか 細かく指定しなければならないケースがある その際に利用するのが引数 64 55
オブジェクト メソッド 引数 2 番目のシートの左 (before) に 2 番目のシートの右 (after) に 65 メソッドによっては 引数が複数あるものがある 引数が 1 つであろうと複数あろうと 引数にはそれぞれ名前がつけられており どのような引数なのかがわかる 引数を利用できるメソッドがある一方で 引数がないメソッドも多数ある 引数を省略できるメソッドもある 引数があるのかないのか 省略可能なのか 省略するとどうなるのかなどはメソッドによってまちまち 適宜調べて使う 66 56
引数の使い方 メソッド名の後ろに半角スペースに続けて引数を記述 := ( コロンとイコール ) を記述 引数に指定する設定値を記述 引数が複数ある場合は 引数名 := 設定値 の形式を, ( カンマ ) で 区切って並べる 67 引数の使い方 メソッド名の後ろに半角スペースに続けて引数を記述 := ( コロンとイコール ) を記述 引数に指定する設定値を記述 68 57
VBE の コードアシスト 機能 69 コンパイルエラー が出てしまったら 70 58
71 実行時エラー が出てしまったら 72 59
73 74 60
61 75
3.Excel のマクロの自動記録 マクロによる作業を簡易化した伝票の作成 1 マクロの自動記録 1 行 1 行の命令文 ステートメント を理解しないといけないのか? 複雑なものを記録する場合 簡単なものならば, 一連の操作を自動的に, そのまま, 翻訳し, マクロを記録することができる 2 62
使用ファイル フォルダー Sample3 作業用 マクロ ( 例 : 伝票 )( 練習 ).xlsx 完成ファイル マクロ ( 例 : 伝票 )( 完成 ).xlsm 3 発注伝票の作成 発注伝票を何枚も作成するとき 新しいものを作るたびに,B 列と E 列の数値を消去する必要がある 多数処理する場合は不便 マクロにより, データ消去 のボタンを押せば一括して不要な数値を消去する 4 63
発注伝票の作成 手順 マクロに記録する操作を確認する マクロの自動記録 マクロを実行し, 確認 マクロを編集 ( テキストでは, わざと修正箇所が必要な手順でマクロを記録します ) ボタンを作成し, マクロと関連付ける 完成ファイルの保存 テキストに沿って作業を進めます 5 フォルダー Sample3 マクロ ( 例 : 伝票 )( 練習 ).xlsx を開いてください 6 64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
完成したマクロ 7 8 79
9 Range オブジェクトに対して Select メソッド 10 80
Selectionオブジェクトに対しClearContentsメソッド ClearContentsメソッドセルの値や数式をクリア Selection は VBA ではプロパティ 11 Selection は, オブジェクト? セルではないよね Selection は, 選択されているセルを特定するときに使う Selection は, セルを特定するためのキーワード VBA では, オブジェクトが特定できるキーワード をプロパティに分類する Selection プロパティ と呼んで, セルというオブジェクトを特定するキーワード として用いる 12 81
Selectionオブジェクトに対しClearContentsメソッド ClearContentsメソッドセルの値や数式をクリア Selection は VBA ではプロパティ なぜ? と考えずに意識せず使うほうが良い 実践を積んでいくうちに気にならなくなる 13 82
4. 変数の使い方 1 変数とは 値を入れる 箱 " のようなもの 中に数字や文字を入れておき その中身に従って命令を実行できる 2 83
変数に値 ( 数字や文字 ) を入れるときは 文型 (2) で登場したのと同じ = を使う 変数名 = 値 のように書くと 右側に指定した値を変数に入れられる 3 例 Sample4.xlsm 4 84
N_01, N_02 というのが変数名 変数にセルの値を入れる N_01 にセル A1 の値 N_02 にセル A2 の値 N_01 + N_02 の計算結果を, セル A4 の値に入れる 5 練習問題 Sample4( ) の下に Sample4a( ) として追加して下さい 変数名 a1,a2 変数にセルの値を入れる a1 にセル C1 の値 a2 にセル C2 の値 a1 a2 の計算結果を, セル C4 の値に入れる a1 a2 の計算結果を, セル C5 の値に入れる 6 85
Sample5a.xlsm 7 Sample4.xlsm N_02 を N_O2 にする 0( ゼロ ) をO( オー ) に 8 86
入力ミスに気づかず, 計算を誤る可能性もある 9 10 87
一旦,Excel を閉じ, 新たに新規で Excel を起動してください 11 12 88
Sample4_ 変数宣言.xlsm を開いてください 13 マクロ内で使う変数名を, 事前に 宣言 する Dim 変数名 と書き加えるだけ 14 89
再び,N_02 を N_O2 にする 0( ゼロ ) を O( オー ) に 15 間違った変数名を入力したときに, 宣言されていない変数が使われている と指摘してくれる仕掛け 16 90
5. 条件分岐 と 繰り返し マクロ全体の制御 1 命令文の構文 2 91
セルやシートの操作 - オブジェクト式の構文で可能 マクロの記録 で作成することが可能 しかし 同じ処理を繰り返す ( 繰り返し ) もし,A1 セルが ならば, を実行し, でなければ を実行 ( 条件分岐 ) ボタンを設置して, セルの値をクリアする ( フォームの利用 ) 上記は, マクロ全体を取り扱う操作 マクロ全体を制御するとき - ステートメントの構文 3 条件分岐 4 92
繰り返し 5 実習 5 1 Sample5._ 元データxlsX を起動してください ( 参考 : 完成品は Sample5.xlsm) 6 93
条件により処理をかえる Excel には IF 関数がある IF 関数とおなじ働き VBA: IF ステートメント 7 基本の 2 パターン 書式 (1) 条件が正しかったときだけ処理を実行し 条件が正しくなかったときは何も実行しない 書式 (2) 条件が正しくなかったときにも別の処理を行う 8 94
50 点以上 合格 それ以外 不合格 9 得点が50 点以上なら 合格 そうでなければ 不合格 と入力 条件, 処理 1, 処理 2を考える B2セルの値が50 以上なら C2セルの値に 合格 を代入し そうでなかったらC2セルの値に 不合格 と代入する 条件 : B2セルの値が50 以上 処理 1 : C2セルの値に 合格 を代入 処理 2 : C2セルの値に 不合格 と代入 10 95
条件の書き方 11 条件 : B2 セルの値が 50 以上 12 96
ここまで, 作成してみましょう 13 14 97
15 16 98
記述するときのコツ マクロは 分かっているところから書く 上から下に向かつて書き進める 例えば If ステートメントの書式 1 行目に条件を書いたら いずれは 3 行自の Else と 5 行目の EndIf を書くことになる そこで 実行したい処理を書く前でに 先に Else と EndIf を書いてしまうとよい 17 分かっているところから書くことの利点 書き忘れを防げる 実行したい処理を考えているうちに Ifステートメントの内部であることを忘れて EndIf を書き忘れるケースは多い すると マクロ全体の流れがおかしくなり トラブルのもと 全体の構造が分かりやすくなる 条件分岐の範囲などが明確になるので マクロの全体像を把握しやすくなる マクロを作るときは どこで何をするのか という全体像を意識して 最初はラフに作り 徐々に細部を作り込んでいくようにした方がよい 18 99
処理 1 処理 2 : C2 セルの値に 合格 を代入 : C2 セルの値に 不合格 と代入 Cells(2, 3).Value = " 合格 Cells(2, 3).Value = " 不合格 " 19 実際に作成してみてください 20 100
21 繰り返し構文で連続処理 繰り返し処理を実現するステートメント For Next 代表格で マクロの重要な構文 22 101
セルを 上から順番に あるいは左から順番に操作することで 多数のデ - タを連続して処理したいケース マクロでは Cells( 行, 列 ) を使うことで 行と列の番号 ( 数字 ) でセルを指定できる そこで この行または列に 1 ずつ増える数字 を順番に指定できれば 操作可能 23 For Next の構文 For の行と Next の行の聞を 指定した回数だけ繰り返し実行 指定した変数の値を 初期値 から 終了値 になるまで 1 ずつ増加 24 102
変数 ( i ) の中身を 1 ずつ増やしながら 初期値から終了値まで繰り返す For i= 1 To 3 の場合 i を1から3まで増やしながら3 回処理を繰り返す 25 実際に作成してみましょう (Sample1 の下に追加してください ) 26 103
27 28 104
Sample2 を最下部にコピーし,Sub Sample3 に変更し, Cells(i, 5).Value = VBA の部分を削除し,Samaple1 の必要部分をコピーする 繰り返し処理できるように変数 i に置き換え,5 回繰り返す 29 30 105
見やすく作ることもポイント 31 ステップ実行 For Next を使ったマクロでは 指定した回数の処理が一気に実行される この間で何か問題が発生したり 思うような処理が行えなかったりしたときには ステップ実行 で動作を確認することができる マクロを1 行ずつ実行して 処理の経過を確認す るための機能 32 106
ステップ実行 を行うには マクロの中にカーソルを置いて [F8] キーを押す マクロの先頭行が黄色く反転する 黄色く反転した行は 次に [F8] キーを押したときに実行される行 [F8] キーを押すたびに l 行ずつ実行できる どのコードでどんな処理が実行されるかを 1 つずつ確認できる 変数を宣言した Dim の行など 止まらない行もある 33 34 107
デバッグモード マクロを 1 行ずつ実行できる状態を デバッグモード または 中断モード と呼ぶ デバッグモードでは 現在の変数にどんな値が格納されているかなどを調べることが可能 調べたい変数の上に マウスポインターを合わせる 35 人数が増えると, 繰り返し回数の終了値の 5 を書き換える必要がある 最終行まで自動的に処理する というマクロを考えてみる 36 108
End モード 機能 表の最終セルを調べる機能は マクロを使わなくても 通常の操作で利用できる 例えば 表が作られたシートでA1セルを選択し [Ctrl] キ -を押しながら[ ] キーを押してみる アクティブセル ( 選択セル ) がA 列の最終セルにジャンプする ここで言う最終セルは これ以降は空欄セルが続くという デ-タが入力された最後のセル 同様に [Ctrl] キーを押しながら [ ] キーや [ ] キー [ ] キーを押せば 表の上 左 右にある最終セルにジャンプすることができる 37 Endモードを利用する際の書き方を マクロの記 録 を使って調べてみる 38 109
39 Visual Basic Editor を聞くと 新しいモジュール (Module21d など ) ができているので これをダブルクリック すると右側に 記録されたマクロのコードが表示される 40 110
41 Selection.End(xlDown).Select End はプロパティですが,( ) の中の変数に示される移動方向の終端のセル ( オブジェクト ) を返します 講座ではプロパティは オブジェクトの属性のような説明をしてきました そのプロパティがオブジェクトを返すというのは理解しにくいですが これを詳しく説明するのは難しいので 今は プロパティには 値の設定 取得をするものと オブジェクトを返すプロパティがあると言う事だけ知っておいてください 42 111
セルの様子や状態の一つで ある 行番号 を調べるには Row という単語を使えばよい 43 Selection.End(xlDown).Row Cells(1, 1).End(xlDown).Row A1 セルから, 下に向かって向かってジャンプして行き当たるセルの行番号 44 112
45 完成ファイルは Sample5_ 最終行.xlsm 46 113
114 47
関数を使って複雑なデータ処理 ( データ :Sample6.xlsm) 115
116
117
118
参考文献今後, 自学自習で VBA を学びたい人に 立山秀利単行本 : 303 ページ価格 : 2,376 出版社 : 秀和システム ISBN-10: 4798017973 ISBN-13: 978-4798017976 発売日 : 2007/10/23 目次第 1 章マクロと VBA 第 2 章 VBA 記述の基本第 3 章 VBA のキモであるオブジェクトをマスターしよう第 4 章演算子と条件分岐第 5 章ループと変数第 6 章 VBA 関数 VBA 専用の関数を使おう第 7 章 VBA の実践アプリケーション 販売管理 の作成 119