2013-03-31

Photoshop Lightroom 4

GXR A12 28mmの現像には、普段使っているDxO Optics Proが対応していませんし、Nikon用のCapture NX2も当然ながら対応していません。
それでこれまではSlikypixを使っていたのですが、これは以前指摘した
・白とびした画像の修復が困難(パラメータを調整しても、輝度、彩度、色相のどれか一つだけをLightroom並みにするのが精いっぱい)
・青の彩度が高い(色の設定を「記憶色」にした場合に限らず「標準色」でも)
という問題があります。

Silkypixを使う前はAdobe Photoshop Lightroom 2を使っていましたが、これはこれで諧調を自動補正にすると眠たい画像になりますし、調整するパラメータが多いこと自体は細かく調整出来て良いのですが、数枚ならともかく何十枚だと手動で補正するのは大変でした。
さらに以前指摘したようにホワイトバランスの設定がおかしく、自動もプリセットも使いものにならず、撮影時の設定を使うか、数字で色温度を指定する必要があります。

とはいえ、調整して何とかなるなら、調整してもどうにもならないSilkypixよりはマシだと思い、現行バージョンのLightroom4を試用してみました。
すると、現像エンジンがLightroom3の2010年版からLightroom4では2012年版に変わっていて、パラメータ構成も変わっていました。
Lightroom3までは、明るい部分が白飛びしないように暗くする、逆に暗い部分が黒潰れしないように明るくする方向にしか調整できませんでした。

これだと、例えば明るい部分が不要で飛ばしてしまいたいときはコントラストを上げて明るい部分を飛ばすと同時に暗い部分を潰して、その後明るさを上げて暗い部分を復活させる、という手間がかかります。
また、露出補正は数字を大きくすると明るくなるのに対し、白とび軽減の数値を大きくすると暗くなり、理屈としてはそうなのでしょうけれど数字の大小と明るさの関係がパラメータ毎に違っていて直観的ではありませんでした。
さらに、明るさの初期値が+50、コントラストの初期値が+25で、初期値に戻すにはまず初期値を覚えておく必要があります。
それに対してLightroom4では、全てのパラメータが0を基準にプラスマイナスの両方向に調整できるようになりました。

また、自動補正の方針が変わったらしく、自動補正を押した直後の画像がかなり違います。
Lightroom3の2010版では

このように、白とび、黒潰れを防いだ画像になります。
この方が、後でPhotoshopなどで編集するためには、白とび黒潰れによる情報の欠落がなくて良いのですが、見た目がぱっとしないので再編集前提の画像とも言えます。
そもそも、明るさやコントラストなどは再編集するよりもLightroomで現像時に調整しておいた方が良いわけですし、再編集しないのなら自動補正では見た目が綺麗になった方が良いです。
それで、Lightroom4の2012年版では

このようになりました。
コントラストが上がり、白とびしているところもありますが、その部分が必要なら自動補正の後でパラメータを手動で調整すれば良いです。
Silkypixで、Silkypix評価測光を使うとこのようになり、Lightroom3に近いです。

空の青さは綺麗ですが、Silkypixは標準色でも青の彩度が高いので、空以外の青まで彩度が高くなって不自然になる欠点があります。

かなり使いやすくなっているので買おうと思ったのですが、Lightroom5が出るらしく悩ましいです。

2013-03-26

文書をスキャナで読み取って整理する

年度末なので書類を整理しています。
あまり大事でない書類はスキャナで読みとってから捨ててしまおうと思います。
このような用途ではScansnapが有名ですが、岡山大学が一括で購入している用紙の品質がScansnapには合わないようで、途中で2枚読み込んで止まることがよくあります。
その場合何枚目まで正常に読み込めたのかを調べてその続きから読み込みなおす作業が必要になり、それが頻発するので使うのを止めていました。
数年ぶりに最新のiX500を買いましたが、全然改善していません。
パソコン雑誌では絶賛されているので、パソコン雑誌のように品質の良い紙ならちゃんと読み込んでくれるのでしょう。
岡山大学の紙でも、スキャナのADFを使うとちゃんと読み込んでくれます。
決してScansnapが駄目なのではなく、Adobe Acrobat付で5万円以下のScansnapと、ADFだけで10万円近くのスキャナでは比較になりません。
またエクセルのカラーのグラフを印刷した文書の場合、ScansnapでPDFで保存しようとするとJPEG形式の非可逆圧縮されたカラー画像になりますが、写真のような微妙な色の変化は必要ないので256色のPNGにした方が良いですし、その意味でもjpegとPDFしか保存できないScansnapより普通のスキャナを使った方が良いです。

