FC2ブログ



【当ブログ管理人からのお知らせ】


誰にでもパソコン」は、日頃パソコンを御使いの中でのちょっとしたお困り事を解決する、訪問型パソコンサービス  です。

パソコン教室、カルチャースクールでパソコン講師を務めた経験のある当ブログ管理人が御客様の元へ御伺いし、以下の3つのサービスでパソコンのお困り事にお応えします。

サービスエリアは、東京都(伊豆七島は除く)及び神奈川県です。

 サービス1<パソコン設定サービス>
 パソコンの初期化やインターネットの接続、プリンターの接続など、面倒で手間が掛かる作業を行います。

 サービス2<ピンポイントレクチャー>
 ”こんな事だけ知りたい”と言うピンポイントな御要望についてレクチャー致します。
<一例>
パソコンについてここだけを知りたい
ワード・エクセルは使った事が無いが簡単な文書や集計表を作る方法だけを知りたい
デジカメ写真をDVDに保存する方法を知りたい」

 サービス3<訪問パソコンレッスン>
 パソコンやワード、エクセル、パワーポイント、アクセス等についてマンツーマンでレクチャー致します。

 パソコン教室の様に授業回数や期限は設けず、御納得頂けるまで対応致します。


誰にでもパソコン」の詳細は、こちらのWebサイトを御覧下さい。
当ブログ管理人プロフィールも掲載しております)


御問い合わせ先は以下の通りです!

・御問い合わせ電話:070-4819-3682(荒井 迄)
・御問い合わせメール:darenidemo.gmail.com
・御問い合わせメールフォーム:こちら


【ミニ・レクチャー】:マクロの真の姿はコンピュータ言語!?

前回前々回と2回に渡りエクセルのマクロ機能についてお話ししました。

さて、マクロとして記録されたエクセルの操作は、どの様な形でエクセルブックに記録されているのでしょうか?

そこで今回は、エクセルブックに記録されたマクロの姿についてお話しします。

それでは、続きをどうぞ!



【マクロの真の姿、VBA】

エクセルは作成したマクロを基に自動的に操作を行いますが、ではマクロの中身とはどの様なものなのでしょうか?

実は、マクロの中身は「VBA」と呼ばれるコンピュータ言語で書かれたプログラムで、エクセルは、このプログラムを実行する事でマクロとして動作するのです。

VBAとは、「Visual Basic for Applications」の略で、エクセルだけで無く、ワード、パワーポイント、アクセスと言った、MS-OFFICE全ての製品に対応するコンピュータ言語です。

下の画像は、前々回のお話しで作成したマクロの中身、つまりVBAプログラムです。

なにやら意味不明な文字が並んでいるな!と思われるかもしれませんが、これはエクセルに対して動作を指示する命令なのです。

そして、エクセルはこの命令を上から順番に実行する事で、マクロ記録操作で記憶させた操作を自動的に実行するのです。

プログラムに全く縁の無い方にとっては「プログラムなんて自分には縁遠い世界の事だから」と思われるかもしれませんが、今回のお話しは、「マクロ記録操作で記憶させて作ったマクロとVBAプログラムはどの様な関係なのか?」についてのお話しであって、難解なプログラミングについてのお話しではありませんので、安心して御覧頂ければと思います。

マクロソース

【プログラムって、そもそも何なの?】

-プログラムとは、コンピュータ動作の式次第-

マクロとVBAプログラムの関係についてお話しする前に、そもそもプログラムとは何なのか?について考えてみましょう。

Program」と言う英単語を辞書で引くと、「予定や順序を書いた紙」、「セレモニーの実行計画」の意味と書いてあります。

演奏会や入学/卒業式の際に、演壇を登る階段の傍に式次第が書かれた紙があり、そこには「本日のプログラム」と言うタイトルの下に、行われる内容や演奏する曲目が書かれてあり、その順番に沿って式や演奏が進行して行きます。

コンピュータ上のプログラムと言うのも正にこれと同じで、コンピューター・プログラムと言うのは、コンピュータに行わせたい命令を順番に並べた式次第の様なものなのです。

そしてコンピューターは、プログラムを上から順番に実行する事で、色々な処理を行うのです。


-コンピュータも岐路に立つ!?:条件分岐-

人は長い人生の中で何度と無く岐路に立ち、選択と決断を強いられます。

そして、この選択と決断はコンピュータも行っているのです。

