これからのExcel活用の重要なキーワードは、「インターネット」と「通信」です。

Excelの最大のメリットは、その手軽さです。

データを簡単に保存することができるし、データの計算、集計、加工も容易です。

それにExcelは、最も普及しているソフトウェアなので、ほとんどの Windowsパソコンにインストールされています。

Excelでは、VBEという統合開発環境がすぐに利用できるので、プログラミングのための準備は不要です。

VBA言語を使って、初心者でも今すぐにプログラミングが始められます。

したがってExcelは、私達に最も身近な「開発ツール」であるとも言えます。

そんなExcelのメリットを活かしつつ、さらに10倍、100倍活用するために重要なキーワードがあります。

それが「インターネット」と「通信」です。

ExcelのVBAを使って、インターネット上にある膨大な情報源にアクセスできるようになると、活用範囲が一気に広がります。

例えば、Excelで「XML」の取得が可能です。これはとても大きな意味を持ちます。

XMLを使うと、コンピューター同士で、データのやり取りを行なうことができます。

つまりコンピューター同士が、簡単につながるわけです。*重要

一番身近な例では、XMLの一種である「RSS」を取得すれば、ExcelでRSSリーダーを作成することができます。

RSSリーダーも、コンピューター同士がつながっているのですが、イマイチ凄さが伝わりませんよね。(本当は凄いことなのです)

それでは次の例はどうでしょうか?

今では、多くのWebサービスが、データをXMLで提供しています。

例えば、証券会社のWebサービスを利用すれば、Excelで株式やFXの売買を行なうことも可能なのです。

WebサービスAPIで、オリジナルのシステムトレードソフトを開発する方法。

もちろん過去の株価や為替相場のデータを取り込んで、Excelで分析することも可能です。

もしあなたなりの法則を発見できれば、大きく儲けることが出来るかもしれません。

どうですか?コンピューター同士がつながることの凄さが、少しはイメージできましたか?

さらに、Excelからメールを送受信することも可能です。

メール送信・受信プログラミング初心者入門(Excel版)

メールの送受信でも、コンピューター同士がつながっています。

メールを送受信する時には、メールサーバーに接続するし、送受信先のパソコンとも、メールを通して、データをやり取りすることができます。

実はメールからデータを抽出することも可能なので、ネットショップの受注管理にも利用できます。

このようにExcelは、インターネットに接続することで、利用範囲や可能性が、ますます広がります。

Excelは、もうローカルで表計算を行なうだけのアプリケーションソフトではありません。

Excelの可能性は、無限に広がっているのです。

当講座でも、応用編として、これらのプログラミングを紹介する予定です。お楽しみに!



まずはExcel VBAプログラミングの基本を学びましょう。

VBAExcelだけでなく、Microsoft社の Office製品で、共通して使えるプログラミング言語です。

VBE(Visual Basic Editor)という統合開発環境も、共通して使えます。

ただ Office製品ごとに扱えるオブジェクト(対象)が異なります。

例えば Excelでは、ワークシート、セル、フォームなどが、操作対象となります。

また Accessでは、テーブル、フォーム、レポートなどが、操作対象となります。

でもVBAの基本は、どれも同じなので、Excelで覚えたVBAの基本は、Accessでも使えます。

あとはそれぞれの Office 製品に特徴的な機能を学べばよいだけです。

Excelの最大の特徴は、ワークシートのセルにデータを簡単に保存できることと、その手軽さです。

セルに入力したデータは、Excelのツールバーにある「上書き保存」ボタンで、簡単に保存することができます。

データをテキストファイルに保存したことがあるプログラマーならわかると思いますが、この手軽さはとても便利です。

検索や抽出もExcelの基本的な機能として、最初から用意されています。

したがって「手軽さ」という点では、Access のようなデータベースよりも、Excelの方が便利です。

もちろん Access の方が便利なことも多いですが、Excelに比べると手間がかかります。

普段からよく使われるExcelは、初心者がプログラミングを学ぶツールとしても最適です。

基礎編では、Excel VBAを学ぶ上で欠かせない、セルとワークシートの扱い方から解説します。

まずは、Excel VBAプログラムの中から、「セルのデータを取得する方法」と「セルへデータを出力する方法」(書き込む)を覚えましょう。