ソフト

傾き補正にはeTilTranが使えました。
スキャナでTIFF形式で読み取ったあと、最初にこのソフトで傾きを修整しましょう。
ただ、傾いていない原稿を間違えて傾けてしまうこともあるので、一通りチェックして傾いている時だけ使った方が良いです。

私はデジカメの写真用にRalphaPlusを買っています。
これは256色減色ツールの呼び出しも含めて多数の画像に対して一括処理が出来ます。
グレースケール化も出来ますし、レベル補正によって、紙の裏の文字が薄く見えるのも真っ白に出来ます。
ファイルの形式変更や縮小などの処理はこれを使いましょう。
レベル補正は無料版のRalphaでは出来ませんが、eTilTranでも出来るらしいです。

カラーの文書は256色に減色します。
減色ツールの比較もなされています。
通常は減色の際にはデザリングした方が良いのですが、エクセルのグラフなどは微妙な色合いは不要なのでデザリングはファイルサイズが増えるデメリットの方が大きいです。
Yukariの減色方法 懲りすぎると時間がかかるのでほどほどに。

ORC結果を埋め込むにはPDFにまとめる必要があります。BtoPDF画像梱包で出来るようです。
説明を読んだ印象では、画像梱包はヘッダーなどをつけてまとめるだけと明記されているので、まずこちらを試そうと思います。 逆にPDF-XChange Viewerを使うとPDFファイルをJPEGなどの画像ファイルとして保存できるそうです。
スキャナで1ページだけ読み取ったPDFファイルの拡張子をJPGに変更したら、JPEGファイルとして開けたそうです。PDFをJPGに変換するのは可能でしょうか?
これが出来るならSepPDFで1ページずつファイルを分ければ良いでしょう。 ChainLPならば、PDFに限らず色々な形式で一つのファイルにまとめられた画像に対して、余白削除などの一括処理を行えますが、私は設定を変にしてしまったらしく途中で止まるようになってしまいました。
良く分からないうちにあれこれいじらない方が良いです。

Androidで読むにはPerfect Viewerが良いそうです。
でも書類をわざわざ持ち出してAndroidで読むことはないと思います。

手順

  1. スキャンスナップ、あるいはオートシートフィーダー付のスキャナで読み込んで1ページずつTIFFなどの画像ファイルで保存。
  2. 原稿と見比べながら白紙のファイルを削除し、向きを揃える。
  3. 傾いているページがあればeTilTranで傾き補正
  4. カラーと白黒のファイルを別のフォルダーに分ける
  5. RalphaPlusで、
    レベル補正を使って裏移りを白く飛ばして縮小して8bitPNGで保存。
    白黒のファイルはグレースケール化、カラーのファイルは256色に減色。レベル補正の時に紙の色による偏りも補正するので、グレースケール化はその後で。
    カラーの減色には外部ツールとしてpngnqi.exeを使いますが、それ以外の処理はRalphaPlus内蔵の機能の方が速いのでそちらを利用。
  6. 画像梱包でPDFにまとめる。
こう書くと手順が大変に見えますが、読み込み、傾き補正、画像処理はそれぞれ一括で出来ますので、つきっきりでやる必要はありません。
会議や講義に行く前に始めておけば、戻って来るまでには終わっています。
むしろ一つのソフトで全自動でやろうとすると、途中で向きやカラーと白黒を間違えられた時のやり直しが大変です。