先程、プログラムは上から順番に実行するとお話ししましたが、これはあくまでも原則であって、時にはプログラムの流れが枝分かれする場合もあるのです。

プログラムが枝分かれするのは、ある特定の状態や条件の時だけ別の処理を行わせたいからです。

例えば、エクセルで売り上げデータの集計をマクロで行わせる時、「もし、前月よりも少ない売上データがある場合は、数字の色を赤くしたい」場合、プログラムは「前月よりも少ない場合の処理」と「前月よりも同じか多い場合の処理」の2つに枝分かれし、売上データの額により実行するプログラムが変わるのです。

これは、エクセルのIF関数と同じ様な事をVBAプログラムで行わせると思って頂ければ分かり易いかと思います。

この様にプログラムが枝分かれする事を専門用語では「条件分岐」と呼びます。


-皆に重宝される便利屋的プログラム:サブルーチン-

プログラムには、メインのプログラムとは独立して存在するプログラムもあります。

この様なプログラムを専門用語では「サブ・ルーチン」と呼びます。

それに対して、メインのプログラムを専門用語では「メイン・ルーチン」と呼びます。

サブ・ルーチンが存在する理由は、他のVBAプログラムでも使われる共通の処理がある場合、その処理を行うプログラムをサブ・ルーチンとして独立して存在させて置けば、必要な時にメイン・ルーチンから呼び出すだけで済み、他のプログラムとの間で共有する事が出来る為です。

条件分岐とサブ・ルーチンを日常生活に喩えてみれば、住民総出で行う町内の大掃除を行う日が晴れならば今週の日曜日に行い、雨ならば来週の日曜日に延期すると言うのが条件分岐となり、町内会の住民が催しものを開いたり、町内会を行う時に使う集会場がサブ・ルーチンとなります。

条件分岐やサブ・ルーチンはVBAに限らず、あらゆるコンピュータ言語で共通している手法です。


-プログラムの本当の正体は0と1の羅列!?-

プログラムを構成する命令が英単語又は英単語を省略した言葉で表現されていると言うのもあらゆるコンピュータ言語に共通している事です。

しかし、パソコンやコンピュータは英単語表現の命令を理解する事は出来ませんので、パソコンやコンピュータが理解出来る1と0の組み合わのデジタルデータに変換されてメモリやハードディスク内に存在しているのです。

従って、お話しの冒頭で示しましたVBAプログラムは、あくまでも人間に分かり易くする為の仮の姿なのです。

因みに、今、子供達の間で遊びながらプログラム作成の基礎を学べる「Scrach(スクラッチ)」と言うプログラム学習ツールが流行っていますが、これも同様で、Scrach上に表示されるブロックは人間に分かり易くする為に表示されている命令であって、パソコンの内部では、そのブロックを1と0の命令に変換して動作するのです。

プログラムとは?

【シンプルなマクロで理解する!自動実行とVBAの関係】

それでは、前々回作成しましたマクロの真の姿であるVBAプログラムを眺めながら、マクロの動作とVBAプログラムの関係を見てみましょう。

下の画像は、前々回のお話しで作成したマクロの真の姿であるVBAプログラムです。
分かり易くする為に、命令に左には何番目の命令かを示す番号を挿入し、更に命令の意味を表すコメントを挿入してあります。

一見すると、意味不明な命令が並んでいる様に見えますが、個々の命令は英単語を省略した内容で、意外と分かり易いのです。

1番目の命令には、「Range」と「Select」と言う単語があります。

Rangeとは「範囲」と言う意味の英単語で、Selectは「選択」と言う意味の英単語です。

つまり、一番目の命令は、「セルC17~E17とC19~E19とC21~E21を選択する」と言う意味になります。

3番目の命令には「Copy」と言う単語があります。

Copyは、「複製」と言う意味の英単語です。

つまり、3番目の命令は「選択したセル範囲をコピー」するという意味になりますので、先程の1番目の命令でコピーしたセルC17~E17、C19~E19、C21~E21の中身をコピーすると言う意味になります。

4番目の命令には、「Sheets」と言う単語があります。

Sheetsは、「複数のエクセルシート」を表す英単語です。

つまり4番目の命令は、「複数のエクセルシートの中のシート3を選択する」と言う意味になります。

5番目の命令には、「Range」と「Select」と言う単語がある事から、「セルA1を選択する」と言う意味になります。

6番目の命令は、やや複雑な命令で「Ctrlキーを押したまま右矢印キーを押して、一番右端列の空白で無いセルを選択する」と言う意味になります。