またExcelでは、複数のワークシートを作成することができます。

そのため、ワークシートを指定してから、セルのデータを扱う方法も大事です。

図を交えて詳しく解説するので、プログラミング初心者でも大丈夫です。必ず理解できるようになります。

Excel VBA プロシージャの種類と特徴について。

ExcelVBAでは、プロシージャという単位でプログラミングを行ないます。

プロシージャ(procedure)とは、複数の処理をまとめたプログラムの単位のことです。

C言語のように、プログラミング言語によっては、関数ということもあります。

VBAのプロシージャには、いくつか種類があります。よく使われるのは、以下の3種類です。

(1)Functionプロシージャ
これまで例として取り上げてきたのは、このタイプのプロシージャです。

Functionプロシージャは、関数プロシージャとも呼ばれるように、何らかの処理(計算など)を行なった後に、戻り値を返すことができます。

また Excelのワークシート上で、セルの数式に使えることもメリットです。


(2)Subプロシージャ
Subプロシージャは、何らかの処理を行なうプロシージャです。サブルーチンと呼ばれることもあります。

Subプロシージャは、他のプロシージャから呼び出して使います。

またSubプロシージャは、処理を分割する時に便利です。

プログラムが長くなると、メンテナンスが大変だし、複数のプロシージャで同じプログラムが重複することがあります。

そんな時は、役割ごとにプログラムをSubプロシージャ化することで、メンテナンスが容易になり、プログラムの重複が防げます。(再利用性が高まる)

しかしSubプロシージャは、Functionプロシージャと違い、戻り値を返すことは出来ません。


(3)イベントプロシージャ
イベントプロシージャは、イベント(出来事)が起こったことをキッカケに、システム(コンピューター)が、自動的に呼び出すプロシージャです。これが最大の特徴です。

FunctionプロシージャやSubプロシージャは、プログラマーやユーザーが、呼び出すキッカケを作らないと実行できないのに対し、イベントプロシージャは自動的に呼び出されます。

例えば、ユーザーがボタンをクリックしたこと(出来事)をキッカケに、イベントプロシージャに書かれたプログラムが実行されます。

プログラム実行の対象となるイベントは、沢山あります。

またイベントプロシージャは、他のプロシージャから呼び出して使うことも可能です。


【補講】
これらのプロシージャで共通していることは、以下の2つです。

(1)引数を受け取ることができる。
プロシージャを呼び出す時に渡す「実引数」のデータ型と、プロシージャ側で受け取る「仮引数」のデータ型を一致させる必要があります。

ただしイベントプロシージャだけは、システムが自動的に引数を渡します。


(2)他のプロシージャ内で呼び出せる
上記の3つのプロシージャは、他のプロシージャから呼び出して使えます。

意外と忘れられがちですが、イベントプロシージャの場合も「Call ステートメント」を使うことで、呼び出すことが可能です。


プロシージャの種類と特徴については、実際にプログラミングを行ない、使っていくうちにわかるようになります。

今の段階では難しく感じるかも知れませんが、安心してください。

Excel VBA テキストファイルの内容を読み込み、ワークシートのセルに表示する方法。

ExcelVBAで、ユーザー定義関数を作成すれば、もっといろんなことが出来ます。

ユーザー定義関数(関数プロシージャ)は、関数名と引数で呼び出すだけで、複雑な処理を行ない、戻り値を返すことが可能です。

今回はユーザー定義関数の応用例として、テキストファイルの内容を読み込み、ワークシートのセルに表示するプログラムを試してみましょう。

プログラムは私のほうで作成済みです。

【1】以下のファイルをダウンロードしてください。

textFile.zip


【2】ダウンロードした「textFile.zip」を解凍すると、「textFile.xls」というExcelファイルがあります。

excel-vba-71.gif


【3】次は「test.txt」というファイル名で、テキストファイルを作成し、Cドライブの直下に保存してください。

・C:\test.txt
excel-vba-78.gif

*「\」はWindowsでは円記号のことです。
*ファイルの保存場所は重要です。

このテキストファイルの文章は、何でもかまいません。適当な文章を用意してください。

また上の図では、TeraPadというテキストエディターを使って作成していますが、Windows付属のメモ帳でもかまいません。


