molecular-ethology.biochem.s.u

Excelの使用法とExcel VBAを用
いたプログラミング入門
飯野雄一、豊島 有
1
実験をするとデータがどんどん出る。
→グラフにしてかっこよく発表するにはエクセルぐら
い使いこなせなきゃ!
それだけじゃない。今や大量データの時代!
これからの生物学者はコンピュータによる解析やプ
ログラミングができた方が絶対有利。
本格的なプログラムでなくとも、いろんなソフトに付随
しているマクロを使えるようになれば、繰り返し操作
などが自動化できる。
・・・ 手で何回も同じようなキー操作を打ち込むのは
カッコよくない!
さらに、ソフトにもともと用意されていない処理を自分
のニーズに合わせて作ることができる。
「でもすぐにはなかなか、、、、」
↓
1)プログラミングの考え方がわかれば
よい。
2)日頃からちょくちょく短いプログラムを
書くようにする。
→だんだん慣れる。
→いざやりたいことができたら勉強すれ
ばできると思えるところまで慣れる。
なぜ、この演習でまずExcelか?
Excelはデータ処理の最も定番のソフト。
関数による統計計算もできる上、ちゃ
んとしたプログラム言語(VBA)が備
わっている。
→上達すればレポート作成に有利。
→日常使うExcelで気軽にプログラムが
書けると大幅なパワーアップになる!
 Excelの表形式での視覚的なデータ表
示はプログラミングを覚えるのに最適。4

なぜ、この演習でまずExcelか?
プログラム言語はどれも似たようなも
の:英語とドイツ語のような関係。
☆ただし、どの読者も恐ろしく文法に
うるさい。---結局機械は石頭。
 その意味でもVBAはよい。
ヘルプもデバッグ機能もあるので。
しかもGUI(グラフィックユーザーイン
ターフェース)が標準装備。

5
一旦覚えればあとはなんとでもなる
本を買うのもよし
Excel VBAなどという本は山のよう
に出ている。
 分からないことがあったらネットで
検索。→山ほど答えが書いてある。
 他のプログラム言語も似たような
ものなので覚えるのは難しくない。

6
Excelの基本
7
Excelの基本的使い方




表形式にデータを並べて処理。
左端あるいは上端の番号、記号をクリックする
と行や列全体が選択される。選択しておいて、
上の「ホーム」タブの「セル」の「削除」をクリック
すると行、列が削除される。逆に同じ場所の
「挿入」で一行挿入。
「ホーム」タブの「セル」の「書式」の「非表示/再
表示」でその行を表示しないようにすることも可。
グラフにしたい部分を四角く囲って「挿入」タブ
をクリックする。→グラフの種類を選んでクリッ
ク。
8
Excelの基本的使い方


飛び飛びのセルの選択
Controlを押しながら順次セル範囲を選んでいく。
コピーの仕方
1)一つのセルを選択してコピー、別のセルを選
んでペースト。
2)連続したセルへのコピーは、セルを選択し、右
下端を持ってずりっと引きずる。どっち方向へも
可。
☆この際、数字は自動的に1ずつ増える場合が
ある。これをやめる(または強制的にやらせる)
ためにはControlを押しながら引きずる。
------ あとで使うので練習してみよう。
9
Excelの基本的使い方


コピーの仕方
ものすごく下まで同じものをコピーして埋めたいとき:
1) コピーするもとのセルをクリック
2) コピーしたい領域の一番下のセルをシフトを押しなが
らクリック(逆順でもよい)。
3) 「ホーム」タブの「編集」の「フィル」(下矢印のアイコン)
をクリック。
エラーバーのつけかた
1) グラフ上でデータ系列を選ぶ。
2) 「グラフツール」「レイアウト」タブの「誤差範囲」で「そ
の他の誤差範囲オプション」で設定ウィンドウを開く。
3) 「両方向」を選び、「ユーザー設定」「値の指定」と進む。
4) 「正の誤差の値」「負の誤差の値」で標準誤差の入力
されているセル範囲を選ぶ。
10
"A Genome-Wide Transcriptional Analysis of the Mitotic Cell Cycle"
11
マイクロアレイ解析
0分
10分
20分
・ ・ ・ ・ ・ ・
160分
mRNA抽出 mRNA抽出 mRNA抽出
蛍光ラベル 蛍光ラベル 蛍光ラベル
・・・・・・・・・
ハイブリダイ ハイブリダイ ハイブリダイ 遺伝子1
遺伝子2
ゼーション ゼーション ゼーション
遺伝子3
・
・
・
12
テキスト形式のデータ

数値データを扱う際のテキスト形式のファイルの
種類(万国共通)
空白区切り
タブ区切り
カンマ区切り
固定長データ
gene1 10 20 30
gene2 120 140 160
gene1 10
20 30
gene2 120 140 160
gene1,10,20,30
gene2,120,140,160
gene1 10 20 30
gene2 120 140 160
13
テキストデータの読み込み




Excel画面から、「ファイル」/「開く」を選択。
または「開く」アイコンをクリック。
選択対象を「すべての読み込み可能なファイ
ル」として、 開きたいテキストファイルを指定。
テキストファイルウィザードが開くので、「カン
マやタブなどの区切り文字によってフィールド
ごとに区切られたデータ」をチェック、「次へ」。
区切り文字のうち「スペース」をチェックして
「完了」。
14
データの並べ替え(ソート)

