excel の使用法と excel vba を用いたプログラミング入門

89
1 Excel ののののの Excel VBA のの ののののののののののの ののの のの の 一、

Upload: dai-townsend

Post on 30-Dec-2015

135 views

Category:

Documents


0 download

DESCRIPTION

Excel の使用法と Excel VBA を用いたプログラミング入門. 飯野雄一、豊島 有. 実験をするとデータがどんどん出る。 →グラフにしてかっこよく発表するにはエクセルぐらい使いこなせなきゃ! それだけじゃない。今や大量データの時代! これからの生物学者はコンピュータによる解析やプログラミングができた方が絶対有利。 本格的なプログラムでなくとも、いろんなソフトに付随しているマクロを使えるようになれば、繰り返し操作などが自動化できる。 ・・・ 手で何回も同じようなキー操作を打ち込むのはカッコよくない! - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Excel の使用法と Excel VBA を用いたプログラミング入門

1

Excel の使用法と Excel VBAを用いたプログラミング入門

飯野雄一、豊島 有

Page 2: Excel の使用法と Excel VBA を用いたプログラミング入門

実験をするとデータがどんどん出る。→グラフにしてかっこよく発表するにはエクセルぐらい使いこなせなきゃ!それだけじゃない。今や大量データの時代!これからの生物学者はコンピュータによる解析やプログラミングができた方が絶対有利。

本格的なプログラムでなくとも、いろんなソフトに付随しているマクロを使えるようになれば、繰り返し操作などが自動化できる。・・・ 手で何回も同じようなキー操作を打ち込むのはカッコよくない!

さらに、ソフトにもともと用意されていない処理を自分のニーズに合わせて作ることができる。

Page 3: Excel の使用法と Excel VBA を用いたプログラミング入門

「でもすぐにはなかなか、、、、」↓1)プログラミングの考え方がわか

ればよい。2)日頃からちょくちょく短いプロ

グラムを書くようにする。→ だんだん慣れる。→ いざやりたいことができたら勉強

すればできると思えるところまで慣れる。

Page 4: Excel の使用法と Excel VBA を用いたプログラミング入門

4

なぜ、この演習でまず Excelか?

Excel はデータ処理の最も定番のソフト。関数による統計計算もできる上、ちゃんとしたプログラム言語( VBA )が備わっている。→上達すればレポート作成に有利。→日常使う Excel で気軽にプログラムが書けると大幅なパワーアップになる!

Excel の表形式での視覚的なデータ表示はプログラミングを覚えるのに最適。

Page 5: Excel の使用法と Excel VBA を用いたプログラミング入門

5

なぜ、この演習でまず Excelか?

プログラム言語はどれも似たようなもの:英語とドイツ語のような関係。

☆ただし、どの読者も恐ろしく文法にうるさい。 --- 結局機械は石頭。

その意味でも VBA はよい。ヘルプもデバッグ機能もあるので。しかも GUI (グラフィックユーザーインターフェース)が標準装備。

Page 6: Excel の使用法と Excel VBA を用いたプログラミング入門

6

一旦覚えればあとはなんとでもなる

本を買うのもよしExcel VBA などという本は山のように出ている。

分からないことがあったらネットで検索。→山ほど答えが書いてある。

他のプログラム言語も似たようなものなので覚えるのは難しくない。

Page 7: Excel の使用法と Excel VBA を用いたプログラミング入門

Excel の基本

7

Page 8: Excel の使用法と Excel VBA を用いたプログラミング入門

8

Excel の基本的使い方

表形式にデータを並べて処理。 左端あるいは上端の番号、記号をクリック

すると行や列全体が選択される。選択しておいて、上の「ホーム」タブの「セル」の「削除」をクリックすると行、列が削除される。逆に同じ場所の「挿入」で一行挿入。

「ホーム」タブの「セル」の「書式」の「非表示 /再表示」でその行を表示しないようにすることも可。

グラフにしたい部分を四角く囲って「挿入」タブをクリックする。→グラフの種類を選んでクリック。

Page 9: Excel の使用法と Excel VBA を用いたプログラミング入門

9

Excel の基本的使い方 飛び飛びのセルの選択

Control を押しながら順次セル範囲を選んでいく。 コピーの仕方

1) 一つのセルを選択してコピー、別のセルを選んでペースト。2)連続したセルへのコピーは、セルを選択し、右下端を持ってずりっと引きずる。どっち方向へも可。☆この際、数字は自動的に1ずつ増える場合がある。これをやめる(または強制的にやらせる)ためには Control を押しながら引きずる。

------ あとで使うので練習してみよう。

Page 10: Excel の使用法と Excel VBA を用いたプログラミング入門

10

Excel の基本的使い方 コピーの仕方

ものすごく下まで同じものをコピーして埋めたいとき:1) コピーするもとのセルをクリック2) コピーしたい領域の一番下のセルをシフトを押しながらクリック(逆順でもよい)。3) 「ホーム」タブの「編集」の「フィル」(下矢印のアイコン)をクリック。

エラーバーのつけかた1) グラフ上でデータ系列を選ぶ。2) 「グラフツール」「レイアウト」タブの「誤差範囲」で「その他の誤差範囲オプション」で設定ウィンドウを開く。3) 「両方向」を選び、「ユーザー設定」「値の指定」と進む。4) 「正の誤差の値」「負の誤差の値」で標準誤差の入力されているセル範囲を選ぶ。