おまえは今までスキャンした本の冊数をおぼえているのか?
EPSON EP-901A ドライバ手動インストール古い機種ですが、LAN経由でプリントアウトだけでなくスキャンも出来ます。

2013-03-21

Nikon COOLPIX A

Nikon COOLPIX Aが発売されていたので、店頭でじっくり触ってきました。
撮った画像を持ち帰ってはいませんが、既に買った人が写真を載せています

オートフォーカスは、50cm以上離れたものにしかピントが合わない通常モードと、10cmまでピントが合うマクロモードがあります。
通常モードのオートフォーカスは、センサーの大きさが同じSONYのNEXシリーズよりちょっと遅いくらいですが、マクロモードにするとかなり遅くなります。
それでも、同じAPS-Cで換算28mm単焦点のリコーGXR A12 28mmよりは速いです。

操作性や設定メニューはニコンの一眼レフとそっくりです。
ノイズリダクションやアクティブDライティングを、ON/OFFだけでなく強さも設定できるので、D5x00シリーズと同じです。
ちなみにNikon1はON/OFFしか設定できず、D3x00シリーズと同じです。

写りはAPS-Cセンサー機換算28mm比較によると、一眼レフのレンズキット用の安いズームよりは良いですが、写りのよりAF-S DX NIKKOR 16-85mm f/3.5-5.6G ED VRとは同じくらいということで、写りを良くするための単焦点と言うより、小さくするための単焦点、という感じです。
GXR A12 28mmならリコーの誇るGRレンズということで、センサーは1200万画素なのに、1600万画素のD7000にNIKKOR 16-85mmをつけるよりもシャープに写りましたが、COOLPIX Aはそれほどではないようです。

携帯性の面ではSONYのDSC-RX100がライバルになると思います。
センサーの性能、特に諧調性ではCOOLPIX Aの方が優れていますが、
・暗いところではRX100の方がレンズが明るく手振れ補正もあるので低い感度で撮ることが出来るので、センサーの性能差は帳消しになる。
・RX100のズームレンズは、全域でシャープではないが、COOLPIX Aと同じ換算28mmではかなりシャープに写る。
ということで、昼間、最低感度で撮るならCOOLPIX Aの方が綺麗ですが、それ以外だと大差ないと思います。
(COOLPIX AがISO400で撮らないといけない時でも、RX100はレンズの明るさと手振れ補正で最低感度のISO125で撮れますし。)
COOLPIX Aは良いカメラですが、RX100から買い換えるほどではないと思います。
私の場合、RX100で不満に思っているのは画質ではなく、コントラストAFのために飛行機雲にピントが合わない、背景が細かく被写体がのっぺりしていると、フォーカスポイントを一点にしても背景にピントが合ってしまうことがある、という点ですので、COOLPIX Aでも解決できません。
NEX-5RやNEX-6が必要でしょう。

GXR A12 28mmと比べたら、写り優先なら今でもGXR A12 28mm、携帯性ならCOOLPIX Aですね。
同じ画角でSigma DP1 Merrillがありますが、あれは綺麗に撮れるときは物凄く綺麗ですが、高感度が物凄く弱いという極端なデジカメですので、他と比べるものではないでしょう。

最低感度で撮れるような日中屋外なら、GXR A12 28mmの経験から、レンズフードは必須だと思います。

2013-03-16

Motorola RAZR IS12M

わりと素のAndroidに近い、素直な作りで、また世界各国で販売されている機種の情報がそのまま使えるようです。
RAZRのページ - doggisma ここを引用しているブログが多いです。IS12M SIMロック
au IS12M Motorola RAZR GB/ICSで root化可能
購入2日目で文鎮 rootをとってROMをいじるのはリスクがあります。
IS12Mを購入しました!
RAZR IS12M SIMロック解除(その1)
IS12MにカスタムROM(AOKP)焼いてみた。 新しいもの好きLv10(長持ちIF) IS12Mが文鎮化した この人も文鎮化。
小さいものが好き rootをとっていてかつアップデートをかけるには。
Motorola RAZR IS12MはAndroid4.0でアップデート打ち切り
ポワンの弄々ブログ:スマートフォン情報提供中!! この人も文鎮化