これで準備が整いました。

【4】「textFile.xls」を開いてください。


【5】メッセージが表示されますが、安全なので「マクロを有効にする」をクリックします。

excel-vba-72.gif


【6】Excelの画面が表示されました。

excel-vba-73.gif

このExcelファイルは、テキストファイルから取得した文章が表示しやすいように、セルの設定を以下のように変えています。

(1)A列の横幅を広げた。
(2)A列10行目までは、縦も広げた。
(3)A列10行目までのセルの書式設定を変更した。
・配置タブ 縦位置 上詰め
・配置タブ 文字の制御 折り返して全体を表示する


【7】VBEを起動します。

*「Altキー」+「F11キー」


【8】標準モジュールの「Module1」を選択し、コード(プログラム)を表示します。

excel-vba-74.gif


【9】ユーザー定義関数のデータ型に注目してください。

excel-vba-75.gif

この readTextFile() という関数は、String型(文字列型)のデータを受け取り、String型のデータを戻り値として返します。

プログラムの内部は、テキストファイルの1行目から最後の行までを取得し、最後に全体を返しているだけです。

プログラムの詳しい解説は、以下のWebページをご覧ください。
ステップメールで送信する文章を、テキストファイルから読み込む方法について。

この関数は、Excelからメールを送信(ステップメール)する時に、あらかじめ作成しておいた文章を取得するためのものです。解説がちょっと難しいかも知れません。

関数は使い方がわかれば、とりあえず利用はできるので、この段階ではプログラムの意味がわからなくてもかまいません。


【10】プログラムの確認が済んだら、VBEを閉じてください。


【11】セル「A1」の「数式の編集」に以下のような式を入力し、関数を呼び出します。

excel-vba-76.gif

・例

=readTextFile("C:\test.txt")


*「\」はWindowsでは円記号のことです。
*必ず存在するテキストファイルを指定してください。
*テキストファイルはフルパスで指定します。

またこの関数の引数は、String型なので、「"」(ダブルクォーテーション)で囲むことも忘れないでください。忘れるとエラーになります。

このプログラムはパソコンのファイルを読み込むので、セキュリティソフトによっては、メッセージが表示されることがあります。安全なので、「許可」してください。


【12】関数を実行すると、以下のようにテキストファイルの内容が取得できます。

excel-vba-77.gif


【13】他にもテキストファイルを用意して、別のセルに読み込んでみてください。


【14】動作確認が済んだら、「textFile.xls」を閉じてください。


【15】ファイルを閉じる時には、メッセージが表示されます。

excel-vba-79.gif

これは数式の編集を行なったためです。

ファイルの変更点を残しておきたい場合は「はい」、残す必要がなければ「いいえ」をクリックします。


どうでしたか?

「関数名と引数で呼び出すだけで、複雑な処理を行ない、戻り値を返す」という感覚が掴めたでしょうか。

今回は10行ちょっとの短いプログラムでしたが、もっと複雑な処理でも可能です。

数百行から数千行の処理も、関数名だけで呼び出すことができます。

Excel VBA プログラムはいろんな書き方ができます。正解は一つではありません。

ExcelVBAに限らず、プログラミングはプログラマーによって、いろんな書き方ができます。

したがってプログラムの正解は一つではありません。いくつもあります。

でも効率的な書き方や、メンテナンスしやすい書き方というものはあります。

また、ユーザー定義関数の中で、さらに別のユーザー定義関数を呼び出すことで、前に作成したプログラムを有効に活用することもできます。

そこで今回は、同じ結果を出すプログラムでも、いろんな書き方ができることを学んでください。

オリジナルのユーザー定義関数を、さらに改良してみましょう。

(1)まず、これまでの基本となる calcGankin() というユーザー定義関数があります。

・calcGankin()
excel-vba-66.gif

このユーザー定義関数は、欲しい利息と利率(年率)から、必要な元金を逆算するためのものです。

・使用例

=calcGankin(1000,0.5)



(2)次に calcGankin() を改良して、calcGankinF()というユーザー定義関数を作成しました。

・calcGankinF()
excel-vba-67.gif

関数の使い方は同じです。

・使用例

=calcGankinF(1000,0.5)


このユーザー定義関数は、計算結果を「桁区切り」する書式を加えたり、円表示を加えています。