Page 11: Excel の使用法と Excel VBA を用いたプログラミング入門

"A Genome-Wide Transcriptional Analysis of the Mitotic Cell Cycle"

11

Page 12: Excel の使用法と Excel VBA を用いたプログラミング入門

12

mRNA抽出

蛍光ラベル

ハイブリダイゼーション

mRNA抽出

蛍光ラベル

ハイブリダイゼーション

mRNA抽出

蛍光ラベル

ハイブリダイゼーション

・・・・・・・・・

マイクロアレイ解析

遺伝子 1遺伝子 2遺伝子 3 ・ ・ ・

0分 10 分 20 分        ・ ・ ・ ・ ・ ・ 160 分

Page 13: Excel の使用法と Excel VBA を用いたプログラミング入門

テキスト形式のデータ 数値データを扱う際のテキスト形式のファイ

ルの種類(万国共通)

空白区切り gene1 10 20 30gene2 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 16013

Page 14: Excel の使用法と Excel VBA を用いたプログラミング入門

テキストデータの読み込み

Excel画面から、「ファイル」/「開く」を選択。または「開く」アイコンをクリック。

選択対象を「すべての読み込み可能なファイル」として、 開きたいテキストファイルを指定。

テキストファイルウィザードが開くので、「カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ」をチェック、「次へ」。

区切り文字のうち「スペース」をチェックして「完了」。

14

Page 15: Excel の使用法と Excel VBA を用いたプログラミング入門

データの並べ替え(ソート) 表形式のデータを行単位で入れ替え、特定の列の数字を指標

に昇順(上から下へ数字の小さい順)または降順(上から下へ数字の大きい順)に並べ変える。1) 並べ変えたいデータ全体を選択。ワークシート全体で構わない場合は「コマンド‐A」キー。2) 「データ」 /「並べ替え」並べ替えウィンドウが開く。3) 選択範囲の一番上の行がタイトル行(入れ替えの対象にならない)であれば「先頭行をデータの見出しとして使用する」をチェックする。3) 「最優先されるキー」で指標とする列を選択。一番上の行がタイトル行であれば列のタイトルで選ぶ。そうでなければ列 A 、列 B、…から選ぶ。昇順(値の小さい順)または降順(大きい順)を選び、「 OK 」で並べ替えが実行される。

15

Page 16: Excel の使用法と Excel VBA を用いたプログラミング入門

関数

16

Page 17: Excel の使用法と Excel VBA を用いたプログラミング入門

17

Excel の使い方のポイント

複数のセルの値から関数により計算して答えを別のセルに入れる。

式の入ったセルを別のセルにコピーすると、数字(値)がコピーされるわけではなく式だけがコピーされるので、縦一列、横一列などについて同じ計算をさせることができる。

関数で処理しきれないときには適宜VBA プログラミング言語によるマクロを使う。

Page 18: Excel の使用法と Excel VBA を用いたプログラミング入門

18

Excel の関数 方法1)

結果を書き込みたいセルを選択し、「 =average(A2:R2) 」などと書き込む。このとき、セルの名前 "A2:R2" を入力するかわりに該当するセル範囲をドラッグで選択(またはセルをクリック)してもよい。そのあとに ")" を手入力するのを忘れずに。入力後は必ず Enter を入力してボックスから出ておく。先頭の "=" も忘れずに。方法1’)セルを選択してから数式バー( "fx"の右のボックス)に書き込んでもいい。

方法2)結果を書き込みたいセルを選択し、 fx をクリック。関数の一覧が表示されるので、必要な関数を選ぶと、関数ウィザードが起動。これに従って必要な入力を行う。

Page 19: Excel の使用法と Excel VBA を用いたプログラミング入門

19

Excel 関数の調べ方

前記方法2)。関数の種類ごとに分類されているので、これかなと思った関数について、「クリックすると選択した関数のヘルプが表示されます」をクリックすると説明が現れる。

「ファイル」タブの「ヘルプ」/「 Microsoft Office ヘルプ」をクリック、「ヘルプの検索」ボックスに質問の文章を入れると関連のある説明を検索してくれる。

Page 20: Excel の使用法と Excel VBA を用いたプログラミング入門

20

Excel の関数の例(統計関数)

SUM ( A2:R2) A2 セルから R2 セルまでの合計

AVERAGE ( A2:R2) A2 セルから R2セルまでの平均

COUNT ( A2:R2) A2 セルから R2 セルまでのうち数字のはいったセルの数

STDEV ( A2:R2) A2 セルから R2 セルまでの標準偏差

Page 21: Excel の使用法と Excel VBA を用いたプログラミング入門

21

Excel の演算子 + :足す - :引く * :掛ける / :割る ^ :累乗 MOD(A1,A2) : A1 を A2 で割ったあまり ( 関

数) ABS(A1) : A1 の絶対値(関数) SQRT(A1) :A1 の平方根(関数) " " :文字列を指定。例: A2 はセルの名前。

"A2" は A2 という文字列。 & :文字列の連結   ( "ABC" & "DEF" は "ABCDEF" になる)[ 例 ] A2 & “DEF” と “ A2” & “DEF” の違いは?

Page 22: Excel の使用法と Excel VBA を用いたプログラミング入門

関数をコピーしたとき参照はどうなる?

