1.変数の宣言

  • Public変数はモジュールの一番上(宣言部)でプロシージャの前に定義します。
        Public PopupResult As Boolean          'Public=Global変数   
        Public Const abc As Integer = 10     '定数
        Const def As Integer = 10
        Const ghi As Integer = abc + def + 1   '定数はこのように式でも定義できます。
    

2.データ型

データ型説明型宣言文字データ範囲Byte数データ型変換関数
Byteバイト型0~2551CByte()
Booleanブール型TrueまたはFalse2CBool()
Integer整数型%-32,768~32,767。 ワークシートの最大行より小さいので注意→Long型2CInt()
Long長整数型&-2,147,483,648 ~ 2,147,483,6474CLng()
Single単精度浮動小数点型!-3.402823E38~-1.401298E-45(負の値)4CSng()
1.401298E-45~3.402823E38(正の値)
Double倍精度浮動小数点型#-1.79769313486232E308~-4.94065645841247E-324(負の値)8CDbl()
4.94065645841247E-324~1.79769313486232E308(正の値)
Date日付型西暦1900年1月1日~西暦9999年12月31日8CDate()
String固定長文字列型$0~約64KB1L+2LCStr()
可変長文字列型0~2GB10+L
Variantバリアント型数値(Double)16CVar()
文字列(可変長文字列)22+L
Objectオブジェクト型オブジェクトを参照する4
Decimal10進14CDec()

3.配列変数

  1. ) 配列変数の宣言
    配列の開始の添字が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 
    
  2. ) 動的配列の操作
    動的配列の場合は、以下のように使用する前にサイズを指定します。
        Erase b                      '静的配列の場合値が初期化されます。 
                                        '動的配列の場合メモリーを開放します。 
        ReDim b(b_size)               '以前のデータを消去する場合 
        ReDim Preserve b(b_size)        '以前のデータを保持する場合 
    
    
  3. ) プロシージャのパラメータ宣言
    配列をプロシージャで受け取る場合は、パラメータの宣言で'()'を付けます。
       :
        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変数

  1. ) 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"};
  1. ) 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. ) ユーザー定義型の配列場合
    ユーザー定義型の配列や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
    
  3. ) 配列へのワークシートのデータの格納・書出し
    ワークシートのデータを配列へ一度に格納したり、書出したりできます。 次は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
    

最終更新のRSS
Last-modified: 2014-03-11 (火) 01:58:42 (1414d)