表形式のデータを行単位で入れ替え、特定の列の数字を
指標に昇順(上から下へ数字の小さい順)または降順(上
から下へ数字の大きい順)に並べ変える。
1) 並べ変えたいデータ全体を選択。ワークシート全体で
構わない場合は「コマンド‐A」キー。
2) 「データ」/「並べ替え」並べ替えウィンドウが開く。
3) 選択範囲の一番上の行がタイトル行(入れ替えの対象
にならない)であれば「先頭行をデータの見出しとして使用
する」をチェックする。
3) 「最優先されるキー」で指標とする列を選択。一番上の
行がタイトル行であれば列のタイトルで選ぶ。そうでなけ
れば列A、列B、…から選ぶ。昇順(値の小さい順)または
降順(大きい順)を選び、「OK」で並べ替えが実行される。15
関数
16
Excelの使い方のポイント



複数のセルの値から関数により計算して
答えを別のセルに入れる。
式の入ったセルを別のセルにコピーする
と、数字(値)がコピーされるわけではなく
式だけがコピーされるので、縦一列、横一
列などについて同じ計算をさせることがで
きる。
関数で処理しきれないときには適宜VBA
プログラミング言語によるマクロを使う。
17
Excelの関数


方法1)
結果を書き込みたいセルを選択し、「=average(A2:R2)」
などと書き込む。このとき、セルの名前"A2:R2"を入力す
るかわりに該当するセル範囲をドラッグで選択(またはセ
ルをクリック)してもよい。そのあとに")"を手入力するのを
忘れずに。入力後は必ずEnterを入力してボックスから出
ておく。先頭の"="も忘れずに。
方法1’)セルを選択してから数式バー("fx"の右のボック
ス)に書き込んでもいい。
方法2)
結果を書き込みたいセルを選択し、fxをクリック。
関数の一覧が表示されるので、必要な関数を選ぶと、関
数ウィザードが起動。これに従って必要な入力を行う。
18
Excel関数の調べ方


前記方法2)。関数の種類ごとに分類されてい
るので、これかなと思った関数について、「ク
リックすると選択した関数のヘルプが表示され
ます」をクリックすると説明が現れる。
「ファイル」タブの「ヘルプ」/「Microsoft Office
ヘルプ」をクリック、「ヘルプの検索」ボックスに
質問の文章を入れると関連のある説明を検索
してくれる。
19
Excelの関数の例(統計関数)




SUM(A2:R2) A2セルからR2セルまでの合計
AVERAGE(A2:R2) A2セルからR2セルまでの
平均
COUNT(A2:R2) A2セルからR2セルまでのう
ち数字のはいったセルの数
STDEV(A2:R2) A2セルからR2セルまでの標
準偏差
20
Excelの演算子
+ :足す
 - :引く
 * :掛ける
 / :割る
 ^ :累乗
 MOD(A1,A2) :A1をA2で割ったあまり(関数)
 ABS(A1) :A1の絶対値(関数)
 SQRT(A1) :A1の平方根(関数)
 " " :文字列を指定。例:A2はセルの名前。 "A2"は
A2という文字列。
 & :文字列の連結
("ABC" & "DEF" は "ABCDEF"になる)
[例] A2 & “DEF” と “A2” & “DEF”の違いは?

21
関数をコピーしたとき参照はどうなる?




AVERAGE(A2:R2) を下にコピーしてみましょう。
A2:R2の部分はどうなるでしょうか?
では右にコピーしたら?
このように、デフォルトでは相対的な位置関係
を保つようになっています(相対参照)。
絶対参照にさせるためには、$をつけます。行
だけまたは列だけに$をつけることもできます。
AVERAGE($A2:$R2)、AVERAGE(A$2:R$2) 、
AVERAGE($A$2:$R$2) と書き換えて、下と右
22
にコピーしてみましょう。
Excelの関数の例(文字操作)





LEN(A1) A1セルに書かれた文字列の文字数。
FIND("t",A1) A1セルの文字列の中で、左か
ら探してtが何番目に来るか。tがないときはエ
ラー値となる。
LEFT(A1,5) A1セルの文字列の左から5文字
をとる。
RIGHT(A1,7) A1セルの文字列の右から7文
字をとる。
MID(A1, 5, 3) A1セルの文字列の5文字目か
ら3文字をとる。
23
Excelの関数の例(その他)




IF(A1=0,"Yes","No") A1=0が正しければ(式の結果
がTrueであれば)"Yes"、正しくなければ"No"が表示さ
れる。
ISERROR(A1) A1セルの内容がエラーであればTrue。
TTEST(A2:R2,A3:R3,1,2) T検定。A2~R2のデータと
A3~R3のデータの平均の差異を検定しP値を表示。
HYPERLINK("http://yahoo.co.jp","Yahoo")クリックす
るとブラウザでhttp://yahoo.co.jpにアクセスする。セル
の表示はYahooとなる。

注:ハイパーリンクの設定されているセルを選択しようとしてク
リックすると、ブラウザが開いてしまう。単にセルを選びたいだ
けなら、隣のセルを選んだ後に矢印で移動するか、複数のセ
24
ルを選択する。
VBAマクロ
25
Excel VBAマクロについて