AVERAGE ( A2:R2) を下にコピーしてみましょう。 A2:R2 の部分はどうなるでしょうか?

では右にコピーしたら?

このように、デフォルトでは相対的な位置関係を保つようになっています(相対参照)。

絶対参照にさせるためには、 $をつけます。行だけまたは列だけに $をつけることもできます。AVERAGE ( $A2:$R2) 、 AVERAGE ( A$2:R$2) 、 AVERAGE ( $A$2:$R$2) と書き換えて、下と右にコピーしてみましょう。

22

Page 23: Excel の使用法と Excel VBA を用いたプログラミング入門

23

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文字をとる。

Page 24: Excel の使用法と Excel VBA を用いたプログラミング入門

24

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 となる。 注:ハイパーリンクの設定されているセルを選択しようとして

クリックすると、ブラウザが開いてしまう。単にセルを選びたいだけなら、隣のセルを選んだ後に矢印で移動するか、複数のセルを選択する。

Page 25: Excel の使用法と Excel VBA を用いたプログラミング入門

VBA マクロ

25

Page 26: Excel の使用法と Excel VBA を用いたプログラミング入門

26

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 としての ) 使い方もできる。

Page 27: Excel の使用法と Excel VBA を用いたプログラミング入門

プログラムを書いて走らせるということ

最初に認識しておいてください<プログラムを書いて一発で動く人はいない>たいてい、どこかに間違いがあって正しく動きません。動かないだけならいいが、暴走してウンともスンとも言わなくなることしきり。=いわゆるフリーズ。これまでは人のせいだったがこれからは自分のせい。↓防衛策:プログラムを走らせる前には必ず苦労して書いたファイルを保存することをお勧めします。

27

Page 28: Excel の使用法と Excel VBA を用いたプログラミング入門

28

VBA Editor の使い方 プロジェクトウィンドウ

現在開いているワークブックの構成が表示されている。

ワークブック全体は VBA プロジェクトと呼ばれ、各ワークシートと Module 、 Form などからなる。ダブルクリックするとそれぞれのコンポーネントに付随したマクロ(ソースコード)が表示される。

メインウィンドウ ここに VBA プログラム(「コード」)が表示され

る。現在表示されているものが何であるかは、ウィンドウの一番上のバーに表示されている。表示内容の切り替えはコマンドバーの「ウィンドウ」から行う。

Page 29: Excel の使用法と Excel VBA を用いたプログラミング入門

29

表の画面と裏の画面の行き来

VBA エディタから Excel画面に行くには以下のいずれか。1) 左上のエクセルアイコンをクリック2)Control-Tab または alt-Tab を使ってウィンドウを選ぶ3) 「表示」 /「 Microsoft Excel 」4) 「ファイル」/「終了して Microsoft Excel に戻る」。この場合は VBA画面は閉じられる。

Excel画面から VBA画面に行くには「開発」/「 Visual Basic 」

Page 30: Excel の使用法と Excel VBA を用いたプログラミング入門

30

プロシジャー

Sub Macro1()

End Subの間が1つのプロシジャー(一度に実行される命令群)になる。これは正確には Sub プロシジャー(サブルーチン)である。このプロシジャーが受け取る値があるときには、それが()内に書かれる。

これ以外に Function プロシジャー(値を返すプロシジャー)、イベントプロシジャー(マウスクリック等、何かの事象が起こったときに実行されるプロシジャー)などがある。

Page 31: Excel の使用法と Excel VBA を用いたプログラミング入門

31

マクロの実行とデバッグ (1) マクロの実行は以下のいずれかの方法による。

VBA Editor画面から  を押して起動。

カーソルがある位置のマクロが走る。 「実行」 /「マクロの実行」または Fn-F5 。

Excel画面から 「開発」 / 「マクロ」で実行するマクロの選択画面が出るので走ら

せたいマクロを選択。 「表示」 /「マクロ」 /「マクロの表示」で同じ画面を出す。

暴走してどうにもならないときは以下のいずれかの方法。 画面下のタスクバーの Excel アイコン上で右クリック、

「すべてのウィンドウを閉じる」で開くウィンドウで「プログラムの再起動をします」を選択。

Shift-Control-Esc から実行中のエクセルファイルを選び「タスクの終了」

Page 32: Excel の使用法と Excel VBA を用いたプログラミング入門

32

マクロの実行とデバッグ (2) ファイルを開くとき

マクロプログラムを持つ Excel ファイルを一旦保存して再度開こうとすると、「マクロが無効にされました」などの警告が出る場合がある。これに対して「コンテンツの有効化」をクリックしてマクロを実行可能とする。

どうしても開かせてくれない場合は「ファイル」 /「オプション」 /「セキュリティセンター」 /「セキュリティーセンターの設定」 /「マクロの設定」で適切なセキュリティーレベルを選択する。

ちなみに Windows版 Excel2007 を使う人は、マクロを含むファイルは .xlsx 形式では保存できません。 .xlsm 形式にします。

Page 33: Excel の使用法と Excel VBA を用いたプログラミング入門

33

Excel ファイルの呼称

Excel の1つのファイルを「ワークブック」と呼ぶ。

下に出っ張っているタブで選択できる1ページずつを「ワークシート」と呼ぶ。

つまり、ワークブックは1つあるいは複数のワークシートよりなる。それぞれのワークシートには名前がついている(タブに記載)。

