GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBA超入門

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBA超入門−9ステップで"Hello World!"からオブジェクト指向まで!
  基本はデータの入出力
 
■ データの出し入れが基本
 
前回のtest.xlsを開いてみましょう。"HelloWorld!"が表示されました?
うっとうしい場合はブックモジュールにあるWorkbook_Openプロシージャを削除してください。ちなみにここの表示を"ExcelVBAがんばるぞ!"とかしておけば、開くたびに気合が入ってよろしいんではないかと思います。

ところでこのプロシージャという言葉、プログラムとどう違うのでしょう?
今まで曖昧に使っていましたが、これからはきちんと意味を分けて使っていきます。
プロシージャは前回記述した Sub〜End Sub の部分ですSubプロシージャといいます。ExcelVBAにはもうひとつFunctionプロシージャがあって、この2種類をプロシージャと呼んでいます。

プログラムはもっと広範な意味の言葉でコンピュータに演算処理を行わせる手続き全般を指します。
つまりプロシージャはプログラムの一部ということになります。

さて、前回のtestプロシージャではただメッセージを表示させるだけでした。今回は表示させるメッセージをユーザーが任意に操作できるようにしましょう。

Public Sub test()
  MsgBox "HelloWorld!"
End Sub

がそのまま残ってますね。次のように書き換えてください。

Public Sub test()
Dim MyStr As String
  MyStr = InputBox("あなたの名前は?")
  MsgBox "Hello" & MyStr & "!"
End Sub

そんなに変わっていませんね。2行目と3行目が加わり、4行目がちょっと変りました。
さて実行させてください。実行はVBEからF5でもいいですし、ワークシートから前回の四角形をクリックしてもOKです。
名前を聞いてきますので名前を入力してやってください。日本語でも英語でも結構です。
"Helloあなたの名前!"と表示されましたか?

入力する名前を変更すれば当然表示される名前も異なってきます。
ちょっとプログラムっぽくなってきましたね。

ところでこのコードの2行目に注目してください。MyStr ってなんでしょう?
これは「変数」と呼びます。なぜこんなものが必要になるかというと…、
3行目でユーザーに入力させたデータ(この場合は名前)を4行目で表示させるまでの間、どこかにそのデータを保存しておく必要があります。
あなたが2行目でMyStrを宣言したとき、コンピュータはメモリ上に文字データを保存する場所を確保しました。
3行目であなたが名前を入力しOKクリックしたときに、そのデータをメモリ上に書き込みます。
4行目でメッセージを表示させる時に、MyStrの内容を書き出す必要が発生したためコンピュータはメモリ上の先ほどのデータを読み出しに行ってます。
5行目でプロシージャが終了しました。プロシージャ内で宣言された変数はローカル変数と言い、プロシージャの終了と同時に破棄されます。
つまりメモリ上に確保していたMyStrの領域が破棄され解放されます。
この変数は実にたくさん種類があるのですが、最初のうちは次の4つを覚えておけばいいでしょう。
Boolean
ブール型といいます。TrueとFalseの2種類の値しか持てません。フラグなどに使用します。
Long
長整数型です。-2147483648〜2147483647の範囲の整数値を格納できます。小数を除く数値ならとりあえずLongにしておけばいいでしょう。
Double
倍精度浮動小数点型。小数値を扱うならとりあえずこれにしておけばオッケーです。
String
文字列型。可変長と固定長とありますが、最初は気にしなくて大丈夫。文字を使うならこれにしてください。
※ 可変長文字列型、固定長文字列型、データ型の定義の詳細はこちらを参照ください。
  データ定義型をもっと知ろう

さて、上記プロシージャの3行目、InputBox というのがありますね。これはそのまま画面上に入力用のインプットボックスを表示させる関数です。
ボタンが2つありキャンセルというのがありますね。
押してみてください。
"Hello!"とだけ表示されたと思います。これはキャンセルをクリックしたときMyStrに長さ0の空文字列がはいっているからです。
ですのでMsgBox関数によるメッセージ表示は当然"Hello!"になります。
キャンセルを押したのにメッセージが表示されてしまう、これは変ですよね。プログラムを少しいじってみましょう。