ここでのポイントは、元金の計算式をそのまま残していることです。

つまり同じ計算式が、calcGankin() と calcGankinF() の両方にあります。

それぞれに計算式があるメリットは、異なる式に変えやすいことです。

逆に言うと、計算式を変えたい場合や、式が間違っていた場合には、両方修正しなければならないデメリットがあります。


(3)そこで calcGankin() の計算式を利用しつつ、元金の書式を加えた、calcGankinF2()というユーザー定義関数を作成しましょう。

これまでのユーザー定義関数の下に新しく作成して、動作確認してみてください。

・calcGankinF2()
excel-vba-65.gif


Public Function calcGankinF2(risoku As Long, kinri As Single) As String
  Dim gankin As Currency
  
  gankin = calcGankin(risoku, kinri)
  calcGankinF2 = Format(gankin, "##,##0") & "円"
  
End Function


計算結果は calcGankinF() とまったく同じになるはずです。

・使用例

=calcGankinF2(1000,0.5)


でも calcGankinF2() には、計算式がありませんよね。計算式の変わりに、別のユーザー定義関数を呼び出して使っています。


gankin = calcGankin(risoku, kinri)


このようにユーザー定義関数の中では、別のユーザー定義関数を呼び出して使うことができます。もちろん既存の関数も使えます。

別のユーザー定義関数を呼び出すことで、プログラムの処理を分割したり、プログラムの再活用が可能になります。

もし計算式が変更になった時でも、calcGankin() 側の修正だけで済みます。

また、calcGankinF2()が呼び出された時に受け取った引数を、そのままcalcGankin()を呼び出す時の引数として使っている点にも注目してください。

excel-vba-70.gif

このような書き方はよく使われるので、覚えておくと便利です。


(4)もっとシンプルにしたのが、calcGankinF3() です。これも作成して、動作確認してみてください。

・calcGankinF3()
excel-vba-68.gif


Public Function calcGankinF3(risoku As Long, kinri As Single) As String
  
  calcGankinF3 = Format(calcGankin(risoku, kinri), "##,##0") & "円"
  
End Function


・使用例

=calcGankinF3(1000,0.5)


出力結果は同じですが、プログラムがたった1行になりました。

でも関数が入れ子の状態なので、少しわかり難いですよね。そんな時は「置き換え」で考えます。

*入れ子 ここでは関数の中に関数がある状態

calcGankinF3 = Format(calcGankin(risoku, kinri), "##,##0") & "円"

calcGankinF3 = Format(calcGankin(1000, 0.5), "##,##0") & "円"

calcGankinF3 = Format(250000, "##,##0") & "円"

calcGankinF3 = "250,000" & "円"

calcGankinF3 = "250,000円"

このように引数の値や、関数の戻り値を、実際の値に置き換えてイメージすると、わかりやすいです。これがプログラムを読む時のコツです。


【解説】
今回はユーザー定義関数の応用編として、少し変わった書き方を学びました。

同じ結果を得るプログラムでも「いろんな書き方ができるんだなぁ」という感じを掴んでいただけたら幸いです。

プログラミングの正解は一つではないことが、何となくわかったのではないでしょうか。

また、今回ぜひ押さえおいて欲しいポイントは、以下の3つです。

・ユーザー定義関数の中で、さらに別のユーザー定義関数が呼び出せる。
・別のユーザー定義関数を呼び出すことで、プログラムを分割したり、処理を再活用できる。
・受け取った値を、さらに別の関数を呼び出す時の引数にできる。

プログラミングとは、既存の関数やオリジナルのユーザー定義関数を組み合わせて、実現したい処理を組み立てていく作業なのです。

ちなみにJava言語などのオブジェクト指向型言語では、「継承」という便利な仕組みがあるので、プログラムの再利用が、もっと効率的にできます。

Excel VBA オリジナルのユーザー定義関数を、さらに改良してみましょう。

ExcelVBAで、ユーザー定義関数を作成するメリットの一つが、自由に改良できることです

例えば以下のように、「桁区切り」と、「円」の表示ができるように改良してみましょう。

excel-vba-53.gif


【1】Excelのファイル「gankin.xls」を開きます。

*マクロを有効にする