ワークシート上のひとつひとつのます目のことを「セル」と呼ぶ。セルには数字や式が書かれている。

Page 34: Excel の使用法と Excel VBA を用いたプログラミング入門

34

セルの参照 (1)

例えば第2行第3列のセルであれば、 Cells(2,3) 。(参考) Range("C2") の表現も可能だがあまり実用性はない。列行の順番が逆なので注意。

セル範囲の参照の場合(例えば左上の 2行 3列)はRange(Cells(1,1),Cells(2,3))Range("A1:C2") などを使う。

Page 35: Excel の使用法と Excel VBA を用いたプログラミング入門

35

セルの参照 (2)

前頁の内容は正確にはWorksheets(“data”).Cells(2,3)(およびWorksheets(“data”).Range(“C2”) )の表記が正しい。 WorkSheet を指定しない場合は、現在アクティブなワークシート上のセル( =ActiveSheet.Cells(2,3) )を意味することになる。

通常はプログラム実行前に見ていたシートがアクティブシートである。

別のシートをアクティブにする方法WorkSheets("data2").Activate但し、頻繁に異なるシートを Activate すると、ちらちらしてプログラムの実行も遅くなるので注意。

Page 36: Excel の使用法と Excel VBA を用いたプログラミング入門

36

セルの値とプロパティ ワークシート上の特定のセルに表示されている値のこ

とを、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 内部(塗り)

Page 37: Excel の使用法と Excel VBA を用いたプログラミング入門

37

セルの操作

セルの値を使った計算の例Cells(1,20) = Cells(1,1) / Cells(1,19)

セルの選択Cells(1,1).SelectSelection.Value = 5Cells(2,1).SelectSelection.Value = "Gene"

Page 38: Excel の使用法と Excel VBA を用いたプログラミング入門

列番号対応表

38

A 1B 2C 3D 4E 5F 6G 7H 8I 9J 10K 11L 12M 13N 14O 15P 16Q 17R 18

S 19T 20U 21V 22W 23X 24Y 25Z 26

AA 27AB 28AC 29AD 30AE 31AF 32AG 33AH 34AI 35AJ 36

BC 55BD 56BE 57BF 58BG 59BH 60BI 61BJ 62BK 63BL 64BM 65BN 66BO 67BP 68BQ 69BR 70BS 71BT 72

AK 37AL 38AM 39AN 40AO 41AP 42AQ 43AR 44AS 45AT 46AU 47AV 48AW 49AX 50AY 51AZ 52BA 53BB 54

Page 39: Excel の使用法と Excel VBA を用いたプログラミング入門

39

変数 変数

自由に値を代入して使えるもの。実態はコンピュータのメモリである。例:A = 1 ---- A というメモリ領域に 1という数字を入れる(=代入する)B = 2    ” = ”は右辺の値を左辺の変数に代入しろという意味。C = A + B --- A と書くと変数 A の値、つまりメモリの内容を読み出すA = 3      ことを意味する。変数 A と Bの内容を足して Cに代入。D = A + BMsgBox D ----- D の内容を表示する。以上の一連の命令を実行すると、 A の値は3、 Bの値は2、 Cの値は3、D の値は5になる。

変数名には英字と数字が使える。但し先頭は数字であってはいけない。半角 255文字以内。漢字も使える!

配列も使える。配列とは変数が番号付きで並んでいるようなもの。A(2) = A(1) + 1A(2,2) = B(2,2) + 1 など。

Page 40: Excel の使用法と Excel VBA を用いたプログラミング入門

40

宣言文(1) 変数を使うためには、使う前に変数の型の宣言を

する必要がある。例: Dim A As Integer("A" を整数として定義する。 ) Integer :整数( -32768~ 32768) Long :長整数( -2147483648~ 2147483648 ) Single :単精度実数(有効数字約 7桁) Double :倍精度実数(有効数字約 15桁) String :文字列型変数 Boolean :論理変数。 True と False のいずれかの値

をとる。 Object :オブジェクト変数(ワークシート、セルな

ど何でも「物(オブジェクト)」を代入できる。)

Page 41: Excel の使用法と Excel VBA を用いたプログラミング入門

41

