GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBA中級編−VBAでいろんなテクニック
  データ型についてもっと理解しよう!
 
■ データ型を詳しく学ぼう

以前、初級編で、
「データ型は、Boolean,Long,Double,Stringの4つを覚えておけばとりあえず十分です」
と解説しました。

確かにこの4つでほとんどの場合、間に合ってしまうのですが…。やはり、高度な業務システムを開発していくためには、他のデータ型も知っておいたほうがよいでしょう。

様々なデータ型

Excel VBAで扱えるデータ型は実に様々です。データ型によって扱えるデータの種類や範囲、初期値や使用するメモリ領域が異なります。

適切なデータ型を指定してやることが、プログラムのパフォーマンスを高め、処理の高速化につながります。
データ型 サイズ 範 囲 初期値 型宣言文字
バイト型(Byte) 1byte(8bit) 0〜255(正の整数値) 0  
ブール型(Boolean) 2byte(16bit) 真 (True)は-1、偽 (False)は0 0(False)  
整数型(Integer) 2byte(16bit) -32,768 〜 32,767(正/負の整数値) 0 %
長整数型 (Long) 4byte(32bit) -2,147,483,648 〜 2,147,483,647
(正/負の整数値)
0 &
単精度浮動小数点数型 (Single) 4byte(32bit) -3.402823E38 〜 -1.401298E-45 (負の値) 1.401298E-45 〜 3.402823E38 (正の値) 0 !
倍精度浮動小数点数型 (Double) 8byte(64bit) -1.79769313486232E308 〜 
-4.94065645841247E-324 (負の値) 4.94065645841247E-324 〜 1.79769313486232E308 (正の値)
0 #
通貨型 (Currency) 8byte(64bit) -922,337,203,685,477.5808 〜 922,337,203,685,477.5807 0 @
日付型 (Date) 8byte(64bit) 西暦100年1月1日0:00:00 〜 
西暦9999年12月31日23:59:59
#1899/12/30 00:00:00#  
オブジェクト型 (Object) 4byte(32bit) オブジェクトを参照するアドレス Nothing  
可変長文字列型 (String) 10byte + 
文字列の長さ x 2byte
最大約2GB vbNullString $
固定長文字列型 (String * n) 文字列の長さ x 2byte 最大約63KB String$(n, vbNullChar) $
バリアント型 (Variant) 16byte(128bit) 〜 条件による 条件による Empty  

※10進型(Decimal)はCDec関数を使用してVariant型による値の取得のみが可能で、10進型変数の宣言はできません。
※変数を宣言なしで使用したり、変数の宣言をしても明示的に型を指定しなかった場合は全てVariant型に定義されます。

例:
Dim MyStr
Dim i, j, k As Long

変数MyStrは宣言されていますが、型指定されていないのでVariant型になります。変数i,j,kのうち、kはLong型になりますが、i,jはVariant型になります。

それでは、それぞれのデータ型をより詳しく見ていきましょう。

数値型

整数型 (Integer)、長整数型 (Long)、単精度浮動小数点数型 (Single)、倍精度浮動小数点数型 (Double)、通貨型 (Currency) のデータ型が数値型にあたります。

数値は整数(小数部なし)と実数(小数部あり)に分かれます。
整数は実数に比べて、使用するメモリ消費量も少なく演算速度も速いです。
32bitOSの場合、16bitのInteger型は内部で32bit変換されながらコードが実行されます。32bitのLong型はこのオーバーヘッドがない分、高速であるといわれています。

実数を扱う場合は、Single,Double型の浮動小数点数のデータ型を用いるか、Currency型の固定小数点数のデータ型を用います。固定小数点数は演算誤差が少なく、浮動小数点数に比べるとはるかに速く演算します。その分、表現できる値の範囲は狭くなります。

バイト型

バイナリーデータを変数に格納する場合に使用します。その場合は、Byte型の要素をもつ配列として宣言します。
たとえば文字列をByte型配列に渡してやるとUnicodeで文字列情報を格納します。この情報をバイナリ出力でテキストファイルに出力してもUnicodeのままで出力されるため文字化けします。VBAにより、ファイルの入出力、DLLの呼び出し、オブジェクトのメソッドやプロパティの参照が行われた時に、自動的にShift-Jisへの変換が行われます。