VBA = "Visual Basic for Applications"
プログラム言語 VB (Visual Basic)をマイクロソフト
のアプリケーション用にしたもの。
VBA for Excel, VBA for Word, VBA for
PowerPointなどがある。
いずれもアプリケーションに付属でついている。(単
なるVisual Basicは別個に販売されている。)
いずれも言語体系はVBと同じ。何に使うかが違う
分、対象に関する記述の部分が違っている(後述)。
ということで、本日はVBA for Excelを使う。Excel機
能に依存しない(VBとしての)使い方もできる。
26
プログラムを書いて走らせるということ

最初に認識しておいてください
<プログラムを書いて一発で動く人はいない>
たいてい、どこかに間違いがあって正しく動き
ません。動かないだけならいいが、暴走してウ
ンともスンとも言わなくなることしきり。=いわゆ
るフリーズ。これまでは人のせいだったがこれ
からは自分のせい。
↓
防衛策:プログラムを走らせる前には必ず苦労
して書いたファイルを保存することをお勧めしま
す。
27
VBA Editorの使い方

プロジェクトウィンドウ



現在開いているワークブックの構成が表示されている。
ワークブック全体はVBAプロジェクトと呼ばれ、各ワー
クシートとModule、Formなどからなる。ダブルクリック
するとそれぞれのコンポーネントに付随したマクロ
(ソースコード)が表示される。
メインウィンドウ

ここにVBAプログラム(「コード」)が表示される。現在表
示されているものが何であるかは、ウィンドウの一番
上のバーに表示されている。表示内容の切り替えはコ
マンドバーの「ウィンドウ」から行う。
28
表の画面と裏の画面の行き来


VBAエディタからExcel画面に行くには以下のいずれか。
1)左上のエクセルアイコンをクリック
2)Control-Tabまたはalt-Tabを使ってウィンドウを選ぶ
3) 「表示」/「Microsoft Excel」
4)「ファイル」/「終了してMicrosoft Excelに戻る」。この
場合はVBA画面は閉じられる。
Excel画面からVBA画面に行くには
「開発」/「Visual Basic」
29
プロシジャー

Sub Macro1()
End Sub
の間が1つのプロシジャー(一度に実行される命令
群)になる。これは正確にはSubプロシジャー(サブ
ルーチン)である。このプロシジャーが受け取る値が
あるときには、それが()内に書かれる。
これ以外にFunctionプロシジャー(値を返すプロシ
ジャー)、イベントプロシジャー(マウスクリック等、何か
の事象が起こったときに実行されるプロシジャー)など
がある。
30
マクロの実行とデバッグ(1)

マクロの実行は以下のいずれかの方法による。

VBA Editor画面から



Excel画面から



を押して起動。
カーソルがある位置のマクロが走る。
「実行」/「マクロの実行」またはFn-F5 。
「開発」/「マクロ」で実行するマクロの選択画面が出るので走らせたいマク
ロを選択。
「表示」/「マクロ」/「マクロの表示」で同じ画面を出す。
暴走してどうにもならないときは以下のいずれかの方法。
 画面下のタスクバーのExcelアイコン上で右クリック、「すべての
ウィンドウを閉じる」で開くウィンドウで「プログラムの再起動をし
ます」を選択。
 Shift-Control-Escから実行中のエクセルファイルを選び「タスク
の終了」
31
マクロの実行とデバッグ(2)

ファイルを開くとき



マクロプログラムを持つExcelファイルを一旦保存して
再度開こうとすると、「マクロが無効にされました」など
の警告が出る場合がある。これに対して「コンテンツ
の有効化」をクリックしてマクロを実行可能とする。
どうしても開かせてくれない場合は「ファイル」/「オプ
ション」/「セキュリティセンター」/「セキュリティーセン
ターの設定」/「マクロの設定」で適切なセキュリティー
レベルを選択する。
ちなみにWindows版Excel2007を使う人は、マクロを
含むファイルは.xlsx形式では保存できません。.xlsm
形式にします。
32
Excelファイルの呼称




Excelの1つのファイルを「ワークブック」と呼ぶ。
下に出っ張っているタブで選択できる1ページ
ずつを「ワークシート」と呼ぶ。
つまり、ワークブックは1つあるいは複数の
ワークシートよりなる。それぞれのワークシート
には名前がついている(タブに記載)。
ワークシート上のひとつひとつのます目のこと
を「セル」と呼ぶ。セルには数字や式が書かれ
ている。
33
セルの参照(1)


例えば第2行第3列のセルであれば、Cells(2,3)。
(参考) Range("C2")の表現も可能だがあまり実用
性はない。列行の順番が逆なので注意。
セル範囲の参照の場合(例えば左上の2行3列)は
Range(Cells(1,1),Cells(2,3))
Range("A1:C2")などを使う。
34
セルの参照(2)