宣言文(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個の変数を用意。

Page 42: Excel の使用法と Excel VBA を用いたプログラミング入門

42

大文字と小文字 Visual Basic では大文字と小文字は区別されない。つまり Name と name は同じ意味であり別の名前としては使えない。

しかし、便宜上しばしば大文字小文字交じりの変数名を使う(例: NameString )。宣言文に変数名を大文字小文字交じりで書いておくと、以降、小文字のみで入力しても、 VBA エディターが自動的に大文字小文字交じりになおしてくれる。大文字に直らないときはミススペルの可能性がある。ミススペルのチェックに便利。

既定語(関数、制御文など)も通常大文字で始まる。これも VBA エディタが自動的に直してくれる。さらに既定語は自動的に青字になるので、書き方が間違っていないかのチェックに便利。

Page 43: Excel の使用法と Excel VBA を用いたプログラミング入門

43

演算子 以下のような計算式に使う。

代入 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") の意味となる。

Page 44: Excel の使用法と Excel VBA を用いたプログラミング入門

ループ コンピュータプログラムは、書かれた命令を

一行ずつこなしていく。 しかし短い操作であれば手作業でもできる。 同じ作業を繰り返し(しかも正確に)行って

くれるのがコンピュータの得意技。 それをさせるのがループです。

→これがコンピュータプログラムのキモなのでよく習得してください。どういう順番で命令が実行されるか、よく考えながらプログラムを書いてください。

44

Page 45: Excel の使用法と Excel VBA を用いたプログラミング入門

45

For 文(ループ)( 1) N=0

For I = 1 To 10 N=N+INext IMsgBox Nこの例では Iを 1から 10まで 1ずつ増やしながら「 N=N+I 」を何度も実行する。つまり 1から 10までの和を計算。結果を表示する。

全体のプログラムの構造が分かりやすいように、ループの中はタブ一個分、字下げをするとよい。VBA エディターでは複数の行を選択し、タブキーを押すとまとめて字下げされる。逆に字上げするときはシフト - タブ。

N=0For I = 1 To 10 Step 2 N=N+INext IStep が指定されている場合、指定した数ずつ Iを増やしていく。つまり、この例では I=1, I=3, I=5, I=7, I=9 の順に実行される。

Page 46: Excel の使用法と Excel VBA を用いたプログラミング入門

46

For 文(ループ)( 2) 二重ループ

N=0For Row = 1 To 100 For Column = 1 To 10 N=N+1 Next ColumnNext Row

For 文を二重にする使い方もよく行われる。この例ではRow を 1から 100 まで順に増やすが、それぞれの Rowについて、 Column を 1から 10 まで順に増やしながら実行する。つまり N=N+1 は合計 1000 回実行される

必ず For 文と Next 文の対応がついていることが必要である。 For Row...Next Row の中に For Column...Next Column がはいっていることに注意。

Page 47: Excel の使用法と Excel VBA を用いたプログラミング入門

47

マクロの実行とデバッグ (3) VBA エディタ画面で「デバッグ」/「ステップイン」( Fn-F8 )とやると、

一行ずつ実行されるので、実行順の確認ができる。 「デバッグ」/「カーソル行の前まで実行」 (Command-Fn-F8) ではカーソル位置の前まで実行される。

途中、一時停止の状態での各変数の値が知りたいときは、「表示」/「イミディエイトウィンドウ」でイミディエイトウィンドウを開く。ここに、「 ?A 」などという形で知りたい変数を書いてリターンを押すと、そのときの変数の値が表示される。ちなみに、このウィンドウにはどんな命令でも入力できる。その命令が直ちに実行される。

予めプログラムの中に「 Debug.Print A, B 」などと書いておけば、その命令が実行されるとイミディエイトウィンドウに変数の値が書かれる。

ウォッチウィンドウを使ってもよい。「表示」 /「ウォッチウィンドウ」でウィンドウを開く。ウォッチウィンドウ上で右クリックして「ウォッチ式の追加」で A などと書いておくと、実行中の A の値が逐次表示される。

ブレークポイントを設定してから実行すると、ブレークポイントで止まるので、そのときの変数等の状態を調べることができる。コード画面の左側の枠をクリックするとその行にブレークポイントが設定される。

Page 48: Excel の使用法と Excel VBA を用いたプログラミング入門

48

マクロの実行とデバッグ (4)

プログラム実行時にエラーが起こったとき表示されるウィンドウで「デバッグ」を選ぶと VBA画面が開く(選択される)。黄色い矢印のところで問題が生じている。

イミディエイトウィンドウまたはウォッチウィンドウを使って変数の値を確認する。

■を選ぶとデバッグモードが終了する。これを忘れると次が実行できない。

Page 49: Excel の使用法と Excel VBA を用いたプログラミング入門

49

If 文 (1) If I = 0 Then J = 1Iが 0のときのみ Jを 1にする。

If I = 0 Then J = 1End IfIが 0のときのみ Jを 1にする。

If I = 0 Then J=1Else J=2End IfIが 0のときには Jを 1に、それ以外のときは Jを 2にする。

Page 50: Excel の使用法と Excel VBA を用いたプログラミング入門

50

If 文 (2) If I = 0 Then

J=1ElseIf I=1 then J=2Else J=3End IfIが 0のときには Jを 1に、そうでなく Iが 1のときには Jを 2に、それ以外のときは Jを 3にする。

☆☆ 最初の表記(一行で書いてしまう形式)以外のIF 文ではすべて End If を忘れないように。☆☆

Page 51: Excel の使用法と Excel VBA を用いたプログラミング入門

51

条件式

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 かどうか」など

Page 52: Excel の使用法と Excel VBA を用いたプログラミング入門

52

Do ループ

Do While <条件式><命令群>Loop条件式が満たされる間、ループを繰り返す。

Do<命令群>Loop While <条件式>条件式が満たされる間、ループを繰り返す。

その他の制御文について、詳しくは、 Visual Basic ヘルプの目次から「 Visual Basic 言語のヘルプ」の「ステートメント」の項参照。

Page 53: Excel の使用法と Excel VBA を用いたプログラミング入門

53

ループからの離脱とジャンプ 以下は、途中でループを抜けたくなった場合

に使う。 Exit Do Exit For

プロシジャー(マクロ)を終了させるときは、 Exit Sub

単にプログラム上の別の場所にジャンプしたいときは GoTo Label1飛び先は Label1:  とする ( コロンがポイント )「 Label1 」の部分はどのような名前でもよい。

Page 54: Excel の使用法と Excel VBA を用いたプログラミング入門

MsgBox

メッセージを出力する関数。 実はユーザーの応答 (OK をクリックしたこ

となど ) が関数の値として返される。 MsgBox(“Hello!” ) これをコードに書き込んで実行してみる。

応答を受け取る書き方MsgBox(“Is this OK?”, vbOKCancel )OK が押されたら vbOK(=1), キャンセルが押されたら vbCancel(=2) という値を返す。

54

Page 55: Excel の使用法と Excel VBA を用いたプログラミング入門

55

コメント行などの書き方 コメント行は’で始める。コメント行はエディ

ターが自動的に緑にする。行の途中から’で始まるコメントを書くことも可。

1行に書ききれないとき、長くなって見にくいとき、最後に _ (下線)をつけると、その行は次の行に続くという意味になる。

:(コロン)で複数の短い行をつないで1行に書くこともできる。

1行入力が終ったときに文法的な明らかな誤りがあると怒られるので修正する(書きかけの場合などは無視する)。

Page 56: Excel の使用法と Excel VBA を用いたプログラミング入門

56

ヘルプの使い方

VBA エディタで、「 Help 」 / 「 Micorosft Visual Basic for Applications ヘルプ」または「 MSDN ホームぺージ」から検索。後者ではVisual Basic に関するヘルプのみ選んで閲覧して下さい。

Page 57: Excel の使用法と Excel VBA を用いたプログラミング入門

57

VBA ヘルプ

Page 58: Excel の使用法と Excel VBA を用いたプログラミング入門

58

正規化

Page 59: Excel の使用法と Excel VBA を用いたプログラミング入門

59

cell_cycle_microarray6.xls(名前順の 10遺伝子のパターン比

較)

0

0.5

1

1.5

2

2.5

3

0 20 40 60 80 100 120 140 160

YPL256C/ CLN2YPL257W/YPL258C/YPL259C/ APM1YPL260W/YPL261C/YPL262W/ FUM1YPL263C/YPL264C/YPL265W/ DIP5

Page 60: Excel の使用法と Excel VBA を用いたプログラミング入門

60

ユークリッド距離

この距離を二乗して足したもの(の平方根)がユークリッド距離↓パターンが近いほど小さくなる。

Page 61: Excel の使用法と Excel VBA を用いたプログラミング入門

61

マクロの自動記録 VBA の非常に優れた機能。 手入力で行った作業を自動的にマクロのコードに変換して

くれる。 Excel画面から、「開発」 / 「マクロの記録」または「表示」 /

「マクロ」 /「マクロの記録」 現れるウィンドウで、作成されるマクロの名前を確認、マクロの保存先が「作業中のブック」となっていることを確認して OK.

記録したい作業を間違えないように行う。 終了したら「開発」 / 「記録終了」または「表示」 /「マクロ」 /

「記録終了」をクリックして完了。 VBA エディター画面で、作成されたマクロを確認。新しい Module

が作られているかもしれないので注意。 しかし、必ずこのマクロが正しく動くわけではない。試し

に、作成されたマクロをすぐに実行してみるとよい。 あとは書かれたコードの意味を推定しつつ、必要に応じて

書換えていく。

Page 62: Excel の使用法と Excel VBA を用いたプログラミング入門

62

オブジェクト、プロパティ、メソッド

例えば「特定のセル( Range("A1") )」というオブジェクトについて、それが持ついろいろな属性をプロパティという。例えば .Value 、 .Hight などはすべてプロパティ。

そのオブジェクトに対するいろいろな操作をメソッドという。例えば Range("A1").Clear はセルの値を削除するというメソッドである。

WorkSheets("data").Range("A1") は、 WorkSheets ("data")オブジェクトの持つひとつのプロパティである。つまり、何かのオブジェクトのプロパティーがそれ自身オブジェクトであることも多い。

従って、何々の何々の、、、と多段階に続く。例えばWorkSheet("data").Range("A1").Font.Size などとなる。

Page 63: Excel の使用法と Excel VBA を用いたプログラミング入門

63

オブジェクト、プロパティ、メソッド

オブジェクトには種類がある。例えば Cells(1,2) もRange(A1:C2) も Rangeオブジェクトという種類のオブジェクトである。

オブジェクト間の関係を知るためには、ヘルプの質問のボックスに知りたい語を入れてみるとよい。オブジェクトの説明が表示されると階層関係の図が出てくる。

同じ名前のプロパティでも対象により違う意味になる。例えば Font プロパティはワークシートのセルのフォントでもありうるし、グラフのタイトルのフォントでもありうる。 Xxx.Font の Xxx 部分(対象)を特定することが大事。

Page 64: Excel の使用法と Excel VBA を用いたプログラミング入門

64

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 の効力が及ぶ。

Page 65: Excel の使用法と Excel VBA を用いたプログラミング入門

ユーザーインターフェース

65

Page 66: Excel の使用法と Excel VBA を用いたプログラミング入門

66

コントロール

ユーザーインターフェースのためのボタン。

コマンドボタン:押すと設定されたマクロが実行される。テキストボックス:テキストや数値を入力する。チェックボタン:チェックをつけるかはずすかできる。リストボックス:一連のリストから選ばせる。ラベル:字を書くだけ。

Page 67: Excel の使用法と Excel VBA を用いたプログラミング入門

67

ユーザーフォーム

コントロールを配置するための画面。この上に各種入力ボタンや入力欄(コントロール)を配置し、マクロの実行によってユーザーフォームを表示する。

ユーザーフォームが表示された状態で、コントロールに入力を行うことができる。

Page 68: Excel の使用法と Excel VBA を用いたプログラミング入門

68

ユーザーフォームの作成とコントロールの配置 (1)

VBA エディタ画面から「挿入」/「ユーザーフォーム」でユーザーフォームが作成され、表示される。同時にプロジェクトウィンドウでもユーザーフォームが追加されていることを確認。

ツールボックスも表示されているはず。表示されていなければ「表示」/「ツールボックス」。

ツールボックスで配置したいコントロールをクリックし、ユーザーフォーム上をドラッグすると、その大きさにコントロールが配置される。

ツールボックスでは「 A 」がラベル、「 ab| 」がテキストボックス、□がコマンドボタンである。

Page 69: Excel の使用法と Excel VBA を用いたプログラミング入門

69

ユーザーフォームの作成とコントロールの配置 (2)

コントロール(コマンドボタン等)の表示文字は、選択した状態で再度字をゆっくりクリックすると文字入力モードになり変更できる。「スタート」「開始」「閉じる」などと変更しておこう。

配置したコントロールを選択すると、プロパティウィンドウ(表示されていなかったら「表示」/「プロパティウィンドウ」)にその名前(オブジェクト名)等が表示されるので、細かく設定することができる。名前はマクロプログラムから参照する時に使うので、このウィンドウで確認しておく。

例えば、テキストボックスは TextBox1 などという名前になっているはず。プロパティウィンドウでコントロールの名前を変更することもできる。例えばTextBoxReferenceGene などに変更可。

Page 70: Excel の使用法と Excel VBA を用いたプログラミング入門

70

ユーザーフォームのコードの作成

コマンドボタンをダブルクリックすると、コードウィンドウが開く。Private Sub CommandButton1_Click()などとなっているであろう。ここにこのボタンを押したときに実行するコマンド群を記載する。

例えば、ユーザーは TextBox1 に数字を入力し、その後に CommandButton1 「スタート」をクリックするとする。Sub CommandButton1_Click() の中で TextBox1 に入力された値を参照したければ、InNumber = TextBox1.Value(あるいは TextBox1.Text )などとして参照できる。

コードウィンドウを表示させるには「表示」 /「コード」

Page 71: Excel の使用法と Excel VBA を用いたプログラミング入門

71

ユーザーフォームの終了

実行時にユーザーフォームを終了させるためには、 2つの方法がある。

1)ユーザーフォームの左上の ×をクリック。 2)ユーザーフォームにコマンドボタンを配置し(例えば「終了」ボタン)、これをクリックしたときに実行されるコードに例えばSub Macro2()UserForm1.HideUnload UserForm1End Subと記載する。

