290 likes | 768 Views
はじめての Excel マクロ・ VBA ~ (3) VBE によるプログラミング ~. 兵庫教育大学大学院 森山 潤 2005.8. VBE とは. ActiveX コントロールの設定では, VBE で直接,コードを編集した。 VBE = Visual Basic Editor つまり,マクロは,記録機能を使わずに VBE でプログラミングすることができる。. VBE のソースコード. 言い換えれば,記録機能で記録した操作内容は, Visual Basic で記述されている。. Sub sample() ← マクロ名 ~ 注釈文 ~
E N D
はじめてのExcel マクロ・VBA~(3) VBEによるプログラミング ~ 兵庫教育大学大学院 森山 潤 2005.8
VBEとは • ActiveXコントロールの設定では,VBEで直接,コードを編集した。 VBE = Visual Basic Editor つまり,マクロは,記録機能を使わずにVBEでプログラミングすることができる。
VBEのソースコード • 言い換えれば,記録機能で記録した操作内容は,Visual Basicで記述されている。 Sub sample()← マクロ名 ~ 注釈文 ~ Range("F4").Select ActiveCell.FormulaR1C1 = "150" Range("F5").Select ActiveCell.FormulaR1C1 = "200" ~ 中略 ~ Range("F15").Select ActiveCell.FormulaR1C1 = "125" Range("F4").Select End Sub
VBEのソースコード Sub sample() ・・・ 自動的に「()」が付く マクロ名「sample」のソースコードが記述される。 End Sub ・・・ Sub~End subの間が,一つのマクロになる。 Range("F4").Select ・・・ F4のセルを選択する ActiveCell.FormulaR1C1 = "150“・・・ 選択セルに代入 ※コマンドが自動生成されるので,不必要な記述も多い Range(“ F4”) = 150 も同じ意味
VBEのソースコード 反復処理 For i = 0 to 100 処理 Next i 条件分岐処理 If 条件文 Then 真の場合の処理1 Else 偽の場合の処理2 End if
VBEによるプログラミング VBEでルーレットゲームを作ってみよう!
VBEによるプログラミング <ルーレットゲームの機能> ●コマンドボタンを押すと,乱数を用いて3桁の数字を発生する。 ●決められた回数(200回等)だけ乱数を発生したら停止する。 ●停止した段階の数値が3桁の場合は「ビンゴ」,2桁の場合は「もう少し!」,ばらばらの場合は,「残念」と表示される。 ●特に,「7」-「7」-「7」の場合は,「ラッキー7!」と表示される。
VBEによるプログラミング • 画面のデザイン 数字の表示 セル結合。48point 文字の表示 セル結合。24point Excel上でシートを編集し,ゲーム画面をデザインする。
VBEによるプログラミング • VBEの起動 「ツール」→「マクロ」→「マクロ」
VBEによるプログラミング • マクロの新規作成 マクロ名の入力 例:「ttt3」等 「作成」ボタンをクリックすると,VBEが起動する
VBEによるプログラミング Sub ttt3() ・・・ マクロ名 この間にプログラムを記述 End Sub
VBEによるプログラミング • STEP1 セルに数値を出力する Range(“セル番地”)=値(or”文字列“) ルーレットを表示するセルをD3,F3,H3とすると, Range("D3") = 3 Range("F3") = 5 Range("H3") = 7
VBEによるプログラミング • STEP2 乱数を発生し,整数化する Rnd() ・・・ 0~1.0の範囲で乱数を発生 Round(数値, 桁) ・・・ 指定した桁以下を四捨五入 p1 = Round(Rnd() * 10, 0) 変数p1に,「10倍した乱数」の「0桁」以下を四捨五入した値(整数)を代入する。同様に,変数p2,p3を作成する。
VBEによるプログラミング • STEP3 整数化した乱数をセルに出力 Range,Round,Rndを組み合わせると,整数化した乱数をセルに出力することができる。 p1 = Round(Rnd() * 10, 0) p2 = Round(Rnd() * 10, 0) p3 = Round(Rnd() * 10, 0) Range("D3") = p1 Range("F3") = p2 Range("H3") = p3
VBEによるプログラミング • STEP4 指定した回数だけ,乱数発生処 理を反復する。 For a = 0 to 100 乱数発生の処理(STEP3のプログラム) Next a 処理が早すぎる場合は,「空ループ」を作ることで,わざと遅くすることができる。 (注意!!)For文とNext文は,別の行に記述する。
VBEによるプログラミング For a = 1 To 250 For b = 1 To 250 Next b p1 = Round(Rnd() * 10, 0) p2 = Round(Rnd() * 10, 0) p3 = Round(Rnd() * 10, 0) Range("D3") = p1 Range("F3") = p2 Range("H3") = p3 Next a 遅延処理(空ループ) 乱数発生の処理 反復処理
VBEによるプログラミング • STEP5 結果を判断してコメントを出力する If 条件文 Then 真の場合の処理1 Else 偽の場合の処理2 End if 条件文には,「(条件1) And (条件2)」のように複数の条件を設定することができる。(orも可)
VBEによるプログラミング • 条件判断の構造・・・3つの条件文の入れ子 もし 「7-7-7」 ならば 「ラッキー7!」 でなければ もし 「3つの数値が等しい」 ならば 「ビンゴ!」 でなければ もし 「2つの数値が等しい」 ならば 「おしい!」 でなければ 「残念!」
VBEによるプログラミング • STEP5-1 「ラッキー7(7-7-7)」の場合 条件: p1=7,p2=7,p3=7 処理: D13セルに「ラッキー7☆」と出力 If (p1 = 7) And (p2 = 7) And (p3 = 7) Then Range("D13") = "ビンゴ!!ラッキー7☆" Else ~ 次の条件文へ ~
VBEによるプログラミング • STEP5-2 「ビンゴ」の場合 条件: p1=p2,p1=p3の場合 処理:D13セルに「ビンゴ!」を出力 ~前の条件文~ Else If (p1 = p2) And (p1 = p3) Then Range("D13") = "ビンゴ! すごい!!" Else ~次の条件文へ~
VBEによるプログラミング • STEP5-3 「おしい」の場合 条件:p1=p2 又は p2=p3 又は p1=p3 処理: D13セルに「おしい」を出力 ~前の条件文~ Else If (p1 = p2) Or (p1 = p3) Or (p2 = p3) Then Range("D13") = "もう少し!" Else ~次の条件文へ~
VBEによるプログラミング • STEP5-4 「残念」の場合 条件:上記のいずれにも合致しない場合 処理:D13セルに「残念」を出力 Else Range("D13") = "残念!" End If ・・・ 3つ目の条件文の終了宣言 End If ・・・ 2つ目の条件文の終了宣言 End If ・・・ 1つ目の条件文の終了宣言
VBEによるプログラミング 条件文全体の構造をよく確かめましょう。タブを利用すると構造が読み取りやすくなる。 If (p1 = 7) And (p2 = 7) And (p3 = 7) Then Range("D13") = "ビンゴ!!ラッキー7☆" Else If (p1 = p2) And (p1 = p3) Then Range("D13") = "ビンゴ! すごい!!" Else If (p1 = p2) Or (p1 = p3) Or (p2 = p3) Then Range("D13") = "もう少し!" Else Range("D13") = "残念!" End If End If End If
VBEによるプログラミング • STEP6 ルーレット回転中のコメントを出 力する。 ルーレットの回転 = プログラムの実行 Sub ttt3() ・・・ プログラムの先頭 Range(“D13”) = “♪♪♪“ ・・・回転中のコメント For a = 1 To 250 ~以下,反復処理,乱数発生処理,条件分岐処理~
VBEによるプログラミング • STEP7 シート上にスタートボタンを設置 STEP6までで,プログラムの機能構成は完成した。最後に,コマンドボタンを設置し,プログラムをシート上から起動できるようにする。 「コントロール・ツールボックス」 →「デザインモード」 →「コマンドボタン」 →シート上に設置。
VBEによるプログラミング • Caption → 「ルーレットスタート!!」 Captionを「ルーレットスタート!!」に
VBEによるプログラミング ボタンをダブルクリック ↓ VBE画面への切り替え コマンドボタンのコード Private Sub CommandButton1_Click() ttt3 ・・・ 作成したプログラム名を入 End Sub 完成!!!
資料(ルーレットゲームのプログラム) Sub ttt3() Range("D13") = "♪♪♪" For a = 1 To 250 For b = 1 To 250 Next b p1 = Round(Rnd() * 10, 0) p2 = Round(Rnd() * 10, 0) p3 = Round(Rnd() * 10, 0) Range("D3") = p1 Range("F3") = p2 Range("H3") = p3 Next a If (p1 = 7) And (p2 = 7) And (p3 = 7) Then Range("D13") = "ビンゴ!!ラッキー7☆" Else If (p1 = p2) And (p1 = p3) Then Range("D13") = "ビンゴ! すごい!!" Else If (p1 = p2) Or (p1 = p3) Or (p2 = p3) Then Range("D13") = "もう少し!" Else Range("D13") = "残念!" End If End If End If ゲームのコード ボタンのコード Private Sub CommandButton1_Click() ttt3 End Sub