Excel VBA/マクロ で設計シートを自作するにあたって,知っておいてほしいことを説明する
プログラムを自作するメリット
プログラムを自作するメリットは,ずばり「楽だから」.これに尽きる
もともとうちのチームはXFLR5とエクセルシートを使って設計していた.XFLR5で空力計算を行い,エクセルシートで翼平面形の入力やたわみ,ねじれの計算を行っていた.
設計のプロセスとしては次のようになる
- エクセルシートで翼平面形を決定
- それをXFLR5に入力してCLやCmを計算する
- 計算結果をXFLR5から出力してエクセルシートに貼り付け
- エクセルシート上でたわみやねじれを計算
- それをもとに翼の平面形を変更
- 1~5を満足するまでn回繰り返す
1回翼の計算をするだけで,2回もXFLR5とエクセルシートの間でデータの出入力がある.しかもこれを主翼,水平尾翼,垂直尾翼で行わなければならない
それが終われば今度は主翼,水平尾翼,垂直尾翼を組み合わせた3次元解析を行う.気が遠くなるような面倒な作業だ
これのプロセスを,1つのソフトの中で行えば,少なくとも2n回のデータの出入力の手間を省ける.無駄な時間が節約できれば,その時間を他のことに費やせる
じゃあ,実際のどの言語で設計プログラムを書こうかと考えた時に白羽の矢が立ったのがExcel VBAである
Excel VBA とは
Wikipediaには次のように書いてある
Visual Basic for Applications(ビジュアルベーシック・フォー・アプリケーションズ、VBA)は、主にマイクロソフト製のMicrosoft Officeシリーズに搭載されているプログラミング言語である。
VBAを使用することで、Excel、Access、Word、Outlook、PowerPointなど、Officeのアプリケーション・ソフトウェアの機能をカスタマイズしたり、拡張したりすることができる。
フリー百科事典『ウィキペディア(Wikipedia)』 より一部抜粋
つまり,Excel VBAを使えば,ただのエクセルシートの機能を拡張して,ゴリゴリの設計ソフトに変身させることができるのである.
ちなみに「マクロ」と呼ばれることもある
Excel VBA のメリット
数ある言語の中でExcel VBAを使うのは,次のようなメリットがあるからである
- 引継ぎがしやすい
- グラフなどの表示が簡単
一つずつ解説していく
引継ぎがしやすい
またしてもWikipediaから引用すると
Microsoft OfficeシリーズにはVBAのソースコード作成・編集ソフトウェアおよびプログラム実行環境が最初から付属しているため、使用を始めるにあたり、Office以外の特別なソフトウェアの用意やセッティングを必要としない。文献やネット情報も多く、最低限の学習で誰でも手軽にプログラミングが始められる。また、プログラムの実行が容易なことも特徴である。
手軽に利用できる一方で、汎用プログラミング言語に共通の機能は一通り備えており、高度な機能まで修得しようとすると相応の学習が必要である。
出典: フリー百科事典『ウィキペディア(Wikipedia)』 より一部抜粋
すなわち,Excel VBAは,むちゃくちゃ初心者に優しいプログラミング言語なのである
例えば,Pythonで素晴らしい設計プログラムを書きあげたとしよう.それで自分の代の設計は十分完成させられる
しかし,新しく入った新入生にとってはどうだろうか.パソコンに強く,自分でPythonを勉強できるスペックを持っていればいい
では,大学に入って初めて自分のパソコンを買って,講義で初めてプログラミングを始めるような子だったら?
「まず,こんぱいら?をいんすとーる?して,環境設定からぱすを通して,,,は?えでぃたーってのもいるのか?」
この瞬間,苦労して作り上げた設計プログラムは”何年か前の先輩が作った,中身のよくわからない設計プログラム”に成り下がる
せっかく頑張って作ったのに,そんなのは嫌だ
Excelだと,すくなくとも理系大学生のパソコンの中にはインストールされているし,使い方もある程度は分かっているはずだ
最低限のプログラミングの勉強さえこなせればコードの読み書きができるようになる
高すぎる壁ははなから超える気にならない
最初のハードルをいかに下げられるかが重要だと思った
Excel VBAについて書かれたサイトは星の数ほどあるので好きなサイトを選べばいいと思うが,自分がExcel VBAの勉強に使ったサイトを紹介しておく
グラフなどの表示が簡単
エクセルでのグラフの表示は簡単だ
講義の課題でも,「計算結果をエクセルでグラフにして提出せよ」とあるくらいだ
しかし,ほかの言語ではそうはいかない
グラフ一つ書くにしろ,設計の勉強とは全く関係ないプログラムの勉強が必要になる
それが面倒くさかった(笑)
マクロを使うときの注意点
エクセルでの作業に慣れていても,マクロだとちょっと注意しなければいけないことがあるので紹介しておく
- 拡張子が.xlsm
- マクロで行った操作は,戻るボタンで戻せない
- マクロで参照しているセルの位置を動かすとマクロが正常に動作しなくなる
自分でマクロをいじらないにしても,これからマクロが入ったエクセルファイルを使うことはあるかもしれないので,一つずつ解説していく
拡張子が.xlsm
普通のエクセルファイルの拡張子は.xlsxだが,マクロを含んだエクセルファイルの拡張子は.xlsmになる
保存するときは,「ファイルの種類」の中から「Excelマクロ有効ブック(*.xlsm)」を選ぼう
マクロで行った操作は,戻るボタンで戻せない
これがなかなか厄介で,ついうっかりマクロを実行してしまうと大変なことになる
自分が作った設計シートでは,すべてのマクロのプログラムの先頭に,シートの上書き保存をするコードを入れておいた
こうしておけばマクロによって設計シートが取り返しのつかないくらいぐちゃぐちゃになってしまっても,保存せずにエクセルを閉じて,再度開けばマクロを実行する直前の状態に戻れる
自己防衛 戻るなんかあてにしちゃだめ
ちなみにシートを上書き保存するコードはこれ
'まず上書き保存
ActiveWorkbook.Save
マクロで参照しているセルの位置を動かすとマクロが正常に動作しなくなる
こいつもかなり厄介
ひとまずExcel VBAがどのようにシート上のセルを参照しているか見てみよう
例えば,シートのA1のセルの値を読み込むコードは次のようになる
n = Range("A1") 'A1のセルの値をnに格納
見ての通り,いついかなるときも"A1"のセルを参照するようになっている
このとき,いつものように”A1”のセルをドラッグして別のセルに移動させても,コードは変わらず”A1”を参照し続ける
マクロの数が増えてくると,どのマクロでどのセルを参照したかがわからなくなってしまい,不用意にセルの配置を変えられなくなる
なので,自分が作った設計シートでは,読み込みで参照したセルの色を青色に,書き出しで参照したセルを黄色にした
それでもマクロが増えてくると,セルの配置を変えたときに書き直さなければいけないマクロの数が多すぎて非常にめんどくさくなり,抜け漏れも出てくる
後々コードを書き換えたりしなくていいよう,マクロを組む前にあらかじめセルの配置は考えておかなければいけない
マクロを高速化する
Excel VBAのデメリットとして,計算速度が遅いことがあげられる
どのくらい遅いかというと,fortranで0.15秒で終わる計算が,Excel VBAで4.4秒かかったりする
ここでは,ただでさえ遅いマクロをちょっとでも早くするためのコツを紹介する
- シートへの書き出しを最小限にする
- 画面更新を非表示にする
マクロの高速化についてはいま見つけたこの記事に詳しく書いてあった
ただ,この記事はマクロをある程度書けるようになった人じゃないと理解できないと思うので,大事なことだけ以下で説明する
シートへの書き出しを最小限にする
エクセルマクロで一番処理に時間がかかるのは,計算の結果をシートに貼り付けるときなので,エクセルシートに計算結果を貼り付ける回数は必要最小限にするべきである
間違っても
- 計算の途中結果をシートに貼り付けて,シートで値を計算,その値をを再び読み込みして計算を再開する
- 1000個の値を1個ずつ1000回にわけてシートに貼り付ける
というコードは書いてはいけない
計算結果をシートに貼り付けるのはグラフにするためであって,途中の計算はすべてコードの中で完結させたほうがいいし,1000個の値は配列にぶち込んで1回で一気にシートに貼り付けたほうがいい
詳しく知りたい人は次のサイトを参考にしてほしい
>>値貼り付けは遅い
画面更新を非表示にする
マクロを実行してもらうとわかるが,マクロを実行している途中でも,マクロの通りにエクセルシートの値が変わったり,シートが切り替わったりする
それはそれで自動化されている感があって楽しいのだが,計算速度は遅くなる
計算速度を早くするためには画面更新を非表示にすればよく,プログラムの最初に次のコードを入れればいい
'画面更新の非表示
Application.ScreenUpdating = False
ちなみに,どんなときに画面更新を非表示にすれば計算速度が速くなるかは下の記事を参考にしてほしい
>>画面を止める
エクセルのショートカットキーを使いこなそう(Windows)
どんなものにもショートカットキーが存在する.それはExcelでも例外ではない
ショートカットキーが使いこなせるようになれば,単純にExcelの操作が速くなる
どのくらい操作が速くなるかというと,人差し指2本でキーボードを入力するのとブラインドタッチで入力するのくらい違う
ブラインドタッチができない人はできるようになってもらうとして,そういう人にもわかる例を出すとスマホの日本語入力をローマ字でやるかフリック入力でやるかぐらい違う
フリック入力ができない人は(以下略
ここでは,自分がよく使っているショートカットキーを紹介するので,ちょっとずつでも覚えていってほしい
ちなみに+は同時押しで,矢印は順番に押すことを意味する
ショートカットキー | 効果 |
ctrl + c | コピー |
ctrl + v | 貼り付け |
ctrl + x | 切り取り |
ctrl + y | 進む |
ctrl + z | 戻る |
ctrl + 矢印 | 矢印の方向に入力されている最後のデータまで移動する |
shift + 矢印 | 矢印の方向に複数のセルを選択する |
ctrl + shift + 矢印 | 矢印の方向に入力されているデータをすべて選択する |
ctrl + スペース | 行を全選択 |
shift + スペース | 列を全選択 |
ctrl + fn + home | A1のセルを選択する |
shift + f2 | セルにコメントを入力する |
Esc | 操作をキャンセルする |
alt + f2 | 名前を付けて保存する |
alt + f8 | マクロの画面を開く |
alt + f11 | Excel VBAの編集画面を開く |
そして最強のキーである「alt」キーを押してみてほしい
ツールバーにアルファベットが出てくる.ここからさらに「ホーム」の下にある”H"を押してみると
さらにたくさんのアルファベットが出てくる
このショートカットキーを使えば,ツールバーにある機能はすべてマウスを使わずに実行することができる
altキーとアルファベットの組み合わせは無限にあるが,その中でも特に便利なものを紹介する
ショートカットキー | 効果 |
alt → H → B → A | 選択したセルに”格子”の罫線を引く |
alt → H → B → N | 選択したセルの罫線を削除する |
alt → H → H → N | 選択したセルの塗りつぶしをなしにする |
alt → R → D | 選択したセルのコメントを削除する |
alt → R → A | シートの中のコメントをすべて表示する |
次に,Excelではないが,覚えておくと便利なショートカットキーを紹介する
ショートカットキー | 効果 |
alt + tab | ウィンドウを切り替える |
alt + f4 | ウィンドウを閉じる |
alt + ← | (ブラウザで)戻る |
alt + → | (ブラウザで)進む |
ctrl + tab | (ブラウザで)タブを切り替える |
ctrl + f4 | (ブラウザで)タブを閉じる |
Win + D | デスクトップを開く |
Win + E | エクスプローラーを開く |
Win + L | 画面をロックする |
Win + 矢印 | ウィンドウの大きさや場所を切り替える |
Win + 数字 | タスクバーにあるアプリを開く(左から数えて) |
他のショートカットキーが気になる人はこちらの記事も参考にしてほしい
以上,どんどんショートカットキーを使いこなしてほしい!
まとめ
みんなもどんどんマクロを使って設計プログラムを書いていこうね
コメント