Page 72: Excel の使用法と Excel VBA を用いたプログラミング入門

72

ユーザーフォームの表示

ではユーザーフォームを表示させるにはどうするか。これは少し面倒くさい。

まず標準モジュールの中のマクロを起動する。つまり、普通の Macro1() などである。このコードの中に以下のように記述する。Sub Macro1()Load UserForm1UserForm1.ShowEnd Sub

このマクロを実行すると、ユーザーフォームが開いて入力ができる。ユーザーフォームの上のコマンドボタンをクリックすれば、 CommandButton_Click のコードが実行されることになる。

Page 73: Excel の使用法と Excel VBA を用いたプログラミング入門

73

ワークシート上へのコントロールの配置

Excel からマクロをボタン 1つで起動できるようにしよう。

Excel画面のワークシートが表示されている状態で、「開発」 / 「挿入」でフォームコントロールの中から□(ボタン)を選び、シート上の置きたい場所でドラッグ。

「マクロの登録」ウィンドウが出るので、「マクロの保存先」が「作業中のブック」となっていることを確認して、実行させたいマクロをクリック、 OK 。

ボタンの表示を変えたければ、選択して再度ゆっくり文字をクリックすると、文字変更モードになり変更できる。

以降、このボタンをクリックするとボタンに登録したマクロが走る。