ダウンロードしたものでも、あなたが作成したものでもかまいません。


【2】VBEを起動します。

*「Altキー」+「F11キー」


【3】標準モジュールの「Module1」を選択し、コード(プログラム)を表示します。

excel-vba-42.gif

コードウィンドウには、ユーザー定義関数の calcGankin() が表示されます。


【4】calcGankin()をコピーして、すぐ下に貼り付けます。

excel-vba-43.gif

でもそのままだと、関数名が重複するのでダメです。

同じ関数名では、コンピューターが区別できないので、エラーになります。


【5】そこで新しいユーザー定義関数を、「calcGankinF」に変更します。関数名を変える場合は、戻り値の部分も変えなくてはなりません。

excel-vba-44.gif

上の図のように2箇所変更してください。


【6】この段階で calcGankinF() を使うと、calcGankin()と全く同じ結果になります。

excel-vba-45.gif

プログラムをコピー&ペーストしたのですから、当然ですよね。


【7】次は、ユーザー定義関数の戻り値のデータ型を、「String」(文字列型)に変更します。

excel-vba-46.gif

これまでは、Currency(通貨型)だったので、数値を返していましたが、今回は「円」という文字まで含めたいので、String(文字列型)にします。


【8】この段階で calcGankinF() を試すと、小数点以下まで表示されます。

excel-vba-47.gif

これは数値ではなく、文字列なので注意してください。

文字列型にしたことで、通貨型とは表示の仕方が変わったのです。


ここからが改良の本番です。

【9】戻り値を代入する部分を、以下のように変更します。

excel-vba-48.gif


calcGankinF = Format(gankin, "##,##0")


Format関数は既存の関数で、1番目の引数の値(または式)を、2番目の引数の書式にして、その文字列を返します。

つまり桁区切りされた数字が、戻り値になります。数字といっても文字列です。

正確には、「文字列を示すバリアント型(内部処理形式 String の Variant)の値」を返します。

また、ユーザー定義関数の中で、既存の関数を使用できることにも注目してください。


【10】この段階で calcGankinF() を試してみてください。

excel-vba-49.gif

桁区切りされていることがわかります。


【11】次は、プログラムに「円」まで含めてみましょう。

excel-vba-50.gif


calcGankinF = Format(gankin, "##,##0") & "円"


「&」(半角のアンパサンド)は、文字を連結する演算子です。

したがって、Format関数の戻り値の後に「円」が連結されます。

以下のように置き換えてイメージすると、わかりやすいです。

calcGankinF = 250,000 & "円"


このようにプログラミングでは、関数の戻り値を置き換えるイメージが大切です。


【12】それでは、最終的な動作を確認してみましょう。

excel-vba-51.gif

目的通りの結果を得ることができました。


【ワンポイント】
以下のようにプログラムを書けば、金額の前に「\」(円マーク)を付けることも可能です。

*「\」はWindowsでは円記号のことです。

calcGankinF = "\" & Format(gankin, "##,##0")


excel-vba-52.gif


【補講】
実は今回のような処理は、Excelのワークシート上で、セルの書式や計算式を使っても可能です。

だから「わざわざユーザー定義関数を作るまでもない」と感じるかもしれません。

でもユーザー定義関数なら、数百行~数千行にもなる複雑な処理も可能なのです。

しかも今回のように、ユーザー定義関数をいくつか用意しておけば、関数名を換えるだけで、異なった処理を行ない、戻り値を変化させられます。

これはとても便利なことなのです。

Excel VBA 標準モジュールのエクスポートとインポートを行なう方法。

ExcelVBAで作成した標準モジュールは、エクスポートしたり、インポートすることが出来ます。

標準モジュールをエクスポートすると、ファイルとして保存されます。

その保存したファイルを、他のExcelファイル側でインポートすることで、標準モジュールにプログラミングしたユーザー定義関数が、そのまま使えるようになります。

それでは、標準モジュールのエクスポートとインポートを実際に行なってみましょう。

【1】Excelのファイル「gankin.xls」を開きます。

*マクロを有効にする

ダウンロードしたものでも、あなたが作成したものでもかまいません。


【2】VBEを起動します。

*「Altキー」+「F11キー」