前頁の内容は正確には
Worksheets(“data”).Cells(2,3)
(およびWorksheets(“data”).Range(“C2”) )
の表記が正しい。WorkSheetを指定しない場合は、現在ア
クティブなワークシート上のセル
(=ActiveSheet.Cells(2,3))を意味することになる。
通常はプログラム実行前に見ていたシートがアクティブ
シートである。
別のシートをアクティブにする方法
WorkSheets("data2").Activate
但し、頻繁に異なるシートをActivateすると、ちらちらしてプ
ログラムの実行も遅くなるので注意。
35
セルの値とプロパティ


ワークシート上の特定のセルに表示されている値のこ
とを、
Cells(2,3).Value
などと表記する。これも「WorkSheets().」を省略した形
である。さらに、「.Value」は省略可。つまり
Cells(2,3)
と書くとアクティブシートの第2行第3列のセルの値を意
味する。
それ以外にも、セルはいろいろな属性(プロパティ)を
持っている。
Cells(2,3).Height
高さ
Cells(2,3).Font
フォント
Cells(2,3).Borders 周りの罫線(の色、太さなど)
Cells(2,3).Interior 内部(塗り)
36
セルの操作


セルの値を使った計算の例
Cells(1,20) = Cells(1,1) / Cells(1,19)
セルの選択
Cells(1,1).Select
Selection.Value = 5
Cells(2,1).Select
Selection.Value = "Gene"
37
列番号対応表
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
S
T
U
V
W
X
Y
Z
AA
AB
AC
AD
AE
AF
AG
AH
AI
AJ
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
AK
AL
AM
AN
AO
AP
AQ
AR
AS
AT
AU
AV
AW
AX
AY
AZ
BA
BB
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
BC
BD
BE
BF
BG
BH
BI
BJ
BK
BL
BM
BN
BO
BP
BQ
BR
BS
BT
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
38
変数



変数
自由に値を代入して使えるもの。実態はコンピュータのメモリである。
例:
A = 1 ---- Aというメモリ領域に1という数字を入れる(=代入する)
B=2
”=”は右辺の値を左辺の変数に代入しろという意味。
C = A + B --- Aと書くと変数Aの値、つまりメモリの内容を読み出す
A=3
ことを意味する。変数AとBの内容を足してCに代入。
D=A+B
MsgBox D ----- Dの内容を表示する。
以上の一連の命令を実行すると、Aの値は3、Bの値は2、Cの値は
3、Dの値は5になる。
変数名には英字と数字が使える。但し先頭は数字であってはいけな
い。半角255文字以内。漢字も使える!
配列も使える。配列とは変数が番号付きで並んでいるようなもの。
A(2) = A(1) + 1
A(2,2) = B(2,2) + 1 など。
39
宣言文(1)

変数を使うためには、使う前に変数の型の宣言をする
必要がある。
例:Dim A As Integer
("A" を整数として定義する。)







Integer:整数(-32768~32768)
Long:長整数(-2147483648~ 2147483648 )
Single:単精度実数(有効数字約7桁)
Double:倍精度実数(有効数字約15桁)
String:文字列型変数
Boolean:論理変数。TrueとFalseのいずれかの値をとる。
Object:オブジェクト変数(ワークシート、セルなど何でも「物
(オブジェクト)」を代入できる。)
40
宣言文(2)


ただし、宣言しなくてもテキトーに処理される。
--- 正確にいうと、型宣言を省略するとVariant型の変数
となる(Variant型として明示的に宣言もできる)。この型
は格納されるデータに応じて変数の型を変化させるので
便利。
配列の宣言は要素の最大数を指定。
一次元配列: Dim A(100) As Integer
- A(1), A(2), A(3), .... A(100)の100個の変数が用意さ
れることと同じ。
二次元配列: Dim A(100,100) As Integer
- A(1,1) から A(100,100)までの10000個の変数を用意。
41
大文字と小文字



Visual Basicでは大文字と小文字は区別されない。つ
まりNameとnameは同じ意味であり別の名前としては
使えない。
しかし、便宜上しばしば大文字小文字交じりの変数名
を使う(例: NameString)。宣言文に変数名を大文字
小文字交じりで書いておくと、以降、小文字のみで入
力しても、 VBAエディターが自動的に大文字小文字交
じりになおしてくれる。大文字に直らないときはミスス
ペルの可能性がある。ミススペルのチェックに便利。
既定語(関数、制御文など)も通常大文字で始まる。こ
れもVBAエディタが自動的に直してくれる。さらに既定
語は自動的に青字になるので、書き方が間違ってい
ないかのチェックに便利。
42
演算子


以下のような計算式に使う。
代入
A=1
加算
A=B+1
減算
A=B-1
乗算
A=B*2
割算
A=B/3
べき乗 A = B ^ 2 (Bの2乗)
剰余
A = B mod 3 (Bを3で割ったあまり)
絶対値 A = Abs(B) (Bの絶対値)
文字列連結 A = B & “th data“ (&の両側は必ずス
ペースを空けること)
なお、オブジェクト変数にオブジェクトを代入する場合に限り、
Set A = Worksheets("data")
のように書く。これ以降、変数AはWorksheets("data")の意味
となる。
43
ループ




コンピュータプログラムは、書かれた命令を
一行ずつこなしていく。
しかし短い操作であれば手作業でもできる。
同じ作業を繰り返し(しかも正確に)行ってく
れるのがコンピュータの得意技。
それをさせるのがループです。
→これがコンピュータプログラムのキモなの
でよく習得してください。どういう順番で命令
が実行されるか、よく考えながらプログラム
44
を書いてください。
For文(ループ)(1)



