Comments
Description
Transcript
Excelマクロ(VBA)のスライド
論 理 情 度 年 用 処 活 の 報 ) ロ 6 0 ク 20 マ l e xc A B (V E 兵庫教育大学 伊奈諭 1 想定質問 zExcelが使えるのに、何故さらにVBAプログラ ムまで覚えるのですか? zExcelの関数を使えばよいのに、何故VBAプ ログラムなのですか? z普通のプログラムとVBAプログラムはどこが 違うのですか? 2 z z z z Excelの一連の手動処理手順を自動化することができますか? なぜ自動化なのですか? 自動化できると何がうれしいですか? あなたは何か自動化したいというものが思い当たりますか? 最近自らの手でものを作れたときの感動を味わったことはあります か? z 自らの作品への愛着を感じたのはいつですか、何に対してですか? z では仮想空間での作品作りをしてみましょう z 作品は簡単でもいい、小さくてもいい、どこかに“きらり”と光るもの (自分独自のこだわり、個性を含むもの、感じさせるもの)を 3 単元質問 z エディタ(VBE)は何のためにあるのですか z セルの表し方、セルへの値の代入、セル同士の計算はどの ようにしますか z プログラムの書き方、保存、実行の仕方はわかりますか z コメントの記述や活用ができますか z プログラムの流れは三つの基本処理の組み合わせです。そ の三つを言えますか? z 分岐の処理を書けますか z 繰返しの処理を書けますか z ボタンの活用ができますか。ボタンからのプログラム実行や 終了ができるように書けますか z 乱数を使えますか z タイマー(時間待ち)を使えますか 4 本講座の進め方 z作品サンプルの紹介、イメージ作り zVBE(エディタ)の操作方法 zVBA言語の基礎学習、プログラミング練習 z作品作り z発表(説明と実演) 時間的にはかなり厳しいが 5 VBA、マクロとは(VBA≒Macro) zVBA(Visual Basic for Application)は プログラム言語の一種で MS Office専用の内蔵言語である。 zマクロは 一連の処理をまとめてひとつの手続きで実行 できる形にした命令である。 6 なぜ VBAか? 動的な処理、自動処理、無人処理、込み 入った計算処理が得意である。 私の作品ちょっと紹介 z競馬予想プログラム(文書のみ) zスロットゲーム z炭団積み z“純情きらり”の世界 あなたなら何を作る? 7 作品例1:競馬予想プログラム(セル計算) 8 作品例2:炭団積み(繰返し処理) 9 作品例3:スロット(乱数と繰返し処理) 10 作品例4:純情きらり(繰返し:図形の移動) 11 さっそく本題へ 2.簡単なプログラムを作って動かしてみよう 12 2.1 プログラム作成の第一歩 ―VBE(エディタ)の起動― zVisual Basicツールバーの 「Visual Basic Editor」ボタンを左クリックする。 メニューからも起動できます。 [ツール]-[マクロ]-[VisualBasicEditor] 起動されたVBE の画面 これが出てない人は、ツールバーを 出しましょう。 [表示]-[ツールバー]-VisualBasic コードウインドウ プログラムを書き込む 領域 プロジェクトウインドウ Book内のプログラムモジュール構成 プロパティウインドウ (属性ウインドウ) 13 2.2 標準モジュールを用意 z [挿入]-[標準モジュール]メニューを選んで、ブック で共通に使うプログラムの入れ物を作っておく。 標準モジュールが追加 された状態 14 2.3 プログラムの単位(Sub~End Sub) z プログラムの記述単位(ひとまとまり)をサブルーチン (subroutine)と呼ぶ。[挿入]-[プロシージャ]メニューで以下 のSubとEnd Subが自動的に入るが、自分でキーインしても よい。プログラム名(マクロ名とも呼ぶ)は自分で決める。 Sub プログラム名( ) 実行命令(具)をSubとEnd Sub文(パン)で プログラム本体の記述 サンドイッチにする形 End Sub プログラム本体(具)の部分には 計算式(四則演算+,-,*,/)、 計算式 代入文(変数=計算式or変数)、 代入文 入出力文(Input文,MsgBox文) 入出力文 などを書く。 15 2.4 プログラムの入力と実行、保存 2.4.1 3行2列のセルの値を100にするプログラム 標準モジュールのコードウインドウに以下のプログラム(マク ロ名:Test)を入力する。 Sub Test() =記号は代入(←)を意味する。 Cells(3,2).Value=100 .記号は「の」と訳すとわかりやすい。 End Sub 2.4.2 実行 z 実行するにはVBEの[実行]-[Sub/ユーザフォームの実行] メニューを選択後、プログラム名を選択してOKボタンを押す。 z またはExcel画面かVBE画面のVisual Basicツールバーの 下記実行ボタンをクリックしても同様に実行できる。 2.4.3 保存 16 実行ボタン 通常のブックの保存と同じ。 2.4.5 変数:変数はデータの入れ物 変数は入れるデータに対応した型をもつことができる zデータの種類によって型を指定する。 今回はこれを中心に使うことにする {万能型(variant型) {整数としてのInteger型、Long型 {実数としてのSingle型、Double型 {文字としてのString型 zvariant型以外の変数はDim文で宣言を行う。 例)整数型の変数aを使う場合 Dim a As Integer 17 2.4.6 簡単な計算と結果の表示を行う z 四則演算は、+(和),-(差),*(積),/(商)といった演算子を使う。 z 文字列は”....”で囲んで表す。”奈良女子大学”のように z 文字や数字の接着剤(連結)には &演算子を使う ”奈良女子大学” & ”総合情報処理センター” & 2006 & ”年度講座” のように 例)半径10の円の面積を計算して画面に表示するプログラムを3種示す。 パターン A パターン C Sub 円面積いきなり計算( ) MsgBox 3.14*10*10 End Sub Sub 文字数字接着( ) r=10 Bパターン Sub 円面積変数利用( ) r=10 s=r*r*3.14 MsgBox s End Sub s=r*r*3.14 MsgBox ”円の面積は” & s & ”です。” End Sub 18 3.1 セルの操作 z単一セルの指定 { 操作対象セルはCells(行番号,列番号)で表す。.value(値プロパ ティ:属性のこと)を続けて記述することでそのセルの値を表す Sub Test() Cells(3,4).Value=123 End Sub z連続セル範囲の指定 { セルの範囲を表すにはRange(”A1形式の範囲”)を使う。 Sub Test() Range("A3:C5").Value=”A” ’Range(Cells(3,1),Cells(5,3)).Value=”A” でも同じ。これはコ メント行である End Sub 19 例題:半径を入力すると円面積が指定のセル に書き込まれるプログラム プログラム名)入出力&計算&セル書き込み.xls Sub a() atai = InputBox(”Hello!、ところで半径は?“ , "円の面積“ , 4) MsgBox ("では半径が" + atai + "のときの面積をB1セルに出します") 'セルへの書き込みには以下のようなバリエーションが使えます Cells(1, 2).Value = atai * atai * 3.14 '単独セル指定 Range("B2").Value = atai * atai * 3.14 '単独セル指定 ’Range("B4:B30").Value = atai * atai * 3.14 '連続セル範囲の指定 End Sub 20 z文字フォント、サイズ属性の指定 Sub Test() Cells(1,1).Value="ABC" Cells(1,2).Value="あいう" Cells(1,1).Font.Name="MS ゴシック" Cells(1,2).Font.Name="MS 明朝" Cells(1,1).Font.Size=20 End Sub 21 z 太字、斜体、下線付き Sub Test() Cells(1,1).Value="太字" Cells(1,1).Font.Bold=True Cells(1,2).Value="斜体" Cells(1,2).Font.Italic=True Cells(1,3).Value="下線" Cells(1,3).Font.Underline=True End Sub z 文字色 Sub Test() Cells(1,1).Value="赤" Cells(1,1).Font.Color=RGB(255,0,0) Cells(1,2).Value="青" Cells(1,2).Font.ColorIndex=5 End Sub 22 z背景色 Sub Test() Cells(1,1).Value="123" Cells(1,1).Font.Color=RGB(0,0,0) Cells(1,1).Interior.Color=RGB(192,192,192) End Sub zセルの選択(アクティブ化) Range(“A1:C3”).Select ’A1-C3セルを選択 または Cells(3,2).Select ’3行2列のセルを選択 23 z セル内容の消去 Range(“A1:B3”).Clear ’A1-B3セルの内容を消去 z セル範囲の削除 行削除 Rows(<行番号>).Delete 列削除 Columns(<列番号>).Delete 24 4. プログラムの流れ制御:分岐と繰り返し プログラムの基本3型 三つの基本処理(実行順序) ①順次処理 ②条件分岐処理(if~then~else~end if) ③繰り返し処理(for~nextまたはdo~loop) 指定回 または 無限回 2分岐以上 25 4.1 分岐処理 基本的に上から下に一本で順に流れるプログラムを、ある地 点で二つ以上の流れに分けることを分岐処理と呼ぶ。 分岐処理は、下記のようにIf~Then~Else~End If文で行う。 以下は一般にN個の分岐を行う例である。 If 条件文1 Then プログラム1 Elseif 条件文2 Then プログラム2 Elseif 条件文3 Then プログラム3 ………………….. Else プログラムN End If この部分( 例 A1セルの値を調べて60以下のとき、 B1セルに不合格と表示、60を超えるとき 合格と表示するプログラムを作る。 Sub 比較() If Cells(1,1).value<=60 Then Cells(1,2).value=”不合格” Else Cells(1,2).value=”合格” End If End Sub プログラム名)合格不合格判定.xls 26 )は無くてもよい 例題:入力値が1の場合円周計算を、それ 以外の場合円面積計算を行い、指定のセル に書き込むプログラム プログラム名)分岐による円面積と円周計算.xls Sub a() atai = InputBox(“Hi、どちらを?", "円の円周(1)/面積(2)", 1) If atai = 1 Then Cells(2, 2).Value = 2*3.14*10 ’円周計算 2πr Else Cells(1, 2).Value = 3.14*10*10 ’円面積計算 πr2 End If 条件文には以下のような等号・不等号を使える End Sub = : 等しい != :等しくない < :左辺<右辺 > :左辺>右辺 <= :左辺≦右辺 >= :左辺≧右辺 27 例題: C3セルの演算子記号の種類により四 則演算の計算を変更するプログラム プログラム名)計算VBAorigin.xls,計算VBA.xls C3セルの演算子記号の種類を調べて四則演算の 別を分岐で処理する例になっている。参考までにif 関数を使用した場合と対比させて記述した。この例 ではどちらも同じ結果が得られる。 28 Sub CommandButton1_Click() If Range("C3") = "+" Then 演算子の種類 を判定して分岐 Range("G3").Value = Range("B3").Value + Range("D3").Value ElseIf Range("C3").Value = "-" Then Range("G3").Value = Range("B3").Value - Range("D3").Value ElseIf Range("C3").Value = "×" Then Range("G3").Value = Range("B3").Value * Range("D3").Value ElseIf Range("C3").Value = "÷" Then Range("G3").Value = Range("B3").Value / Range("D3").Value End If End Sub 29 4.2 繰り返し処理 z 繰り返し処理の3種類 ①指定回数繰り返し(For~Next文と呼ぶ) ②条件付き繰り返し(Do~Loop While文と呼ぶ) ③無限繰り返し(Do~Loop文と呼ぶ) 4.2.1 指定回繰り返し:For~Next文 For i=1 to 10 例:1から100までの合計を計算してA1セルに書く プログラム Sub 合計( ) For i=1 to 100 ’ Next i sum=sum+I ’sum=1+2+3+……+99+100 Next I ’ Cells(1,1).value=sum End Sub 30 4.2.2 条件付繰り返し:Do~Loop While文 Do プログラム Loop While 条件文 例:1から100までの合計を計算する Sub 合計( ) i=1 Do sum=sum+i i=i+1 Loop While i<101 Cells(1,1).value=sum End Sub 31 4.2.3 無限繰り返し処理:Do~Loop文 Do プログラム Loop z 無限ループしたプログラムを停めたいときはエス ケープ(ESC)キーを押す。 32 例題:指定した繰り返し回数だけ指定した形 で炭団を積み上げるプログラム プログラム名)炭団origin.xls,炭団.xls Sub 四角形() ’ActiveSheet.UsedRange.Clear 総段数 = InputBox("積上げ総段数を入力してください", "四角形炭団積み", 5) For 行 = 1 To 総段数 For 列 = 1 To 総段数 Cells(行, 列).Value = "■" Next 列 Next 行 End Sub 二重Forループ サンドイッチの2重構造 33 5. ボタンなどの貼り付けと利用 z Visual Basicツールバーから金槌スパナのアイコンをクリック してコントロールツールボックス(部品箱)を開く z Excelシート上に部品を配置するには、希望の部品アイコン を左クリックして、+形になったマウスカーソルをシート上の 任意の地点からドラッグすることで領域選択する。いろいろな 部品をシート上に配置してみよう。 これがデザインモード切替ボタン これがチェックボックス部品 これがボタン部品 34 練習 z 以下のような三角形面積計算プログラムを完成してく ださい。 z 底辺と高さを与えてボタンを押すと面積欄に答えを表 示する。 z ボタンを押したときの動作プログラムは、デザインモー ドでボタンをダブルクリックして開かれるsubプロシー ジャ(CommandButton1_Click())の中に書く。 (発展練習)チェックボックスも 加えて、チェックが有の場合に 三角形面積、無の場合に四角 形面積を答えるようにする。 35 7.1 乱数の利用 z Rnd(ランダム)関数は0.0から1.0未満の乱数を発生する。そ こでサイコロの1から6までの目(整数)を得たい場合はInt関 数(実数の小数以下を切り捨てて整数に変換する関数)と組 み合わせて Int(Rnd*6)+1として計算できる。 z 二つのサイコロの目を乱数でシミュレーションしてA2セルと B2セルに表示するプログラムは以下のようになる。 Sub 二サイコロ乱数取得() Range(“A2”).value=Int(Rnd*6)+1 Range(“B2”).value=Int(Rnd*6)+1 End Sub 36 z 7.1.1 乱数系列の初期化 z Rndだけで乱数を発生させると、毎回同じ乱数系列 となってしまう。乱数を発生させる初期値を毎回変 更して異なる系列の乱数を発生させたい場合には、 Rnd関数を呼び出す前に一度だけ乱数系列初期化 のための関数(randomize)を呼び出す必要がある。 Sub 三サイコロ乱数取得( ) Randomize Range("A2").value=Int(6*Rnd)+1 Range("B2").value=Int(6*Rnd)+1 Range("C2").value=Int(6*Rnd)+1 End Sub 37 7.1.3 練習:スロットゲームを作ってみよう z まずForループを使って一定回数だけ三つの数字を乱数表示して自動停止する z つぎにスタートボタンを付けて押したら実行できるようにしよう z さらには終了ボタンではApplication.Quit文を実行するとプログラムを終了できる プログラム名)スロットorigin.xls,slot.xls,スロット.xls 38 8.2 図形や画像を配置・移動してみよう 8.2.1 図形を描く、動かす このプログラムでは楕円と直 線を描画後、楕円のみを斜め 右下に1ピクセルずつ動かす (発展練習) コーナーで反射 するようにして みよう。 Sub 図形移動反射() x=0 y=0 dx = 1 dy = 1 Do x = x + dx プログラム名) 図形反射変形.xls y = y + dy If x > 700 Or x < 0 Then dx = -dx dx = -dx End If If y > 400 Or y < 0 Then dy = -dy dy = -dy End If 移動 x, y Loop End Sub プログラム名)図形作画移動.xls Sub 図形作画() ’楕円の描画 引数:左上x,左上y,幅,高さ ActiveSheet.Ovals.Add 100, 100, 300, 200 ’直線の描画 引数:始点x,始点y,終点x,終点y ActiveSheet.Lines.Add 100, 100, 300, 200 End Sub Sub 図形移動() x=0 y=0 Do x = x + 1 ’1 ピクセルずつ増加 y = y + 1 ’1 ピクセルずつ増加 移動 x, y ’Call 移動(x,y)でもよい Loop 引数付きSub呼び出し End Sub Sub 移動(x, y) [楕円 1].Top = y [楕円 1].Left = x End Sub 39 8.2.2 画像を置く、動かす 以下のプログラムではブックオープン時に画像を配置後、その画像 を斜め右下に1ピクセルずつ動かす。 プログラム名)画像配置移動.xls Sub Workbook_Open( ) ’ActiveSheet.Shapes.AddPicture "z:¥きらり.jpg", 0, -1, 0, 0, 128, 163 ActiveSheet.Pictures.Insert "z:¥きらり.jpg“’アクティブセル位置への画像の挿入 End Sub Sub 図形() x=0 y=0 Do x=x+1 y=y+1 移動 x, y ’Call 移動(x,y)でもよい Loop End Sub Sub 移動(x, y) [図 1].Top = y [図 1].Left = x End Sub 40 8.2.3 タイマーで待ち時間間隔を制御する 以下のプログラムでは、A1セルとB1セルに0か ら9までの乱数を一定の時間間隔で繰り返し表 示できるようにタイマー待ちを使っている。 プログラム名)タイマーWait.xls ①Wait命令(メソッド) 1秒以上の間隔で時間待ちさせる Sub 秒ウエイトを使ったスロット回転 ( ) Do Cells(1, 1).Value = Int(10 * Rnd) Cells(1, 2).Value = Int(10 * Rnd) Cells(1, 3).Value = Int(10 * Rnd) Application.Wait (Now + TimeValue("0:00:01")) Loop End Sub 41 ②Sleep関数(Win32API関数) ミリ秒単位の細かい時間間隔を指定して時間待ちさせる。 WindowsシステムのAPI関数(Sleep関数)を直接呼び出し て利用するため、下記のAPIインタフェース宣言を標準モ ジュールの先頭で定義しておかなければならない。 ’指定ミリ秒時間待機をする関数の宣言 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub ミリ秒ウエイトを使ったスロット回転 ( ) Do Cells(1, 1).Value = Int(10 * Rnd) Cells(1, 2).Value = Int(10 * Rnd) Cells(1, 3).Value = Int(10 * Rnd) Sleep 300 ’300msの間待機させる Loop End Sub プログラム名)タイマーWait.xls 42 z8.3 魔法の命令DoEvents Do~Loopなどの無限繰り返し処理の中で、ボ タンやチェックボックスの操作を受け入れ可 能とするためには、ループの最後(Loop文の 前)に、DoEvents文を入れておくこと。 “純情きらり”やスロットゲームのサンプルで、 ストップボタンや軌跡チェックボックス、終了ボ タンが問題なく動作するのは、この魔法の言 葉を使ったからである。 プログラム名)LoopStopButton.xls 43 6.プログラムのデバッグ方法 6.1 ウオッチ式の追加編集 z 注目したい式(変数)のある行に カーソルを位置づけて、クイックウ オッチアイコン(メガネのアイコン) をクリックすると、ウオッチウインド ウにその式が追加される。監視 の必要な式に対して、この操作を 繰り返す。 6.2 ステップイン(1行ずつの小刻 み実行) z ステップインアイコンを押すたび に一行ずつ処理が進み(処理中 の行は黄色で示される)、その時 点でのウオッチ式の値がウオッチ ウインドウに表示される。このウ オッチ式の値を追跡することに よってプログラム動作のロジック 誤りの箇所を発見しやすくなる。 クイックウオッチアイコン ステップイン アイコン ウオッチ式と その値 44 小さくてもいい、 8.作品作りに挑戦 短くてもいい、 簡単でもいい、 8.1 作品の分野、分類 z 実用計算ツール、家計簿、小遣い帳、 しかし個性のあ 住所録など るものを! z 統計計算プログラム アンケート結果 解析など z 予想プログラム 競馬着順予想など z シミュレーション z ゲーム z 教育プログラム 計算ドリル、CAIなど z 観賞用ビジュアルアート z 数学関数の視覚化 z その他 作品の観点、重点 z実用性 z教育性 z夢 z美しさ、鑑賞性 z将来性、発展性 zアイデア(機知) z技術(テクニック) zゲーム性 zその他 45 では残り時間を使って 作品作りをしましょう 出来上がった作品はVBA作品のフォルダにアップロードしてください。 完成していなくてもOKです。 /netapp-r/exterior/life/ina/VBAsakuhin/ ファイル名は「名前xxxxxxxxxx.xls」にしてください。 46 付録 47 ノンプログラムの方法:マクロ自動記録 z マクロの作成 マクロ記録の例 1. 2. 3. 4. 5. 文字色を赤に、太字・斜体に設定するマクロ Excel起動、任意のセルに適当な文字列を入力 [ツール]-[マクロ]-[新しいマクロの記録]を選択 [マクロの記録]ダイアログボックスでマクロ名(macRedBoldItalic)を付 ける 文字色を赤に、太字・斜体のツールボックスをクリック [ツール]-[マクロ]-[記録終了]を選択 z マクロの実行 1. 2. 3. 文字の入った適当なセルを選択したまま [ツール]-[マクロ]-[マクロ]を選択 マクロ一覧からマクロ名(macRedBoldItalic)を選択して[実行]をクリッ ク 48 マクロの登録(1) z メニューへの割り当て 1. 2. 3. 4. 5. 6. 7. メニューの部分を右クリックしてポップアップメニューから [ユーザ設定]をクリック [ユーザ設定]ダイアログボックスから「分類」で「マクロ」、コ マンドで「ユーザ設定メニュー項目」を選ぶ マクロを追加したいメニュー([ファイル]など)をクリックして 開く 「ユーザ設定」ダイアログボックス]の「コマンド」で「ユーザ 設定メニュー項目」を選び、メニューを追加したい位置まで ドラッグアンドドロップする 追加したメニュー項目を右クリックしポップアップメニューを 開く [名前]欄にメニュー表示する文字列を入力する ポップアップメニューの[マクロの登録]を選び、メニューに 登録したいマクロを選ぶ 49 マクロの登録(2) zツールバーのボタンへの割り当て 1. [ツール]-[ユーザ設定]の[コマンド]タブを選択 2. [分類]から[マクロ]を選択し、[コマンド]から[ユーザ設定ボ タン]をドラッグしメニューバーの右端にドロップ 3. 貼り付けたボタンの名前を替え、[マクロの登録]メニューを 選択して登録 50 マクロの登録(3) ボタンの絵柄の変更および編集 1. [ユーザ設定]ダイアログボックスを開いた状態で変 更・編集対象ボタンを右クリックし、ポップアップメ ニューの[ボタンイメージの変更]または[ボタンイメー ジの編集]を選ぶ 51 マクロを図形に割り当てる z 対象図形を右クリックしてポップアップメニューを開き、[マク ロの登録]メニューを選んで、割り当てたいマクロを指定する 52 VBE(Visual Basic Editor) zExcelマクロはVBAそのもの。 VBEを開いてソースコードを覗いてみよう (ALT+F11キー)。 プロジェクトウインドウのModule1アイコンをダ ブルクリック 53 自動記録マクロの正体(VBAソース) Sub RedBoldItalic() ' ' RedBoldItalic Macro ' マクロ記録日 : 2006/9/9 ユーザー名 : ina ' ' Selection.Font.ColorIndex = 3 Selection.Font.Bold = True Selection.Font.Italic = True End Sub 54 応用:ユーザ定義関数 zユーザ定義関数 Public Function 三角形面積(底辺 As Single,高さ As Single) As Single 三角形面積=底辺*高さ/2 End Function z ワークシート関数の利用 Application.WorksheetFunction.RoundUp(3.7,0) X=Application.WorksheetFunction.Sum(Range("A1:C1")) 55 ユーザ定義関数の練習 z 右のような三 角形面積計算 プログラムを ユーザ定義関 数を使って完 成してください。 56 応用:ダイアログボックス (ユーザフォーム)を作る zユーザフォームの挿入 zユーザフォームのタイトルと名前の変更 zボタンの表示 z文字の入力(ラベルとテキストボックス) z二者択一(チェックボックス) z複数の選択肢(フレーム、オプションボタン) z選択入力(リストボックス/コンボボックス) 57 フォームの作成 VBE画面で[挿入]-[ユーザフォーム] 58 ユーザフォームへの入力値を取得 zテキストボックス Textプロパティ zチェックボックス/オプションボタン Valueプロパティ zリストボックス ListIndexプロパティ(先頭0番から) 59 練習 z 以下のようなフォームを作り 結果を画面表示するプログ ラムを作ってください。 リストボックス、コンボボックス への項目引用 Rowsourceプロパティを Sheet1!A1:A3とする Private Sub cmdFinished_Click() Dim str As String str = tbValue.Text If OptAka Then str = str & "赤" ElseIf OptMidori Then str = str & "緑" ElseIf OptAo Then str = str & "青" End If If ChkPrint.Value Then str = str & "プリントON" Else str = str & "プリントNO" End If str = str & lstCity.Value str = str & CmbCity.Value MsgBox str End Sub Private Sub endbutton_Click() Unload forMain 60 End Sub 練習:リストボックス z z z z z z z z z z z z z z z z z z z z z z z z z z z z Private Sub UserForm_Initialize() ListBox1.AddItem "焼き鳥" ListBox1.AddItem "刺身" ListBox1.AddItem "生姜焼き" ListBox1.AddItem "ミックスフライ" ListBox1.AddItem "肉じゃが" ListBox1.AddItem "おひたし" ListBox1.AddItem "ご飯" ListBox1.AddItem "味噌汁" Cells(1, 1).Value = "焼き鳥" Cells(2, 1).Value = "刺身" Cells(3, 1).Value = "生姜焼き" Cells(4, 1).Value = "ミックスフライ" Cells(5, 1).Value = "肉じゃが" Cells(6, 1).Value = "おひたし" Cells(7, 1).Value = "ご飯" Cells(8, 1).Value = "味噌汁" End Sub Private Sub CommandButton1_Click() Dim i As Integer For i = 1 To 8 If ListBox1.Selected(i - 1) = True Then Cells(i, "C").Value = 1 Else Cells(i, "C").Value = 0 End If Next i End Sub ListBoxのMultiSelect属性 fmMultiSelectMultiとする 61 練習:スクロールバーで画像サイズの変更 Private Sub ScrollBar1_Change() Image1.Width = ScrollBar1.Value Image1.Height = ScrollBar1.Value * 240 / 360 End Sub 62 練習:成績表入力のフォームを作成 A=10,B=6,C=2として 平均を出す 63 プロシージャからユーザフォームを開く zユーザフォーム(frmTest)を開く Sub Test() Load frmTest 'メモリへの読み込み frmTest.Show 'ユーザフォームを開く unload frmTest 'メモリから削除 End Sub 64 OK、キャンセルボタンでユーザフォームを閉じる Private Sub cmdOK_Click() IsOK=True Hide End Sub Private Sub cmdCancel_Click() IsOK=False Hide OKボタンDefaultプロパティ True End Sub キャンセルボタンCancelプロパティ Private Sub Test() Load frmTest 'メモリへの読み込み frmTest.Show 'ユーザフォームを開く If frmTest.IsOK=True Then MsgBox "OKボタンがクリックされました" Else MsgBox "キャンセルボタンがクリックされました" End If Unload frmTest 'メモリから削除 End Sub True 65 ブックのオープン/クローズ時の処理 z オープン時 Private Sub Workbook_Open() MsgBox "現在" & Time & "です" End Sub z クローズ時 Private Sub Workbook_BeforeClose(Cancel As Boolean) MsgBox "お疲れ様でした" End Sub 66 z ワークシート新規作成時の処理 (シート作成時にシー ト名を決める) Private Sub Workbook_NewSheet(ByVal Sh As Object) ShtName=InputBox("シート名を入力してください") If ShtName<>"" Then Sh.Name=ShtName Sh.Cells(1,1).Value=Time 'セルA1に現在時刻を入れる End If End Sub 67