Page 74: Excel の使用法と Excel VBA を用いたプログラミング入門

その他の機能

74

Page 75: Excel の使用法と Excel VBA を用いたプログラミング入門

75

エラー処理

エラーが生じた場合、通常はエラーメッセージが表示され、プログラムが停止してデバッグ画面となる。

エラーが生じたときの処理をプログラム内で制御したい場合は、On Error GoTo Label1:を実行する( Label1 はどんな名前でもよい)。この命令を実行以降は、どんなタイプのエラーであっても、エラーが生じると Label1 にジャンプする。

エラー処理の指定を解除したいときはOn Error GoTo 0を実行する。つまり、最初の命令からこの命令までの間でエラーが起こった場合のみ、 Label1以降のプログラムが実行される。

Page 76: Excel の使用法と Excel VBA を用いたプログラミング入門

図の描画 (1) 図形描画ツールバー(「表示」 /「ツールバー」で表示)

を使って図形をシート上の並べながら「マクロの自動記録」をすると以下のようになる。ActiveSheet.Shapes.AddShape(msoShapeRectangle, Left, Top, Width, Height).SelectSelection.ShapeRange.Fill.ForeColor.RGB = RGB(255, 0, 0) Selection.ShapeRange.Fill.SolidSelection.ShapeRange.Fill.Visible=msoTrueLeft, Top