N=0
For I = 1 To 10
N=N+I
Next I
MsgBox N
この例ではIを1から10まで1ずつ増やしながら「N=N+I」を何度も
実行する。つまり1から10までの和を計算。結果を表示する。
全体のプログラムの構造が分かりやすいように、ループの中はタ
ブ一個分、字下げをするとよい。
VBAエディターでは複数の行を選択し、タブキーを押すとまとめて
字下げされる。逆に字上げするときはシフト-タブ。
N=0
For I = 1 To 10 Step 2
N=N+I
Next I
Stepが指定されている場合、指定した数ずつIを増やしていく。つ
まり、この例ではI=1, I=3, I=5, I=7, I=9の順に実行される。
45
For文(ループ)(2)

二重ループ
N=0
For Row = 1 To 100
For Column = 1 To 10
N=N+1
Next Column
Next Row
For文を二重にする使い方もよく行われる。この例で
はRowを1から100まで順に増やすが、それぞれの
Rowについて、Columnを1から10まで順に増やしなが
ら実行する。つまりN=N+1は合計1000回実行される

必ずFor文とNext文の対応がついていることが必要で
ある。For Row...Next Rowの中にFor Column...Next
Columnがはいっていることに注意。
46
マクロの実行とデバッグ(3)





VBAエディタ画面で「デバッグ」/「ステップイン」(Fn-F8)とやると、一行ずつ実
行されるので、実行順の確認ができる。 「デバッグ」/「カーソル行の前まで実
行」(Command-Fn-F8)ではカーソル位置の前まで実行される。
途中、一時停止の状態での各変数の値が知りたいときは、「表示」/「イミディエ
イトウィンドウ」でイミディエイトウィンドウを開く。ここに、「?A」などという形で知り
たい変数を書いてリターンを押すと、そのときの変数の値が表示される。ちなみ
に、このウィンドウにはどんな命令でも入力できる。その命令が直ちに実行され
る。
予めプログラムの中に「Debug.Print A, B」などと書いておけば、その命令が実
行されるとイミディエイトウィンドウに変数の値が書かれる。
ウォッチウィンドウを使ってもよい。「表示」/「ウォッチウィンドウ」でウィンドウを開
く。ウォッチウィンドウ上で右クリックして「ウォッチ式の追加」でAなどと書いてお
くと、実行中のAの値が逐次表示される。
ブレークポイントを設定してから実行すると、ブレークポイントで止まるので、そ
のときの変数等の状態を調べることができる。コード画面の左側の枠をクリック
するとその行にブレークポイントが設定される。
47
マクロの実行とデバッグ(4)



プログラム実行時にエラーが起こったとき
表示されるウィンドウで「デバッグ」を選ぶとVBA画面が開
く(選択される)。黄色い矢印のところで問題が生じている。
イミディエイトウィンドウまたはウォッチウィンドウを使って
変数の値を確認する。
■を選ぶとデバッグモードが終了する。これを忘れると次
が実行できない。
48
If文(1)



If I = 0 Then J = 1
Iが0のときのみJを1にする。
If I = 0 Then
J=1
End If
Iが0のときのみJを1にする。
If I = 0 Then
J=1
Else
J=2
End If
Iが0のときにはJを1に、それ以外のときはJを2にする。
49
If文(2)


If I = 0 Then
J=1
ElseIf I=1 then
J=2
Else
J=3
End If
Iが0のときにはJを1に、そうでなくIが1のときにはJを2
に、それ以外のときはJを3にする。
☆☆最初の表記(一行で書いてしまう形式)以外のIF
文ではすべて End If を忘れないように。☆☆
50
条件式

If文などに使う条件式の書式
A=0 (前出と同じ"="だがこの場合は代入の意味ではない)
A<>0 「Aが0でない」
Not A>3 「A>3でない」
A>5 And B=<5 「Aが5より大きくかつBが5以下」
A<3 Or A>6
「A<3またはA>6」
(A>5 And B=<5) Or (A<3 And B>5)
A (Aが論理型の場合) 「A=Trueかどうか」
など
51
Doループ



Do While <条件式>
<命令群>
Loop
条件式が満たされる間、ループを繰り返す。
Do
<命令群>
Loop While <条件式>
条件式が満たされる間、ループを繰り返す。
その他の制御文について、詳しくは、Visual Basicヘ
ルプの目次から「Visual Basic言語のヘルプ」の「ス
テートメント」の項参照。
52
ループからの離脱とジャンプ

以下は、途中でループを抜けたくなった場合に
使う。



プロシジャー(マクロ)を終了させるときは、


Exit Do
Exit For
Exit Sub
単にプログラム上の別の場所にジャンプしたい
ときは

GoTo Label1
飛び先はLabel1: とする(コロンがポイント)
「Label1」の部分はどのような名前でもよい。
53
MsgBox





メッセージを出力する関数。
実はユーザーの応答(OKをクリックしたことな
ど)が関数の値として返される。
MsgBox(“Hello!”)
これをコードに書き込んで実行してみる。
応答を受け取る書き方
MsgBox(“Is this OK?”, vbOKCancel)
OKが押されたらvbOK(=1), キャンセルが押さ
れたらvbCancel(=2)という値を返す。
54
コメント行などの書き方