SIMロック解除対応機種の他社SIMカードでの音声・SMS確認結果イー・モバイルを使えるドコモの機種も結構あります。
個人的に興味があるのはXperiaのacroHDとNXです。

2013-03-14

Google Reader終了

Powering Down Google Reader
複数のブログを読むために、これまではGoogle Readerを使っていました。
未読/既読/★印をGoogleのサーバーで同期できるので、例えば移動中にスマホで読んでいた時、帰宅してパソコンで読めばどの記事を既にスマホで読んだか分かります。
またスマホで読んでいて大事だと思って★印をつけておけば、パソコンで読むときにすぐ探すことも出来ます。
でも広告が表示されないのでGoogleとしては儲からないから止めるのでしょう。

Windows Live MailがインストールされているパソコンでInternet ExplorerでRSSフィードを購読すると、
C:\Users\ユーザー名\AppData\Local\Microsoft\Windows Live Mail\Your Feeds
に登録されます。
Dropboxなどでこのフォルダを同期すればどのパソコンからでも読めるようになるでしょうか?

これをチャンスと捉えてGoogleから客を奪うために頑張っている会社もありますので期待しましょう。
Google Reader 代替にFeedly が名乗り。他社アプリのAPIアクセス受け入れも表明
GoogleReaderの登録フィードをlivedoor Readerに移行する

今のところ移行先として一番期待出来そうなのはFeedlyです。
これから7月までにもっと良いところが現れるかもしれません。

関係ないですがWindowsXP において、WinUSBドライバのインストールに失敗する。

2013-03-05

DP2のシャープネス

センサーの大きさはAPS-Cでレンズが換算28mm単焦点のCOOLPIX Aが発表されました。
スペック的にはリコーのGXR A12 28mmやシグマのDP1 Merrillに近いです。
それで以前使っていたDP2のことを思い出して、当時撮った写真を見てみると、山の稜線や雲の輪郭が強調されているのが気になりました。
表示するときにLanczosを使うと自然に輪郭強調と同じ処理が入るので、私は普段現像するときには輪郭強調をかけていません。
そのため、輪郭強調に普段から慣れていない分、気になります。

山の稜線付近を等倍で切り出します。

SigmaPhotoProのシャープネスは0ですが、輪郭強調処理が入っています。
SilkypixもFoveonに対応しているので、「シャープなし」で現像してみました。

色は違いますが、山の稜線はこの方が自然です。
SigmaPhotoProのシャープネスを変化させて、どのくらいでSilkypixのシャープなしと同じになるか調べてみました。
シャープネス-1だと

このようになり、シャープネス-2だと

このようになります。
シャープネス-2だとボケ過ぎで、シャープネス-1でSilkypixと同じくらいになります。

同じ写真の街中の看板付近も切り出して見ます。
SigmaPhotoProシャープネス0

SigmaPhotoProシャープネス-1

SigmaPhotoProシャープネス-2

Silkypix

やはりシャープネス-1でSilkypixと同じくらいになります。

両方の写真から推測すると、SigmaPhotoProのシャープネスの値の0は、「シャープネスなし」という意味ではなくて、シグマが考える標準的なシャープネスということのようです。-1がシャープネスなし、-2は元の写真がシャープ過ぎる時にぼかすための設定でしょう。

シャープネス-1で現像した写真を全画面表示すると、今となっては特にシャープには見えません。
最近のデジカメは2000万画素以上が珍しくなく、私は現像するときはシャープなしにして、表示するときにFastStone Image ViewerのLanczos3を使って、画面に表示できるぎりぎりまで高周波成分を落とさないようにしています。
これとの比較では、いくらローパスフィルターのないFoveonとはいえ、現行のMerrillなら兎も角、先代の469万画素では分が悪いです。
Foveonならば、Bayer配列で用いられる複屈折によるローパスフィルターは必要ありませんが、等間隔でサンプリングするからには何らかのローパスフィルターが必要で、実際には画素の前のマイクロレンズがその役目を果たしています。
一つの画素に入る光を合わせることで画素ピッチ以下の高周波成分を平均化によって落とすわけで、このローパス効果がなければ、最近傍法で縮小したようなギザギザの写真になります。
そして先代の469万画素では、それだけマイクロレンズによるローパスフィルターのカットオフ周波数も低くなります。
DP1の発売はもう5年も前ですから仕方ないですね。