7番目の命令もやや複雑な命令で、「選択されているセルよりも列方向にセル一つ分右のセルを選択する」と言う意味になります。

8番目の命令もやや複雑な命令で、「コピーしたセル内のデータの内、書式を除いた値だけを貼り付ける」と言う意味になります。

9番目の命令には、「Sheets」と「Select」と言う単語がある事から、「シート1を選択」と言う意味になります。

11番目の命令には、「Range」と「Select」と言う単語がある事から、「シート1のセルC7~E17を選択する」と言う意味になります。

以上の様に、一部の複雑な命令を除いて、VBAプログラムは英単語を含んだ分かり易い命令で構成されています。

多少難しいお話しになってしまったかもしれませんが、御理解頂きたいのは、「このプログラムを上から順番にエクセルが実行する事で、前回お話ししました、個人情報入力フォームに入力した氏名、住所、電話番号を別のシートに転記する事が自動的に行われる」と言う事です。

マクロソース(説明付き)

【マクロはVBAでも作れる】

さて、これまでお話しして来ましたVBAプログラムは、人間に分かり易い様に英単語又は英単語を省略した言葉で表現されているとお話ししましたが、何故その必要があるのでしょうか?

実は、マクロの作成と言うのはマクロの記録操作だけで無く、VBAプログラムを作る事でも可能だからなのです。

では何故、わざわざVBAプログラムを作ってマクロを作る必要があるのでしょうか?

一見すると、前々回の様にマクロ記録によりマクロを作った方が簡単に思えますね。

しかし、マクロ記録によるマクロ作成では以下の様な事が出来ないのに対して、VBAプログラムによるマクロ作成では可能だからなのです。

データ入力画面の作成

VBAプログラムによりマクロを作るメリットの一つとして挙げられるのが、データ入力画面の作成です。

前回のお話しの個人情報入力フォームの様に、処理が簡単なマクロなら、セルの装飾やオートフィルにより入力画面を作れば済みますが、売上データの中から特定の条件に合うデータだけを絞り込む為に、入力画面に色々な条件を設定する項目を設ける場合、オートフィルの操作だけでは条件に合ったデータの絞り込みは出来ず、どうしてもVBAプログラムと連携した入力画面が必要になります。

VBAプログラムはマクロの作成だけで無く、VBAプログラムと連動したデータ入力画面も作る事が出来る為、入力画面で設定した条件に合ったマクロ処理を行わせる事が出来ます。

入力フォーム


選択した条件に応じた動作

その日の総売上額を集計すると言う様な定型処理ならば、その処理を行うマクロを記録し、そのマクロをボタンに登録するだけで済みますが、下のデータ入寮画面の様に、ある一定金額以上の品目だけを表示したり、ある一定金額以上の商品だけを表示すると言う様に、毎回異なるデータや条件が必要な集計は、マクロ記録による操作で作ったマクロでは対応出来ません。

これに対して、VBAプログラムによるマクロならば、毎回異なる条件による処理が可能です。

これは先程お話ししました「条件分岐」を行う命令がVBAプログラムにあるからです。

入力フォーム(データ入力済み)



セル内のデータの変化に応じた動作

シート上の商品毎の売上データが10、000円以上になったら、隣の列に「達成」と言う文字を表示すると言う様に、セル内のデータの変化に応じた動作をさせる事が出来ます。

また、セルをクリックしたり、セルにカーソルを重ねた時に、ある特定の動作をさせると言う事もVBAプログラムによるマクロでは可能です。

でも売り上げが100、000円以上になったら「達成」の文字を表示すると言うのは、IF関数を使えば出来るのでは?と思われるかもしれませんね。

確かにこの程度の簡単な処理であれば、マクロに頼らなくてもIF関数で実現出来ます。

しかし、100、000円以上の売上データを新しいシートに抽出するとしたらどうでしょうか?

確かにこれもマクロ記録の操作で作ったマクロでも出来ますが、マクロ記録の操作が煩雑になり、誤った操作をマクロに記録するリスクもあります。

それに比べてVBAによるマクロでは、絞り込んだデータを別シートに転記する様な操作だけで無く、それ以上に複雑な処理を行わせる事も出来るのです。

VBAマクロによる別シート転記


オリジナルの関数の作成

エクセルには459個もの関数があり、その組み合わせにより色々な処理をさせたり、集計を行う事が出来ます。