文字列型

可変長文字列型。文字列型変数を宣言するときに特に指定をしない限り、可変長文字列型として定義されます。
可変長文字列では、格納する文字列の長さに応じてメモリ領域を確保していきます。
VBAでも文字列は基本的に文字型(Char型)の配列です。ただ配列であることを、
開発者側が意識する必要はありません。

固定長文字列型。文字列型変数を宣言するときに文字列のサイズを指定します。
例:Dim StrFileName As String * 20
この例では、長さ20文字の文字列型変数を宣言しています。
(確保される領域は文字数x2byteです。Unicodeで格納されるため、どんな文字でも必ず2byteになります)
このとき、代入される文字列が20文字を超える場合、超過した文字列右端部分が切り捨てられます。
20文字に満たない場合は、残りをスペースで補充します。
固定長文字列型変数の初期値は文字数分のvbNullCharが格納されていますが、一度でも文字列を代入すると全てスペースに置き換わります。

ブール型

変数に真(TRUE)か偽(FALSE)のいずれかを表す値を格納します。既定値は偽(FALSE)になります。

日付型

整数部が日付、小数部が時刻を示します。日付は1899年12月30日の00:00:00がゼロで、1日に1増加します。

例:
・0.00 = 1899/12/30 00:00:00
・1.00 = 1899/12/31 00:00:00
・2.50 = 1900/01/01 12:00:00

オブジェクト型

アプリケーション内や他のアプリケーションのオブジェクトに対する参照が格納されます。Object型で宣言した変数を利用するには、Setステートメントを用いて、オブジェクトへの参照を代入する必要があります。

オブジェクト変数は、総称オブジェクト型ではなく固有オブジェクト型で宣言すべきです。
固有オブジェクト型を指定するとコードの実行前にVBAがオブジェクトへの参照を解決します(事前バインディング)。
総称オブジェクト型を使用した場合、コードの実行時にはじめてオブジェクトへの参照が解釈されるため、オーバーヘッドが発生し実行速度が落ちます(実行時バインディング)。

例:事前バインディング
Dim MyObj As Word.Application
Set MyObj = New Word.Application

例:実行時バインディング(遅延バインディング)
Dim MyObj As Object
Set MyObj = CreateObject("Access.Application")

※こちらのページでも事前バインディング、実行時バインディングの詳しい説明があります。
 ActiveXオートメーション(OLEオートメーション)を利用しよう!



バリアント型

すべての基本データ型を格納できます。Variant型で宣言された変数に各種データ型の値を代入するときは、型の変換を行わなくても、自動的に必要な変換が行われます。またVariant型には、Empty、Null、Error といった3つの特殊な値を格納することができます。

・Empty Variant型変数の既定値で一度も値が代入されていないことを表します。
・Null 変数やフィールドに有効なデータが格納されていないことを表します。
・Error エラー番号を持つデータ型です。

最後に、バリアント型とは関係ないですが、よく似た言葉で混同しないように以下の説明を追記しておきます。

・vbNullString 可変長文字列で初期化されていない文字列を表します。StrPtr関数は0を返します。
・vbNullChar 固定長文字列の初期値でキャラクターコード0(&H0000)のNull文字を表す定数です。
・"" 長さ0の文字列で空文字列を表します。StrPtr関数は0を返しません。
・vbNull VarType関数の戻り値として使われる定数で長整数型の1を表します。
・Nothing Object型の変数が特定のオブジェクトと関係付けられていないことを表します。

以上、変数のデータ型について解説しました。
他言語では、厳密に定義されるデータの型指定も、VBAでは比較的柔軟に取り扱うことができます。
このあたりはVBAの長所なのですが、だからといって詳しく知らなくてもよいということにはなりません。

例えば、当たり前のように使っているString型も、内部的には結構面倒なことをやっています。String型そのものが無く、クラスで定義しなければならない言語だって存在します。

このあたりの構造を知ることで、より深いVBAの理解につながればと思います。
 

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

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

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel 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
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

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

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




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

Copyright© Gen Muto 武藤 玄 All Rights Reserved,