1.変数の宣言 †
2.データ型 †
データ型 | 説明 | 型宣言文字 | データ範囲 | Byte数 | データ型変換関数 | Byte | バイト型 | | 0~255 | 1 | CByte() | Boolean | ブール型 | | TrueまたはFalse | 2 | CBool() | Integer | 整数型 | % | -32,768~32,767。 ワークシートの最大行より小さいので注意→Long型 | 2 | CInt() | Long | 長整数型 | & | -2,147,483,648 ~ 2,147,483,647 | 4 | CLng() | Single | 単精度浮動小数点型 | ! | -3.402823E38~-1.401298E-45(負の値) | 4 | CSng() | | | | 1.401298E-45~3.402823E38(正の値) | | | Double | 倍精度浮動小数点型 | # | -1.79769313486232E308~-4.94065645841247E-324(負の値) | 8 | CDbl() | | | | 4.94065645841247E-324~1.79769313486232E308(正の値) | | | Date | 日付型 | | 西暦1900年1月1日~西暦9999年12月31日 | 8 | CDate() | String | 固定長文字列型 | $ | 0~約64KB | 1L+2L | CStr() | | 可変長文字列型 | | 0~2GB | 10+L | | Variant | バリアント型 | | 数値(Double) | 16 | CVar() | | | | 文字列(可変長文字列) | 22+L | | Object | オブジェクト型 | | オブジェクトを参照する | 4 | | Decimal | 10進 | | | 14 | CDec() |
3.配列変数 †
- ) 配列変数の宣言
配列の開始の添字が0か1かを各モジュール、オブジェクトのはじめに宣言しておきます。
但し、後述のsplit関数の例のようにBase 1としても強制的に0からデータは格納される場合があるので注意して下さい。
Option Base 1 '1から始める場合
配列変数の宣言
Dim a(10) As String 'サイズ(最大添字)を指定する場合
'Option Base 0 の場合 添字の範囲が0から10
'Option Base 1 の場合 添字の範囲が1から10
Dim b() As String '動的配列。サイズを指定しない場合
Dim c(0 to 3) As Integer '添字の範囲を指定する場合
'Option Base 0 の場合でも添字の範囲が0から3
Dim d(5 to 8) As Integer '添字の範囲が5から8
- ) 動的配列の操作
動的配列の場合は、以下のように使用する前にサイズを指定します。
Erase b '静的配列の場合値が初期化されます。
'動的配列の場合メモリーを開放します。
ReDim b(b_size) '以前のデータを消去する場合
ReDim Preserve b(b_size) '以前のデータを保持する場合
- ) プロシージャのパラメータ宣言
配列をプロシージャで受け取る場合は、パラメータの宣言で'()'を付けます。
:
example201 b
:
Sub example201( d() As String )
Dim i As Integer
For i = 1 To UBound(d)
MsgBox d(i)
Next i
End Sub
4.Class変数 †
- ) Class変数の宣言
Dim alp As ArrayList 'Classの参照変数
Dim al As New ArrayList 'Classの実体を作成する場合
- Classの変数をClassの参照変数として宣言した場合は、後で以下のように実体を作成します。
alp = New ArrayList
5.Type(ユーザー定義型) †
Typeステートメントで複数のメンバー(要素)を持つユーザー定義のデータ型 (ユーザー定義型) を宣言します。C言語などの構造体に相当します。
Typeの宣言は標準モジュールの一番上(宣言部)で宣言します。Sheet内などオブジェクト内では宣言できません。
プロシージャへの引数としてユーザー定義型そのものを引数にする場合は値渡しができません。必ず参照渡しとなります。
Public Type Address
Number As Integer
ZipCode As String
LastName As String
FirstName As String
Ken As String
Shi As String
End Type
Public addBook() As Address
6.配列へのデータ格納方法 †
Excelでは次のC言語のように配列にデータをまとめて格納することが出来ません。
char a[3][2] ={"A","B","C"};
- ) Array関数の利用
一元配列の場合Array関数を使用してバリアント型の変数に配列としてデータを格納できます。
Sub example202( )
Dim a As Variant
Dim i As Integer
a = Array("A", "B", "C", "D")
For i = 1 To UBound(a) 'Option Base 1の場合
MsgBox a(i)
Next i
End Sub
注意:ここでaはバリアント型の配列ではなく、配列を値として持つバリアント型の変数です。
- ) ユーザー定義型の配列場合
ユーザー定義型の配列や2次元以上の配列の場合、データを以下のように1つの文字列としてデータを格納し、それをsplit関数で分解し、ユーザー定義型の配列変数にデータを一つ一つ代入します。
次は前述のユーザー定義型変数Addressを使用した場合です。このようなプロシージャを処理のはじめの方で1回呼び出し、何回も呼び出さないようにします。
Sub Address_Set( )
Dim data As Variant
Dim i As Integer
Dim k As Integer
'Number ZipCode LastName FirstName Ken Shi
Const addBook_str As String = _
"1 ,060-8588, 山田, 一郎, 北海道,札幌," & _ '← 最後のコンマ ',' を忘れないこと
"2 ,030-8570, 山田, 二郎, 青森, 青森," & _
"3 ,020-8570, 鈴木, 三郎, 岩手, 盛岡," & _
"4 ,010-8570, 山田, 四郎, 秋田, 秋田," & _
"5 ,980-8570, 鈴木, 五郎, 宮城, 仙台," & _
"6 ,990-8570, 鈴木, 六郎, 山形, 山形," & _
"7 ,990-8570, 山田, 七郎, 山形, 山形," & _
"8 ,990-8570, 山田, 八郎, 山形, 山形," & _
"9 ,960-8670, 鈴木, 九郎, 福島, 福島," & _
"10 ,960-8670, 鈴木, 十郎, 福島, 福島," & _
"11 ,950-8570, 山田, 士郎, 新潟, 新潟," & _
"12 ,950-8570, 山田, 王郎, 新潟, 新潟," & _
"13 ,320-8501, 鈴木, 圭郎, 栃木,宇都宮," & _
"14 ,320-8501, 山田, 田郎, 栃木,宇都宮" '← 最終行にはコンマ ',' がありません
data = Split(addBook_str, ",")
ReDim addBook(CInt((UBound(data) + 1) / 6)) ' <= 6 はユーザー定義型の要素の数
k = 0 '<= Option Base 1の場合でもsplitによりdata(0)からデータが格納される
For i = 1 To UBound(addBook) ' <= addBookはPublic変数です。
addBook(i).number = CInt(data(k)): k = k + 1
addBook(i).ZipCode = Trim(data(k)): k = k + 1
addBook(i).LastName = Trim(data(k)): k = k + 1
addBook(i).FirstName = Trim(data(k)): k = k + 1
addBook(i).Ken = Trim(data(k)): k = k + 1
addBook(i).Shi = Trim(data(k)): k = k + 1
Next i
End Sub
以下は配列の内容をワークシートに書出すプロシージャです。データベースとして利用するため、最初の行に各列のタイトル(Field名)を書いています。
Sub example203(sht As Worksheet)
Dim i As Integer
sht.Cells(1, 1) = "番号"
sht.Cells(1, 2) = "郵便番号"
sht.Cells(1, 3) = "苗字"
sht.Cells(1, 4) = "名前"
sht.Cells(1, 5) = "県"
sht.Cells(1, 6) = "市"
For i = 1 To UBound(addBook)
sht.Cells(i + 1, 1) = addBook(i).Number
sht.Cells(i + 1, 2) = addBook(i).ZipCode
sht.Cells(i + 1, 3) = addBook(i).LastName
sht.Cells(i + 1, 4) = addBook(i).FirstName
sht.Cells(i + 1, 5) = addBook(i).Ken
sht.Cells(i + 1, 6) = addBook(i).Shi
Next i
End Sub
- ) 配列へのワークシートのデータの格納・書出し
ワークシートのデータを配列へ一度に格納したり、書出したりできます。
次はA列の値にプラス1してB列に書出す例です。
Sub example204( )
Dim a As Variant
Dim i As Integer
a = Range("A1:A10").Value
For i = 1 To UBound(a)
a(i, 1) = a(i, 1) + 1
Next i
Range("B1:B10").Value = a
End Sub
 Last-modified: 2014-03-11 (火) 01:58:42 (3559d)
|