Width

Height

左上隅から数える

Page 77: Excel の使用法と Excel VBA を用いたプログラミング入門

図の描画 (2) 以下のように書くこともできる。

With Worksheets(“sheet1”).Shapes.AddShape( msoShapeRectangle, Left, Top, Width, Height)

.Fill.ForeColor.RGB = RGB(255, 0, 0)

.Fill.Solid

.Fill.Visible=msoTrueEnd With

AddShape は図形(オートシェイプ)をシートに追加するとともに、その図形をオブジェクトとして返す。したがって、 With 文では新たに追加した図形を対象として、その各種プロパティを設定する形になる。

Page 78: Excel の使用法と Excel VBA を用いたプログラミング入門

図の描画 (3)

Page 79: Excel の使用法と Excel VBA を用いたプログラミング入門

図の描画 (4)

Page 80: Excel の使用法と Excel VBA を用いたプログラミング入門

図の描画 (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

Page 81: Excel の使用法と Excel VBA を用いたプログラミング入門

図の描画 (6)

Page 82: Excel の使用法と Excel VBA を用いたプログラミング入門

82

改行コード

別の OS で作られたファイルを読む場合、ファイルを開くソフトにより正しく解釈してくれる場合もあるが、そうでないと改行と認識されず無視されたり変な記号がはいり、次の行と続いてしまう。

改行コードは半角文字の一種であり、例えば Macintosh の場合 16進数表示で 0D 、 10進数で 13 である。 CR( キャリッジリターン ) とも表示する (LF はラインフィード ) 。このような特殊文字を VB で表現する場合には Chr 関数を使う。あるいは規定定数 vbCr などが用意されている。

CRLF は 2文字相当なので注意。

機種 改行コード

Mac(OS9 まで ) CR (0D=13)

Windows CRLF (0D0A=13, 10)

Unix, Linux, Mac OSX

LF (0A = 10)

コード Chr 関数 VB 定数Tab Chr(9) vbTabLF Chr(10) vbLfCR Chr(13) vbCrCRLF Chr(13)&Chr(10) vbCrLf使用中の機種の改行コード vbNewLin

e

Page 83: Excel の使用法と Excel VBA を用いたプログラミング入門

83

ファイル入出力 (1) Open "< ファイルの (場所と ) 名前 >" For Input as

#1Do While Not EOF(1) (ファイルの最後かどうか) Line Input #1, A (1行を A に読み込む)  ~LoopClose #1

Open "< ファイルの (場所と ) 名前 >" For Output as #2~Print #2, <書きだす内容>~Close #2

#1 、 #2 は入出力の ID 。好きな番号にしてよい。

Page 84: Excel の使用法と Excel VBA を用いたプログラミング入門

84

ファイル入出力 (2) ファイル入出力の際、ファイルの場所は以下のようにフ

ルパスで書く。“ C:\Documents and Settings\Iino\My Documents\新基盤生命学特別演習1 \2010 演習 \blast.txt”

しかし、いつもこのように書くのは面倒なので、デフォルトのフォルダを決める。Excel の通常画面から「ツール」 /「オプション」で開くウィンドウの「全般」タブを選び、「カレントフォルダ名」に、ファイルを置くフォルダ名をフルパスで書く。上の例では C:\Documents and Settings\Iino\My Documents\新基盤生命学特別演習1 \2010 演習と書く。

「カレントフォルダ名」を空欄にしておくと、実行するExcel ファイルと同じフォルダがカレントフォルダとなるので便利。

Page 85: Excel の使用法と Excel VBA を用いたプログラミング入門

85

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)がわかる。

Page 86: Excel の使用法と Excel VBA を用いたプログラミング入門

VBA のインストール

86

Page 87: Excel の使用法と Excel VBA を用いたプログラミング入門

87

VBA のインストール (1)

インストールされているかどうかの確認 1) Excel を立ち上げる。 2)コマンドバーの「開発」で「 Visual

Basic 」が表示されれば VBA はインストールされている。

3)さらに、「開発」/「 Visual Basic 」を選択し Visual Basic Editor を起動する。

4)コマンドバーの「ヘルプ」から「 Microsoft Visual Basic ヘルプ」が表示されればヘルプもインストールされているので問題ない。

Page 88: Excel の使用法と Excel VBA を用いたプログラミング入門

88

VBA のインストール (2) インストール

方法1) Visual Basic Editor や Microsoft Visual Basicヘルプが表示されない場合はたぶん「ディスクからインストール」のような表示がされているので、これに従う。

方法2) Windows では、コントロールパネルから「プログラムと機能」を選び、プログラム一覧から Excel なり Office を選んで「変更」、「機能の追加、削除」で必要なコンポーネントを選び、インストールディスクを挿入して「ディスクからインストール」。

方法3)( Mac の場合。しかし Win もおそらく同様。)インストーラディスクを CD ドライブに入れて起動→インストーラプログラムを起動→ Office ツールの中の Visual Basic for Applications をインストールして完了。

Page 89: Excel の使用法と Excel VBA を用いたプログラミング入門

89

ヒートマップ

RedGreenBlue

00

255

0255255

02550

2552550

25500