2013-01-31

Webクエリ

今日の主な内容は、前回の課題の完成です。
出来た人向けに発展的な内容を書いておきます。

フォームへの入力

フォームの中にマクロを使って文字を書くこともできます。

このようなフォームを作ってください。
この時、テキストボックスは左から順にTextBox1, TextBox2, TextBox3にしてください。
そして、+のボタンが押されたら

TextBox3.Text = Val(TextBox1.Text) + Val(TextBox2.Text)

が実行されるようにしてください。
また、終了のボタンが押されたら

Unload Me

が実行されるようにしてください。
実行して、左側と真ん中のテキストボックスに適当な数字を書いて+のボタンを押すと右側のテキストボックスに答えが表示されます。

練習:
+のボタンの下に-、×、÷のボタンを作って、それぞれのボタンを押したら引き算、掛け算、割り算が計算できるようにしてください。

相互変換

円安が進んでいます。
今の為替で、外貨預金するとどのようになるか計算してみましょう。
次のフォームを作ってください。

テキストボックスの順番は上が1、下が左から2,3にしてください。
そして円→ドルのボタンを押したら

TextBox3.Text = TextBox2.Text / TextBox1.Text

が実行され、終了のボタンが押されたら終わるようにしてください。
実行したら、現在の為替1ドル=の欄に90、下の段の円のところに10000と書いて、円→ドルのボタンを押すと、1万円をドルに両替すると幾らになるか表示されます。

練習:
ドル→円のボタンを押したら、ドルを円に両替すると幾らになるか表示するようにしてください。
そして今度は、下の段の円とドルの両方の欄に金額を書いて円、ドル→為替のボタンを押したら、現在の為替1ドル=の欄に為替が表示されるようにしてください。

為替の自動取得

現在の為替レートを自分で入力するのではなく、インターネットから取得しましょう。
例えば
http://stocks.finance.yahoo.co.jp/stocks/detail/?code=USDJPY=X
から見ることが出来ます。

それをExcelに見に行かせて取得したいので、Webクエリを使います。
データタブのWebクエリをクリックしてください。

アドレスの欄に http://stocks.finance.yahoo.co.jp/stocks/detail/?code=USDJPY=X を書いて、左上のチェックをクリックします。

するとそのページがエクセルに貼り付けられます。
どのセルから貼り付けるか尋ねられるので、A1を指定します。

このように貼り付けられて、為替を取得できました。

以上の操作を、VBAを最初に紹介した時の方法で自動化します。
開発タブの「マクロの記録」をクリックします。

名前は何でもいいのでこのままOKをクリックします。

ここで先ほどの操作を行って、記録終了をクリックします。

これで、Webから為替のページを取得するマクロが記録されたので、"アメリカ ドル / 日本 円"の右隣のセルの数字を為替として使います。

2013-01-28

分散分析

二元配置分散分析について説明しました。 詳しい証明、計算は省略しました。

小テスト
小テストのファイルが開けないことがありましたら連絡ください。

2013-01-24

ユーザーフォームの作成

フォームの作成

メッセージボックスだけでは「はい」「いいえ」だけしか入力できませんので、自分でデザインできるフォームを使ってみましょう。

挿入から「ユーザーフォーム」を選びます。

するとこのような画面が開きますので、ここを自分でデザインします。

このフォームにはUserForm1という名前がついています。これは変更する必要がないのですが、画面に表示されるタイトルを変更しましょう。

画面の左下のプロパティの中のCaption欄がこのウィンドゥのタイトルですので、ここを「休講診断」に変更します。

すると画面のタイトルが「休講診断」に変更されました。

次にボタンを設置します。
休講診断のウィンドゥをクリックすると、「ツールボックス」が表示されます。

この中の「コマンドボタン」をクリックしてください。

するとボタンが表示されます。表示されている文字の変更もCaptionを書きかえればできます。

ここを「気象情報を確認」に書き換えてください。

次に、「気象情報を確認」をクリックしたときに開く2番目のウィンドゥを用意します。
先ほどと同じように挿入から「ユーザーフォーム」を選びます。

これにはUserForm2という名前がついています。 今度はこのウィンドゥのタイトルを「午前6時」にしてください。

次に、単に文字を表示する「ラベル」を入れます。

ツールボックスからラベルを選んでください。

UserForm2にラベルを置いて、Captionを「警報は発表されていますか?」に書き換えます。

さらに、先ほど同様にボタンを二つ置いて「はい」「いいえ」にします。

これらのボタンをクリックして、左側のプロパティのところを見てください。
CommandButton1というのがこのボタンの名前、CommandButtonというのがこのボタンの種類です。

マクロの用意

二つのFormを用意出来たので、「気象情報を確認」をクリックしたらUserForm2が表示されるようにします。

「気象情報を確認」のボタンをダブルクリックすると、マクロを書く部分が表示されます。

ここに
UserForm2.Show
Unload Me
と書きます。
最初のUserForm2.Showは、UserForm2を表示しなさい、という意味で、
次のUnload Meは自分自身(UserForm1)の表示を止めなさい、という意味です。

最後に、UserForm1を表示するマクロを書いて、実行してみましょう。

来週末までの課題

前回までのIF文を使った課題と同じ、以下の休講判断を、このフォームの組み合わせで作ってください。
UserForm3というフォームを作って「全ての授業休講」いうラベルと「はい」というボタンを置きます。そして先ほど作ったUserForm2で「はい」のボタンを押したらUserForm3が表示されるようにします。
UserForm4というフォームを作って「気象情報・交通機関の運行」というラベルと「確認」というボタンを置きます。そしてUserForm2で「いいえ」のボタンを押したらUserForm4が表示されるようにします。
UserForm5というフォームを作って午前8時40分での警報を確認します。警報がある方のボタンを押したら、先ほど作ったUserForm3が表示されるようにします。

