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