...

Excelマクロ(VBA)のスライド

by user

on
Category: Documents
11

views

Report

Comments

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
Fly UP