コメント行は’で始める。コメント行はエディターが
自動的に緑にする。
行の途中から’で始まるコメントを書くことも可。
1行に書ききれないとき、長くなって見にくいとき、
最後に _ (下線)をつけると、その行は次の行に
続くという意味になる。
:(コロン)で複数の短い行をつないで1行に書くこ
ともできる。
1行入力が終ったときに文法的な明らかな誤りが
あると怒られるので修正する(書きかけの場合な
どは無視する)。
55
ヘルプの使い方

VBAエディタで、「Help」/「Micorosft Visual Basic for
Applications ヘルプ」または「MSDNホームぺージ」か
ら検索。後者ではVisual Basicに関するヘルプのみ選
んで閲覧して下さい。
56
VBAヘルプ
57
正規化
58
cell_cycle_microarray6.xls
(名前順の10遺伝子のパターン比較)
3
YPL256C/CLN2
YPL257W/
YPL258C/
YPL259C/APM1
YPL260W/
YPL261C/
YPL262W/FUM1
YPL263C/
YPL264C/
YPL265W/DIP5
2.5
2
1.5
1
0.5
0
0
20
40
60
80
100
120
140
160
59
ユークリッド距離
この距離を二乗して足した
もの(の平方根)がユーク
リッド距離
↓
パターンが近いほど小さく
なる。
60
マクロの自動記録


VBAの非常に優れた機能。
手入力で行った作業を自動的にマクロのコードに変換してくれる。







Excel画面から、「開発」/「マクロの記録」または「表示」/「マクロ」/「マクロの
記録」
現れるウィンドウで、作成されるマクロの名前を確認、マクロの保存先が
「作業中のブック」となっていることを確認してOK.
記録したい作業を間違えないように行う。
終了したら「開発」/「記録終了」または「表示」/「マクロ」/「記録終了」をク
リックして完了。
VBAエディター画面で、作成されたマクロを確認。新しいModuleが作られて
いるかもしれないので注意。
しかし、必ずこのマクロが正しく動くわけではない。試しに、作成さ
れたマクロをすぐに実行してみるとよい。
あとは書かれたコードの意味を推定しつつ、必要に応じて書換え
ていく。
61
オブジェクト、プロパティ、メソッド




例えば「特定のセル(Range("A1"))」というオブジェクトについ
て、それが持ついろいろな属性をプロパティという。例え
ば.Value、 .Hight などはすべてプロパティ。
そのオブジェクトに対するいろいろな操作をメソッドという。
例えばRange("A1").Clearはセルの値を削除するというメソッド
である。
WorkSheets("data").Range("A1")は、WorkSheets ("data")
オブジェクトの持つひとつのプロパティである。つまり、何かの
オブジェクトのプロパティーがそれ自身オブジェクトであることも
多い。
従って、何々の何々の、、、と多段階に続く。例えば
WorkSheet("data").Range("A1").Font.Sizeなどとなる。
62
オブジェクト、プロパティ、メソッド



オブジェクトには種類がある。例えばCells(1,2)も
Range(A1:C2)もRangeオブジェクトという種類のオブジェクトで
ある。
オブジェクト間の関係を知るためには、ヘルプの質問のボック
スに知りたい語を入れてみるとよい。オブジェクトの説明が表
示されると階層関係の図が出てくる。
同じ名前のプロパティでも対象により違う意味になる。例えば
Fontプロパティはワークシートのセルのフォントでもありうるし、
グラフのタイトルのフォントでもありうる。Xxx.FontのXxx部分
(対象)を特定することが大事。
63
Withの使い方


例えば、 WorkSheets("data").Cells(1,1).Value = _
WorkSheets("data").Cells(1,1).Value / _
WorkSheets("data").Cells(1,19).Value
など、頻繁に共通のオブジェクトを参照する場合に、省
略して書く方法。
上記と同じ内容は、
With WorkSheets("data")
.Cells(1,1).Value = .Cells(1,1).Value / .Cells(1,19).Value
End With
と書かれる。先頭の.がWorkSheets("data")の省略を示
す。End Withまでの間、Withの効力が及ぶ。
64
ユーザーインターフェース
65
コントロール

ユーザーインターフェースのためのボタン。
コマンドボタン:押すと設定されたマクロが実行さ
れる。
テキストボックス:テキストや数値を入力する。
チェックボタン:チェックをつけるかはずすかでき
る。
リストボックス:一連のリストから選ばせる。
ラベル:字を書くだけ。
66
ユーザーフォーム


コントロールを配置するための画面。この上に
各種入力ボタンや入力欄(コントロール)を配置
し、マクロの実行によってユーザーフォームを
表示する。
ユーザーフォームが表示された状態で、コント
ロールに入力を行うことができる。
67
ユーザーフォームの作成とコントロール
の配置(1)




