VBA記事2 初期設定とFor~
さぁ!実際に手を動かして学習を始めよう!(初期設定とコード:For~Next)
さっそくですが、まずは変数・繰り返し処理のコードを書いてみましょう。
本書を順番通り学習していけばVBAの基礎が身につくようになっています。現時点では何が何だかわからないかもしれませんが、説明を読んで、実際に打ち込んで動かしてみると理解できていきます。
まずは下記をExcelのファイルに手打ちで記入してください。
完成図は下記のようになります。
まずは見慣れたExcelの画面でAltキー と F11キーを同時に押してみてください。
すると、下記のような画面が現れます。(このウィンドウをVBEといいます)
左にVBAProject(Book1)とありますが、このBook1はこのExcelのファイル名になります。
そして、sheet1、2、3、ThinWorkBookという表記もありますが、このどれかをダブルクリックすることで下記のような画面になります。
この白いウィンドウ内に実際にVBAでプログラムを記述していきます。
またsheet1をダブルクリックしたならsheet1とこのウィンドウが連動しています。
なので、せっかくプログラムを書いて保存しても、sheet1を消すと、書いたプログラムも消えてしまいますので、基本的にはThisWorkbookかモジュールのウィンドウ内に書くことをお勧めします。
Sheet1で開いたウィンドウはいったん消して、モジュールを作成してそれをダブルクリックしてウィンドウを出してみてください。
モジュールは該当するExcelファイルの上で右クリックを押して「挿入」→標準モジュールで挿入できます。
次に設定で「ツール」のオプションと選択し、変数の宣言を強制するに✓マークを入れます。
これをすることで、宣伝されてない変数があった場合にエラーになるようになります。
今は何を言っているかわからなくても大丈夫ですので、先に進みましょう。
次に「表示」の項目からイミディエイトウィンドウをONにして画面下に白いイミディエイトが出るようにします。
これをすることで、Debug.Print【変数】と打ち込むことで、その【変数】の内容をイミディエイトに表示させることが可能になります。
【変数】は詳しくは後述します。
さて、これで下準備は整ったので、実際にコードを打ち込んだ後、動かしてみて、その後、解説をしていきます。
コードは下記になります。
Sub sample1()
Dim i as Variant
For i = 2 to 7 step 1
Cells(i,”D”) = cells(i,“C”)*cells(i,”B”)
Debug.Print “i” ; i
Next i
End sub
もしくは
Sub sample1()
Dim i as Long
For i = 2 to 7
Cells(i,4) = cells(i,3)*cells(i,2)
Next
End sub
前述のコードが丁寧なコード例。(初心者にもわかりやすいもの)
後述のものが略したコード例ですが、全く同じ動きをします。
このコードを書いて、下記の画面にてAltとF8を同時に押すと、「マクロ」と書かれたウィンドが出てきます。
この中で、実行したいプログラムを選び、実行をしてみましょう。今回はsample1を実行します。
掛け算の結果が現れたなら成功ですが、エラーやデバッグのメッセージが出た場合は、誤字脱字がある可能性があります。
1文字でも違うと狙ったのとは違う動きをしたり、エラーが出て処理がされないので、気を付けて打ち込んでください。
はじめは私も誤字脱字だらけでしたが、今では誤字脱字も少なくなり、エラーが出てもすぐにどこがおかしいのか気づけるようになりました。
コードのコピペよりも実際に何度も手で打ち込んだ方が、スキルは上達します。
また、エラーの際は、下の図のように、エラー部位が青くなることが多いです(稀にエラーと関係ないところが青くなる)
図の場合だとcellsとするべきところがcellになっているためエラーが起こっています。
また、コードは半角、小文字で書いてください。変数のみ例外として大文字を使用してもいいですが、小文字で書いてEnterキーで次の行へ行くと、文、および単語の頭文字が勝手に大文字に変換されると思いますが、そうなると、基本的には誤字脱字なくかけていることが多いです。
では順を追ってコードの解説していきましょう。
冒頭のSubはマクロでいう拡張子みたいなものです。
拡張子とはファイルの語尾についてる○○.txtや○○.xlsm ○○.doxc などを見たことがあると思います。
Sub以外にもFunction Private Subなどがありますが、基本的にはSubを使います。
このSubがないとマクロは動きません。
Subの下の行からEnd subの中身までがプログラミングコードです。
Subの横のsample1()はマクロの名前になります。
()も必須で、上級者になれば()の中に文字を書き込むこともありますが、初心者は無視してOKです。
Sanple1()をサンプル1()のように日本語にすることもできます。
ただし数字から始まる名前は設定できなかったり、使えない文字もあります。
Dim は「変数を宣言しています」
簡単に言うとDim の後の文字(今回だとi)を使えるようにします。
Variantは万能型で宣言した変数(今回だとi)を使える型になります。
上級者や複雑なプログラム、小数点を表示するにはVariantの代わりにLongやSingle,String,Booleanなど沢山の型を使う必要がありますが、初心者は取り合えずVariantでOKです。
Variant以外で綺麗にバグが少なくなるようなコード、読みやすいコードを書きたいならこの場合Longを使用しますが慣れていない初心者の場合はvariantの方がバグが発生しにくいケースも多いです。変数の型が気になる方はご自身で調べてみてください。慣れれば簡単に理解できますが一応記載しておきます。
書き方は基本的にはDim ○○ As 型 となります。
型名 |
型指定文字 |
格納できるデータ |
ブール型 |
Boolean |
TrueまたはFalse |
バイト型 |
Byte |
0~255までの整数 |
整数型 |
Integer |
-32,768~32,767の整数 |
長整数型 |
Long |
-2,147,483,648~2,147,483,647の整数 |
通貨型 |
Currency |
-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807の固定小数点数 |
単精度浮動小数点数型 |
Single |
負の値:約-3.4×10(38乗)~-1.4×10(-45乗)正の値:約1.4×10(-45乗)~1.8×10(38乗) |
倍精度浮動小数点数型 |
Double |
負の値:約-1.8×10(308乗)~-4.0×10(-324乗)正の値:約4.9×10(-324乗)~1.8×10(308乗) |
日付型 |
Date |
日付:西暦100年1月1日~西暦9999年12月31日時刻:0:00:00 ~ 23:59:59 |
文字列型 |
String |
任意の長さの文字列 |
オブジェクト型 |
Object |
オブジェクト |
バリアント型 |
Variant |
すべてのデータ |
昔の古いPCではしっかりした型を宣言するのが重要でした。PCのスペックが低いため、自動調整してくれるVariantを使うと重くなったのですが、今現在のPC環境だとPCが遅くなることは無いため初心者はVariantで大丈夫です。
TVゲームの任天堂のファミコン(古いコンピューター)はByteを使用していたためRPGなどを含めたゲームの数値の上限が255だったのは有名な話です。
For i = 2 to 7 step 1
はiに2.3.4.5.6.7
の数字を入れていくという意味になります。
なので、次の行の
Cells(i,4) = Cells(I,2)*Cells(i,3)には
1ループ目にはCells(2,4) = Cells(2,2)*Cells(2,3)には
2ループ目にはCells(3,4) = Cells(3,2)*Cells(3,3)には
3ループ目にはCells(4,4) = Cells(4,2)*Cells(4,3)には
となり、これがCells(7,4) = Cells(7,2)*Cells(7,3)になるまで(iに7が入るまで)繰り返されます。
ちなみにcells(i,4)というのはcells(i,”D”)と同じです。カッコ内の左、この場合iが縦列の方向(Row)であり、右側の4またはDが横列(column)です。
ただ、複雑な処理をするためにはcells内のカッコは両方数字で処理できるようになると出来ることが広がります。
なので、アルファベット表記でなく、数字での処理に慣れるようにしてください。
どうしても慣れないうちや不便に感じるときはセル表記を「R1C1」表記に変えてみてください。そうすれば横列の表記がアルファベットでなく、数字になりますのでマクロなどで処理がしやすくなると思います。
「R1C1」については「ファイル」→「オプション」→「数式」→「R1C1参照形式を使用する」にチェックを入れてください。
図のようにABC列が数字になっています。
Next i の行までくるとiにstep1の数だけ加えられて ループ処理をします。
このあたりは文章で理解するよりも見て理解するのが早いので、マクロがリアルタイムで動いていくのを1コマずつ見ていきましょう。
それには下準備としてExcelのファイルとマクロのコード書く画面を下記のように配置します。(Windowsボタンと→の横を押すと簡単に配置できます)
そして、AltとF8を同時押しして「ステップイン」を選択します。
画像で2パターン紹介していますが、使いやすい方でOKです。
ステップインを止めるときは停止の■ボタンを押してください。
そしてステップインするとマクロのコードが黄色くなっていますが、これが今ここの処理をしているという意味です。(黄色い矢印をドラッグ&ドロップして、狙った個所の処理からを見ることも出来ます)
F8を押すごとに下の行へと進んでいきます。
その際、Excelのファイルの変化とイミディエイトウィンドウを注意深く観察してください。
注意深く考えながら観察すると、私が文章で書いた内容が、確実に理解できると思います。
もしくは、画面の変数iのところにマウスのカーソルを合わせると、iに代入されている数字を見ることが出来ます
そして、マクロのファイルを保存するときは拡張子を必ず.xlsmにしてください。
普通の拡張子のファイルにはマクロのコードが記録されないからです。
そしてマクロが記録されているExcelのファイルを開くときは開くたびに必ず、マクロを有効にする選択をしてください。
よく、メールに添付されているExcelファイルを開くと危ないと言いますが、中にはファイルを開くと同時にマクロのスイッチもONになり、データを抜き取ったり、削除したりするマクロもあるのが理由となっています。
Excelのバージョンによって多少表現が違いますが、マクロを扱う・編集する際は必ず、コンテンツなりを有効にしてください。
また、このレベルのコードは答えを見なくても書けるように反復して書いてください。
何度も繰り返して書けば、誰でも必ず覚えることが出来ます。
そして、ただ書くだけでなく、そのコード(文章)の意味は何を意味するのかを時には手を止めてじっくり考えて自分でコードの数字などを改変して思った通りの処理になりかを試してみてください。
そして、今この文章が読めているということは日本語を読めているということですが、VBAも読み書きを繰り返すことで最初は意味不明だったものが読めるようになり、そして書けるようになります。
日本語でも難解な意味の言葉でも調べれば意味を覚えるのと一緒で、少しずつですが、語彙量を増やしていけば、書けるようになります。
忙しい人は1日1レッスンづつ進んでいき、翌日に前日の復讐をするなどをすれば記憶が定着しやすいと思います。
コメント
コメントを投稿