2013-02-21

b-mobile4G 6ヶ月定額

イーモバイルはWiMAXと比べれば建物の中でもよく使えるのですが、見晴らしの効かないホテルの部屋とか、ビルの地下だと使えないことがあり、やはりドコモの回線を使う方が良いかな、と思っていたところで、b-mobileから新しい商品が出ました。
b-mobile4G 6ヶ月定額
30日毎に1GBまで速度制限なしで使えて、1GBを過ぎると128KB/sに制限され、30日過ぎるとリセットされて再び1GBまでは速度制限なしになります。
条件としてはb-mobileスマートSIMの月額1980円コースiijmioライトスタートプランと同じで、金額的にも 6ヶ月定額は14,900円、スマートSIMやiijは初期費用3,150円、月額約2,000円×6ということでほぼ同じです。
条件がほぼ同じなら、b-mobileはドコモから仕入れた帯域幅が少なくて遅いのでiijの方が良いのですが、プリペイドに拘るならこの6ヶ月定額ということになります。
個人的には日本通信は嫌いなので、イーモバイルの契約が終わったらiijの、ライトスタートプランがファミリーシェアプランにしようと思います。

3月21日追記
プラン名称変更・サービス仕様改定のお知らせ(IIJmio高速モバイル/Dサービス) IIJが随分良くなりましたので、今後b-mobileも対抗して良くなるでしょう。そうでなければb-mobileを選ぶ理由はありません。

4月26日追記
予想外に遅い「b-mobile スマホ電話SIM」は買ってはいけない
各社から色々と魅力的なプランが発表されていますので、b-mobileを使うことはないでしょう。
OCN モバイル エントリー d
IIJ mio高速モバイル/D

2013-02-20

DxO Optics Pro 8

学生さんの卒業論文発表も終わりましたので、少し時間の余裕が出来ました。

デジタルカメラのRAWファイルからJPEGファイルに変換するソフトで、Ver5の頃から4年間使い続けています。
毎年1回、バージョンアップするのでそのために費用がかかりますが、少しずつですが良くなっています。
全体的な使い方は
DxO Optics Pro 5の使いこなし
DxO Optics Pro 6の使いこなし
DxO Optics Pro 7の使いこなし
に書いてきたので、気になった変更点について書きます。

DxO Lighting

今回、一番良くなった点です。
これまではどうしても不自然さが感じられて、不自然さをなくすために詳細設定で色々な調整が必要でした。
今回のバージョンではかなり自然になって、効果を「弱い」「普通」「強い」から選ぶだけで十分です。
従来の効果が好きな人向けに、「DxO 7互換」という設定も選べます。

カラーレンダリング

以前はニコンのニュートラルにしておかないと、海の青がエメラルドグリーンになったり、赤が紅になったりしていましたが、今度のバージョンではOFFにしても大丈夫なようです。

ヴィネット

周辺減光の補正なのですが、今回のバージョンではautoにしておくと補正が過剰になって周辺の方が明るくなってしまいます。
autoにしておくと効果が100になっていますので、50くらいに減らすと丁度良いです。

露光調整

新たに「smart」という選択肢が用意されましたが、正直言ってよく分かりません。
「中心部に配慮した平均」を選んでおいて、仕上がりを見て微調整しています。

他はあまり変わりません。
ディストーションで歪曲収差を補正するときに、「画像比率維持」のチェックを外します。
外した方が、補正によってカットされる部分が減るからです。

2013-02-04

まとめ

前回の小テストの解答、授業評価アンケートとまとめの小テストをしました。

テスト問題

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

分散分析

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

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