VBAエディタ画面から「挿入」/「ユーザー
フォーム」でユーザーフォームが作成され、表
示される。同時にプロジェクトウィンドウでも
ユーザーフォームが追加されていることを確認。
ツールボックスも表示されているはず。表示さ
れていなければ「表示」/「ツールボックス」。
ツールボックスで配置したいコントロールをク
リックし、ユーザーフォーム上をドラッグすると、
その大きさにコントロールが配置される。
ツールボックスでは「A」がラベル、「ab|」がテキ
ストボックス、□がコマンドボタンである。
68
ユーザーフォームの作成とコントロール
の配置(2)



コントロール(コマンドボタン等)の表示文字は、選択し
た状態で再度字をゆっくりクリックすると文字入力モー
ドになり変更できる。「スタート」「開始」「閉じる」などと
変更しておこう。
配置したコントロールを選択すると、プロパティウィンド
ウ(表示されていなかったら「表示」/「プロパティウィ
ンドウ」)にその名前(オブジェクト名)等が表示される
ので、細かく設定することができる。名前はマクロプロ
グラムから参照する時に使うので、このウィンドウで確
認しておく。
例えば、テキストボックスはTextBox1などという名前
になっているはず。プロパティウィンドウでコントロー
ルの名前を変更することもできる。例えば
69
TextBoxReferenceGeneなどに変更可。
ユーザーフォームのコードの作成



コマンドボタンをダブルクリックすると、コードウィンド
ウが開く。
Private Sub CommandButton1_Click()
などとなっているであろう。ここにこのボタンを押したと
きに実行するコマンド群を記載する。
例えば、ユーザーはTextBox1に数字を入力し、その
後にCommandButton1「スタート」をクリックするとす
る。
Sub CommandButton1_Click()の中でTextBox1に入
力された値を参照したければ、
InNumber = TextBox1.Value
(あるいはTextBox1.Text)などとして参照できる。
コードウィンドウを表示させるには「表示」/「コード」 70
ユーザーフォームの終了



実行時にユーザーフォームを終了させるため
には、2つの方法がある。
1)ユーザーフォームの左上の×をクリック。
2)ユーザーフォームにコマンドボタンを配置し
(例えば「終了」ボタン)、これをクリックしたとき
に実行されるコードに例えば
Sub Macro2()
UserForm1.Hide
Unload UserForm1
End Sub
と記載する。
71
ユーザーフォームの表示



ではユーザーフォームを表示させるにはどうするか。
これは少し面倒くさい。
まず標準モジュールの中のマクロを起動する。つまり、
普通のMacro1()などである。このコードの中に以下の
ように記述する。
Sub Macro1()
Load UserForm1
UserForm1.Show
End Sub
このマクロを実行すると、ユーザーフォームが開いて
入力ができる。ユーザーフォームの上のコマンドボタ
ンをクリックすれば、CommandButton_Clickのコード
が実行されることになる。
72
ワークシート上へのコントロールの配置





Excelからマクロをボタン1つで起動できるようにしよう。
Excel画面のワークシートが表示されている状態で、「開
発」/「挿入」でフォームコントロールの中から□(ボタン)
を選び、シート上の置きたい場所でドラッグ。
「マクロの登録」ウィンドウが出るので、「マクロの保存
先」が「作業中のブック」となっていることを確認して、実
行させたいマクロをクリック、OK。
ボタンの表示を変えたければ、選択して再度ゆっくり文
字をクリックすると、文字変更モードになり変更できる。
以降、このボタンをクリックするとボタンに登録したマクロ
が走る。
73
その他の機能
74
エラー処理



エラーが生じた場合、通常はエラーメッセージが表示さ
れ、プログラムが停止してデバッグ画面となる。
エラーが生じたときの処理をプログラム内で制御したい
場合は、
On Error GoTo Label1:
を実行する(Label1はどんな名前でもよい)。この命令を
実行以降は、どんなタイプのエラーであっても、エラーが
生じるとLabel1にジャンプする。
エラー処理の指定を解除したいときは
On Error GoTo 0
を実行する。つまり、最初の命令からこの命令までの間
でエラーが起こった場合のみ、Label1以降のプログラム
が実行される。
75
図の描画(1)

図形描画ツールバー(「表示」/「ツールバー」で表示)を使って
図形をシート上の並べながら「マクロの自動記録」をすると以下
のようになる。
ActiveSheet.Shapes.AddShape(msoShapeRectangle, Left,
Top, Width, Height).Select
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(255, 0, 0)
Selection.ShapeRange.Fill.Solid
Selection.ShapeRange.Fill.Visible=msoTrue
左上隅から数える
Left, Top
Width
Height
図の描画(2)


以下のように書くこともできる。
With Worksheets(“sheet1”).Shapes.AddShape(
msoShapeRectangle, Left, Top, Width, Height)
.Fill.ForeColor.RGB = RGB(255, 0, 0)
.Fill.Solid
.Fill.Visible=msoTrue
End With
AddShapeは図形(オートシェイプ)をシートに追加するとともに、
その図形をオブジェクトとして返す。
したがって、With文では新たに追加した図形を対象として、そ
の各種プロパティを設定する形になる。
図の描画(3)
図の描画(4)
図の描画(5)