【3】標準モジュールの「Module1」をマウスで右クリックし、コンテキストメニューが表示されたら、「ファイルのエクスポート」を選択します。

excel-vba-54.gif


【4】「ファイルのエクスポート」ダイアログボックスが表示されたら、ファイル名を確認し、「保存」ボタンをクリックします。

excel-vba-55.gif

ファイル名は変更することもできますが、今回はそのまま保存してください。

また、「保存する場所」もちゃんと覚えておいてください。


【5】保存した場所に「Module1.bas」というファイルが作成されていることを、確認してください。

excel-vba-56.gif


【6】ここで「gankin.xls」は閉じます。


次はインポートする側のExcelファイルです。

【7】新しいExcelファイルを作成します。

excel-vba-57.gif

*ファイル名は適当でかまいません。


【8】新しいExcelファイルのVBEを起動します。

excel-vba-58.gif

*「Altキー」+「F11キー」


【9】プロジェクトエクスプローラ内をマウスで右クリックし、、コンテキストメニューが表示されたら、「ファイルのインポート」を選択します。

excel-vba-59.gif

クリックする場所は、プロジェクトエクスプローラ内なら、どこでもかまいません。


【10】「ファイルのインポート」ダイアログボックスが表示されたら、「Module1.bas」を選択し、「開く」ボタンをクリックします。

excel-vba-60.gif

「ファイルの場所」は、先ほど保存しておいた場所です。


【11】標準モジュールがインポートできました。

excel-vba-61.gif


【12】標準モジュールのコード(プログラム)が、ちゃんと表示されることを確認してください。

excel-vba-62.gif

もしコードが表示されない場合は、プロジェクトエクスプローラで、標準モジュールの「Module1」を選択してから、「コードの表示」ボタンをクリックしてください。

excel-vba-63.gif

または、「Module1」をダブルクリックしても、コードを表示することができます。

excel-vba-64.gif


【13】ここまでの作業を保存してください。

*VBE側の保存ボタンをクリック


【14】あとは、「gankin.xls」と同じ要領で、ユーザー定義関数が使えるかどうか、動作確認をしてください。

・例

=calcGankin(1000,0.5)



以上のように、標準モジュールのエクスポートとインポートは簡単です。

標準モジュールにユーザー定義関数を作成しておけば、簡単に受け渡しすることができます。

既にデータや計算式が入力されたExcelファイルに機能を追加する場合も、エクスポートとインポートが適しています。

この方法を使えば、あなたが作成したユーザー定義関数を、他の人に利用してもらうことも可能です。

作成した標準モジュールを、他のExcelファイルでも利用するには?

ExcelVBAで、標準モジュールに作成したユーザー定義関数は、そのExcelファイル(Book)内だけで有効です。

したがって、他のExcelファイルで今回のユーザー定義関数を使おうとしても、エラーになります。

新しいExcelファイルを作成して、試してみてください。

↓このようなエラーが表示されるはずです。
excel-vba-19.gif

何故なら、新しいExcelファイルには、ユーザー定義関数がプログラムされていないからです。

このことから、ユーザー定義関数は、Excelファイル(Book)ごとに管理されていることがわかります。

もし新しいExcelファイルでも同じユーザー定義関数を使いたい場合は、以下のような方法があります。

(1)ファイルごとコピーする。
(2)新しいファイルで、新たにユーザー定義関数を作成する。
(3)標準モジュールをインポートする。

一番簡単なのは(1)です。

ユーザー定義関数が含まれているExcelファイルをコピーすると、プログラムもコピーされるので、そのまま使うことができます。

(2)の方法は、手間がかかるので、あまりおすすめできません。

また、既にExcelファイルがあり、データがある程度入力されている場合は、(3)の方法が適しています。

入力済みのデータや計算式が、そのまま使えるからです。

標準モジュールはエクスポートしたり、インポートすることができます。標準モジュールにプログラムを書いておけば、他のファイルで使うことは簡単です。

どの方法が適しているかは、入力済みのデータや計算式を移動したほうが簡単なのか、それともプログラム側をインポートしたほうが簡単なのかで判断してください。

次回は標準モジュールのエクスポートとインポートについて解説します。

スポンサードリンク

スポンサードリンク






Excel VBA 初心者入門講座 TOPへ

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。