しかし、思い通りの処理をさせる為に色々な関数を組み合わせて複合関数とするには、それなりの発想力や経験などが必要とされ、また必ずしも思い通りの処理を行う複合関数を作れるとは限らず、「こんな処理をしてくれる関数があったらな~!」と思われた事もあると思います。

そんな願いを叶えてくれるのがVBAプログラムなのです。

VBAプログラムにより、自分の思った通りの処理を行うオリジナルの関数を作る事が出来るのです。

VBAによるオリジナル関数


シンプルなプログラム作成

マクロ記録により作られるマクロは、VBAプログラムを見ると余分な命令が入ってしまいます。

それに対して、同じ動作をするマクロをVBAプログラムで作った場合は、その様な余分な命令を省いてシンプルなプログラムとする事が出来ます。

プログラムについて御存知ない方は、「同じ動作をするのならば、どっちても良いのでは?」と思われるかもしれません。

しかし、複雑なプログラムと言うのは以下の様なデメリットがあるのです。

処理速度が遅くなります。
プログラムが見難い為、プログラムの修正や改造、保守に手間がかかります。
別の人が作ったプログラムを引き継いだ場合、内容を理解するのが大変です。
ファイル容量が大きくなります。
バグと呼ばれる、プログラムのミスや不具合が発生する確率が上がります。

これはVBAに限らず、あらゆるコンピュータ言語に共通して言える事です。

プログラマーと呼ばれるプロのプログラム開発者の方達は、要求される動作を如何に少ない命令で実現するか?を心掛けていて、如何にシンプルなプログラムを作れるか?がプログラマーの実力の差として現れてくるのです。

プログラマー

今回は、マクロ記録により作成されたマクロの真の姿であるVBAプログラムについてお話ししましたが、VBAプログラムで可能な事は、今回お話しした以外にも色々と便利な事が出来るのです。

エクセルは今やビジネスの世界では必須のツールとしての地位を確保し、日常生活でも活用される程に使われています。

しかし、VBAプログラムによるエクセルの活用は、エクセルによるアプリを開発する様な、極一部の人にしか浸透してないのが現状です。

確かにプログラミングと言うのは一朝一夕で身に付くものではない奥の深い世界であり、また、プログラミングに対する興味や適性を持っていないと身に付けるのは難しいものです。

その為、誰もが使いこなせるツールで無いのは否めません。

しかし、自分で作ったプログラムで思い通りにエクセルを動かす事が出来れば、これ程便利な事は無く、エクセルの新たな可能性を見出せると思います。

奇しくも、20年、30年先を見越したプログラム開発の市場で世界のトップに立つ事を目標とする為に、文部科学省主導の元、2020年度から小学校でのプログラミング教育が必修科目となります。

これ程までにプログラム作成と言うのは、プログラマー(プログラム開発者)だけに必要な能力では無く、これからは私たちにとって身近な存在になりつつあるのです。

巨人の星の星 飛雄馬や機動戦士ガンダムのアムロなどの声でお馴染みの声優である古谷 徹さんは、自他共に認めるアマチュア・プログラマーとして有名で、御自身のWebサイトで色々なソフトを公開されています。

コンピュータプログラムが身近になりつつある時代を迎えた今、老若男女を問わず一人でも多くの方がプログラミングに興味を持たれ、チャレンジして見ると言うのは意味のある事だと思います。

次回は、マクロ付きのエクセルブックを使用する際の注意点や、マクロに関するエクセルのオプション設定についてお話しします。

お楽しみに!
ブログランキングに参加しています!
ランクアップに御協力下さる方は、下のアイコンをクリック願います!



Microsoft Officeランキング

訪問型パソコンサービス「誰にでもパソコン」は、日頃パソコンを御使いの中でのちょっとしたお困り事を以下の3つのサービスで対応致します!

パソコン設定サービスパソコンやインターネットの設定が分からない方に!

ピンポイントレクチャーパソコンやワード、エクセルのここだけを知りたい方に!

訪問パソコンレッスン一からパソコンやワードを身に付けたい方に!

当ブログ管理人である、私が御客様の元へ直接御伺いし、対応させて頂きます!

詳しくは、こちらのWebサイトをご覧ください!
スポンサーサイト



[ 2018/02/22 17:42 ] ミニ・レクチャー | TB(0) | CM(0)

コメントの投稿













管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://darenidemo.blog.fc2.com/tb.php/115-198ac4e6