公開講座 2015 08 15-1 excel ガイダンスtshikana/kouza/2015_08_15_text.pdf2015年度...
TRANSCRIPT
2015 年度
琉球大学公開講座
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
質問があれば…• 公開講座修了後,質問等があれば
• 農学部 地域農業工学科
鹿内 健志
[email protected]まで,メール下さい。
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
8
「開発」タブをリボンに表示するにチェックをつけてOK
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
①1行目には「Sub」と入力し、空白に続けてSample1(マクロの名前)を入力する。マクロの名前は何でもよいが、同じモジュール内で、同じ名前のマクロは作れない。
②マクロの名前まで入力したら、「Enter」キーを押す。すると、入力したマクロ名の後ろに空のかっこが挿入され、さらに「EndSub」という一文
が自動的に追加される。(マクロの終わりを表す一文)15
• マクロの命令文(コード)は、この「Subマクロ名()」から「EndSub」の間に記述するのが基本となる。
• マクロ名の後ろに挿入された空のかっこは、マクロにとって特別な記号で、高度なマクロを作成するとき、このかっこの中に必要な情報を記述する。(今回は、取りあえず必要な記号と理解する)
16
12
• 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
• 「=」記号は、「右側の値を、左側に代入する」
1
1
1
1
x
x
x x
x x
に を代入する
に を代入する
の式は数学としては成立しないがプログラムとして,翻訳して考える。
1x x
9
作成したコードの文型は?
10
28
2行目の命令
• 文型(1)に相当
• 「○○を口口する」の形
• 「Sheet2」を選択する
11
3行目の命令
• 文型(2)に相当
• 「○○の□□を△△する」
• 2行3列目のセル(C2)の値に”「Excel VBA」を代入する
12
29
13
• 「対象」→「オブジェク卜」
• 「命令」→「メソッド」
• 「様子」→「プロパティ」
オブジェクト,メソッド,プロパティが,それぞれどのようなものか,どのように記述されるのかを次に学習します。
↑ これらが理解できないため,自習の際,躓く14
30
オブジェクトとは
• 「オブジェクト」-処理の対象となるもの
• オブジェクトには、ブック(ファイル),シート,セルなどがあります。
「オブジェクト」とは直訳すると「もの」という意味
15
オブジェク卜の階層構造
• 各オブジェクトが親子関係を持つ。
• オブジェクトの関係を階層構造で表現できる。
16
31
• オブジェクト(対象)は、上位の階層から順にピリオドで区切って表現する
オブジェクトの階層構造17
• 同じオブジェクトの集まりをオブジェクトの「コレクションJといいます。
• コレクションはオブジェクトの複数形で表現します。
• たとえば、• 開いているすべてのブックを「Workbooksコレクション」
• 指定されたブックまたは作業中のブックにあるすべてのシートを「Worksheetsコレクション」
コレクション(集合体)
18
32
• 複数のオブジェクト(コレクション)の中からひとつのオブジェクトを指定するには、特定のオブジェクトを指定する。
• いきなりブック名で指定しない。
• 表現方法 コレクション(“名前”)
19
• 「田中」(特定のオブジェクト)をVBAで指定する場合
“田中” ×
生徒たち“田中” ○コレクション 特定のオブジェクト
20
33
• いきなり “Book1.xlsx” と指定はできない
• いきなり “Sheet1” と指定はできない
21
Workbooksコレクション(現在開いているブック)の中の”Book1.xlsx”と言う名前のブックの中の,
Worksheetsコレクション(すべてのシート)の中の”Sheet2”と言う名前のシートの中の,
2行3列目(C2)のセル
Sheet2の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セルを表現する時
←「Sheet2」が表示されていれば,OK
←「Sheet2」が表示されていない場合。例えば「Sheet1」が表示されているとき。
↑複数のブック(ファイル)Book.1.xlsx,Book2.xlsがあり,「Book2」が表示されているとき。
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
コメント• アポストロフィ(‘)で始まる文-コメント行
• マクロの動作とは無関係で,本文と区別するために緑色• ①マクロの動作を誰がみてもわかるように説明文を添える時
• ②わざと,動作させないようにするとき
• ③修正作業などの時,万が一の際,いつでも元のコードに復元できるように
① (説明行)
② (動作確認など)
③
①(ステートメントの横に記載)
40
43
• コメントブロック機能
41
MsgBox (Range("A4") .Value)
• A4セルのオブジェクトとして「Range(“A4”)」と記述し、値というプロパティを取得するために、「.」(ピリオド)に続けて「Value」と記述。
値のプロパティ名「Value」MsgBox関数( )内の値を表示する関数42
44
• 「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
Range("E4").Font.Color = vbRed• 「Range(“E4”)」というE4セルのオブジェクトに続け,「Font」でフォントのオブジェクトを示す。(「Range(“E4”).Font」で「E4セルのフォント」を意味)
• 「Color」は色のプロパティ名 (「Font.Color」で「フォントの色」を意味)
• 「Range(“E4”).Font.Color 」で「E4セルのフォントの色」というプロパティに赤色を意味する定数「vbRed」を代入する処理
「vbRed」 は赤色を表す定数(定数:ある決まった値を持つ文字列)青を表す「vbBlue」黒を表す「vbBlack」など
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関連の書籍を参考にしたりして、オブジェクトやプロパテイを探して何度も繰り返していくうちに、使えるようになっていく。
52
49
• 「対象」→「オブジェク卜」
• 「命令」→「メソッド」
• 「様子」→「プロパティ」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に Hello と表示
Sample2‐2_練習問題.xlsm
60
53
メソッドの動作を細かく指示する
• ワークシートを追加する場合
• 普通に追加すると,ワークシートはアクティブシートの左側に挿入
• VBA構文では「2番目のシートの右に」など,細かな指示をAddメソッドに与えて挿入する
61
•実習2‐3
•完成品 Sample2‐3.xlsm
62
54
63
オブジェクト
「引数」とは
• メソッドが実行する際の“条件”を指定するためのVBAの仕組み
• メソッドメによっては,どのように動作するのか、細かく指定しなければならないケースがある。
• その際に利用するのが引数
メソッド 引数
64
55
オブジェクト
「2番目のシートの右(after)に」
メソッド 引数
「2番目のシートの左(before)に」
65
• メソッドによっては、引数が複数あるものがある。
• 引数が1つであろうと複数あろうと、引数にはそれぞれ名前がつけられており、どのような引数なのかがわかる。
• 引数を利用できるメソッドがある一方で、引数がないメソッドも多数ある。
• 引数を省略できるメソッドもある。
• 引数があるのかないのか、省略可能なのか、省略するとどうなるのかなどはメソッドによってまちまち。適宜調べて使う。
66
56
• 引数の使い方
• メソッド名の後ろに半角スペースに続けて引数を記述
• 「:=」 (コロンとイコール)を記述
• 引数に指定する設定値を記述
• 引数が複数ある場合は、「引数名:=設定値」の形式を「,」(カンマ)で、区切って並べる
67
• 引数の使い方
• メソッド名の後ろに半角スペースに続けて引数を記述
• 「:=」 (コロンとイコール)を記述
• 引数に指定する設定値を記述
68
57
• VBEの「コードアシスト」機能
69
• 「コンパイルエラー」が出てしまったら
70
58
71
「実行時エラー」が出てしまったら
72
59
73
74
60
75
61
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 : C2セルの値に『合格』を代入
• 処理2 : 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
47
114
関数を使って複雑なデータ処理(データ: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