Public Sub test()
Dim MyStr As String
  MyStr = InputBox("あなたの名前は?")
  If MyStr <> "" Then
    MsgBox "Hello" & MyStr & "!"
  End If
End Sub

これでMyStrが空文字のときはメッセージが表示されなくなりました。If はワークシート関数でもおなじみですがVBAの文法は少し違います。
If 条件 Then
 条件が真のケース
Else
 条件が偽のケース
End If
このような文法になります。MyStr <> "" はMyStrが空文字でないという意味になります。
ですのでMyStrになにか文字列が入ったときだけMsgBoxが実行され、それ以外の場合は何も実行されません。
※ 条件分岐についての詳細な解説はこちらを参照ください
  いろいろな条件分岐

ところで<>の記号はいったい何でしょう?これは比較演算子と言います。
= 左辺と右辺が等しいときに真
<>  左辺と右辺が等しくないときに真
< 左辺が右辺より小さいときに真(<= 左辺が右辺以下のときに真)
> 左辺が右辺より大きいときに真(>= 左辺が右辺以上のときに真)

こんな感じです。
ちなみに「&」は連結演算子といって文字列の連結に使用します。
3行目の「=」は代入演算子で右辺を左辺に代入します。
(比較演算子と同じ記号ですが意味が異なるので注意)
※ 演算子についての詳細な解説はこちらを参照ください
  演算子について詳しく知ろう

せっかくExcelVBAを学んでいるのに、ワークシートを使用しないのはつまらないですよね。
さきほどのInputBoxとMsgBoxの部分をシートから読み取るように変更してみましょう。

Public Sub test()
Dim MyStr As String
  MyStr = Range("A1")
  If MyStr <> "" Then
    Range("B1") = "Hello" & MyStr & "!"
  End If
End Sub

セルA1にあなたの名前を入れて実行してみてください。セルB1に"Helloあなたの名前!"が表示されましたか?

ワークシート上のデータはRangeオブジェクトで取得できます。
ずいぶん簡単でしょう?それもそのはず、実はこの書き方はずいぶん省略した書き方なんです。
正確には
Application.Workbooks("test.xls").Worksheets("sheet1").Range("A1").Value
と書きます。
Application.Workbooks("test.xls").Worksheets("sheet1"). この部分を省略した場合は現在開いているブックのActiveなシートを対象にします。今回の場合はつまりtest.xlsブックのSheet1ワークシートですね。
.value これはRangeオブジェクトのデフォルトプロパティです。ここを省略するとvalueプロパティをさしているとみなされます。
ですのでただ Range("A1") と書いても問題なく動作するのです。
しばらくはこのやり方でシート上のデータにアクセスしていきます。
 
 
 
ここでひとつぜひ覚えておいてほしいことがあります。それは、
プログラムの基本はデータの入出力
ということです。どんな複雑なプログラムも基本はデータの出し入れです。麻雀ゲームだってそうです。
データをプログラムに引っ張り込んで(入力)加工して元の場所もしくは別の場所に書き込む(出力)。
これがプログラムの全てです。
入出力する先がデータベースサーバならいわゆるクライアントサーバシステムと呼ばれるものになりますし、スタンドアロンのシステムでは自前でデータ管理をしているだけのことです。
規模の大小は別にしても、やっている内容はそんなに変わりません。
あなたがプログラミングの達人になりたいならば、このデータの入出力について様々な手法をマスターすればいいのです。
何も難しいことはありませんよ、安心してください。

 

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

本を執筆しました
ストーリーで学ぶ Excel VBAと
業務改善のポイントがわかる本

Webでは書ききれなかった技術的
解説や描き下ろしイラスト満載
初版限定公式模擬問プレゼント
 

VBAエキスパート公式サイトにて、
連載コラムを執筆しています
毎月10日更新、「やってみよう!
Excel/Access VBAで業務改善

 

本を執筆しました
VBAエキスパート公式テキスト
Access VBA ベーシック
Access VBA スタンダード
VBAエキスパート新試験の
合格を目指す方は必読です
 

本を執筆しました
Excel VBA ゲーム作成入門
Excel VBAの究極テクニックを
惜しげもなく大公開!


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,