図形のいろいろなプロパティ
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, Left, Top, Width,
Height)
↑長方形描画、選択
.Fill.ForeColor.RGB = RGB(255, 0, 0)
↑塗りの色
.Fill.Solid
↑ベタ塗り
.Fill.Visible=msoTrue
↑塗ってある(msoFalseなら中空。msoTrue, msoFalseはTrue, Falseでも可)
.Line.ForeColor.RGB = RGB(0, 255, 0)
↑輪郭線の色
.Line.Weight = 8
↑輪郭線の太さ
.Line.Visible = msoTrue
↑輪郭線あり
別の種類の図形の指定法は
VBAヘルプでAddshapeで調べる。例えば楕円はmsoShapeOval
図の描画(6)
改行コード



機種
改行コード
Mac(OS9まで)
CR
Windows
CRLF (0D0A=13, 10)
Unix, Linux, Mac OSX
LF
(0D=13)
(0A = 10)
別のOSで作られたファイルを読む場合、ファイルを開くソフトにより正しく解釈し
てくれる場合もあるが、そうでないと改行と認識されず無視されたり変な記号が
はいり、次の行と続いてしまう。
改行コードは半角文字の一種であり、例えばMacintoshの場合16進数表示で0D、
10進数で13である。CR(キャリッジリターン)とも表示する(LFはラインフィード)。こ
のような特殊文字をVBで表現する場合にはChr関数を使う。あるいは規定定数
vbCrなどが用意されている。
CRLFは2文字相当なので注意。
コード
Chr関数
Tab
Chr(9)
LF
Chr(10)
CR
Chr(13)
CRLF
Chr(13)&Chr(10)
使用中の機種の改行コード
VB定数
vbTab
vbLf
vbCr
vbCrLf
vbNewLine
82
ファイル入出力(1)



Open "<ファイルの(場所と)名前>" For Input as #1
Do While Not EOF(1) (ファイルの最後かどうか)
Line Input #1, A (1行をAに読み込む)
~
Loop
Close #1
Open "<ファイルの(場所と)名前>" For Output as #2
~
Print #2, <書きだす内容>
~
Close #2
#1、#2は入出力のID。好きな番号にしてよい。
83
ファイル入出力(2)



ファイル入出力の際、ファイルの場所は以下のようにフル
パスで書く。
“C:\Documents and Settings\Iino\My Documents\新
基盤生命学特別演習1\2010演習\blast.txt”
しかし、いつもこのように書くのは面倒なので、デフォルト
のフォルダを決める。
Excelの通常画面から「ツール」/「オプション」で開くウィン
ドウの「全般」タブを選び、「カレントフォルダ名」に、ファイ
ルを置くフォルダ名をフルパスで書く。上の例では
C:\Documents and Settings\Iino\My Documents\新基
盤生命学特別演習1\2010演習
と書く。
「カレントフォルダ名」を空欄にしておくと、実行するExcel
ファイルと同じフォルダがカレントフォルダとなるので便利。
84
Excel VBAの文字操作関数の例









Len(Str) 文字変数Strに格納された文字の文字数。
InStr(Str, "t") Strの文字列の中で、左から探してtが何番目に来
るかという数字を返す。tがないときは0となる。同じ機能のExcel関
数はFindであり引数の順番も異なることに注意!
InStrRev(Str, “t”) InStrと同じだが、右端から探すことが異なる。
tが複数あるときは最も右のtが選ばれることになる。☆Mac版には
ないようです。
Left(Str,5) Strの文字列の左から5文字をとる。
Right(Str,7) Strの文字列の右から7文字をとる。
Mid(Str, 5, 3) Strの文字列の5文字目から3文字をとる。
UCase(Str) Strをすべて大文字にする。
LCase(Str) Strをすべて小文字にする。
Split(Str, Delimiter) 長い文字列を区切り文字で区切って分け、
結果の配列を返す。例えばStrの内容が"A,B,C,D"となっているとき、
Split(Str, ",")(0)は"A", Split(Str, ",")(3)は"D"となる。
UBound(Split(Str, ","))で要素の数-1(この場合は3)がわかる。 85
VBAのインストール
86
VBAのインストール(1)

インストールされているかどうかの確認




1)Excelを立ち上げる。
2)コマンドバーの「開発」で「Visual Basic」が表示さ
れればVBAはインストールされている。
3)さらに、「開発」/「Visual Basic」を選択しVisual
Basic Editorを起動する。
4)コマンドバーの「ヘルプ」から「Microsoft Visual
Basicヘルプ」が表示されればヘルプもインストール
されているので問題ない。
87
VBAのインストール(2)

インストール



方法1)Visual Basic EditorやMicrosoft Visual Basic
ヘルプが表示されない場合はたぶん「ディスクからイ
ンストール」のような表示がされているので、これに従
う。
方法2)Windowsでは、コントロールパネルから「プロ
グラムと機能」を選び、プログラム一覧からExcelなり
Officeを選んで「変更」、「機能の追加、削除」で必要な
コンポーネントを選び、インストールディスクを挿入して
「ディスクからインストール」。
方法3)(Macの場合。しかしWinもおそらく同様。)イン
ストーラディスクをCDドライブに入れて起動→インス
トーラプログラムを起動→Officeツールの中のVisual
88
Basic for Applicationsをインストールして完了。
ヒートマップ
Red
0
Green
0
Blue 255
0
255
255
0
255
0
255
255
0
255
0
0
89