2013-01-17

複雑なIF文

前回、迷う人が多かった箇所を簡略化して示します。
次の二つの例題に関して、xやyの値がどんな時に「いただきます」と表示されるのか、
表示される条件が例1と例2でどのように違うのか考えてみてください。
マクロを書いて実行するときにIfとEnd IFの対応が合ってなくてエラーになって、後からEnd Ifを書き足した時に、間違いの原因となります。

例1

If x > 0 Then
Msgbox ("こんにちは")
If y > 0 Then
Msgbox ("ありがとう")
Else
Msgbox ("こんばんは")
End If
Else
Msgbox ("さようなら")
If y > 0 Then
Msgbox ("おはよう")
Else
Msgbox ("いただきます")
End If
End If

例2:

If x > 0 Then
Msgbox ("こんにちは")
If y > 0 Then
Msgbox ("ありがとう")
Else
Msgbox ("こんばんは")
End If
Else
Msgbox ("さようなら")
End If
If y > 0 Then
Msgbox ("おはよう")
Else
Msgbox ("いただきます")
End If

このままでは、書いた私自身でも理解するのが大変難しいです。
そこで、If~Else~End Ifで囲まれた部分を少し右にずらします。

例1

If x > 0 Then
  Msgbox ("こんにちは")
  If y > 0 Then
    Msgbox ("ありがとう")
  Else
    Msgbox ("こんばんは")
  End If
Else
  Msgbox ("さようなら")
  If y > 0 Then
    Msgbox ("おはよう")
  Else
    Msgbox ("いただきます")
  End If
End If

例2:

If x > 0 Then
  Msgbox ("こんにちは")
  If y > 0 Then
    Msgbox ("ありがとう")
  Else
    Msgbox ("こんばんは")
  End If
Else
  Msgbox ("さようなら")
End If
If y > 0 Then
  Msgbox ("おはよう")
Else
  Msgbox ("いただきます")
End If

IfとEnd IFの対応が合わなくなるのを防ぐには、Ifを書いた時に中身を書く前にElseやEnd Ifを一緒に書いておくのが良いです。

前回の課題を完成させて、出来た人はフォームの作り方を自習してください。

2013-01-10

対話型プログラム

InputBox

昨年は1から100までの合計を計算しましたが、マクロを実行する時に、幾つまでの合計を計算するか尋ねるマクロを書いてみましょう。

Sub 対話型合計()
n = InputBox("幾つまでの和を計算しますか")
'ここに1からnまでの合計を計算してwaという変数に代入するプログラムを書いてください
cells(1,1)=wa
End Sub

条件分岐

先ほどのマクロを、正の数が入力された時だけ計算するように書き換えましょう。
このような条件判断にはIf文を使います。
If文の書き方は

If 条件 Then
 条件が成り立つときに実行する文
End If

でしたので、

Sub 対話型合計()
n = InputBox("幾つまでの和を計算しますか")
If n > 0 Then
 'ここに1からnまでの合計を計算してwaという変数に代入するプログラムを書いてください
 cells(1,1)=wa
End If
End Sub

と書きます。

数字の判定

先ほどのInputBoxに、数字以外のものを入れると計算できません。
だから、単に0より大きいかどうかだけでなく、数字かどうかも含めて判定しましょう。
nが数字かどうかは

IsNumeric(n)

で判断します。
If文で、二つの条件が共に成り立つことは And で表すので、If文は

If IsNumeric(n) And n > 0 Then

となります。

Else文

条件が成り立たなかった場合に実行する文がある時には

If 条件 Then
 条件が成り立つときに実行する文
Else
 条件が成り立たなかったときに実行する文
End If

のように書きます。

練習

  • 正の数が入力されたらその数までの和を計算して表示する
  • 正の数が入力されなかったら、「正の数を入力してください」というメッセージを表示する
このようなマクロを書いてください。
メッセージを表示するには

MsgBox ("正の数を入力してください")

と書きます。

MsgBoxの使い方

MsgBox( )の(括弧)の中に" "で囲まれた文字を書くと、その文字が表示されます。

MsgBox ("正の数を入力してください")

" "なしで変数の名前を書くと、その変数の値が表示されます。
例えば、和を計算するプログラムで
Cells(1, 1) = wa
の代わりに
MsgBox(wa)
と書いてみてください。

MsgBoxによる質問

MsgBoxは、単に文字を表示するだけでなく、OK、キャンセルなど、どのボタンがクリックされたかを知ることも出来ます。
試しに

x = MsgBox("あなたはお昼ごはんを食べましたか", 4, "質問")
If x = 6 Then
  MsgBox ("午後も元気ですね")
Else
  MsgBox ("ちゃんと食べてくださいね")
End If

を実行して、質問に答えてください。

使い方一覧

aとかbの文字は必要に応じて書き換えてください。

x = MsgBox("a", 0, "b")

x = MsgBox("a", 1, "b")

OKをクリックするとxに1が代入され、キャンセルをクリックするとxに2が代入されます。

x = MsgBox("a", 1, "b")
MsgBox (x)

を実行して、xの値を確かめてください。

他にも、次のようなメッセージボックスがあります。

x = MsgBox("a", 2, "b")

x = MsgBox("a", 3, "b")

x = MsgBox("a", 4, "b")

x = MsgBox("a", 5, "b")

クリックしたボタンとxに代入される値の関係は次のようになっています。

1OK
2キャンセル
3中止
4再試行
5無視
6はい
7いいえ

課題

この流れ図をマクロに書いてください。

2013-01-07

分散分析

分散分析の考え方と一元配置法について説明しました。
スライドの文字を少し大きくしました。

小テストはレポートに変更しました。