Excel VBA スタンダード・変数と配列について

ExcelVBAの変数と配列は、データを格納するための方法ですが、その使い方や保持するデータのタイプに違いがあります。

Excel VBA 変数と配列の違い

変数とは

変数は単一の値を格納するための箱です。整数、文字列、真偽値など、どれか1つのデータを保持します。

変数は明示的に宣言、1つのデータを保持して必要に応じて変数の値を変更できます。

Dim myVar As Integer
myVar = 5

myVarという変数が1つの整数値 5 を保持しています。

 

配列

配列は複数のデータを一度に格納する仕組みです。同じ種類の複数のデータを1つの変数で管理できます。

配列内の個々のデータはインデックス(位置)を使用してアクセスします。複数の値を持ち、それぞれが異なるインデックスを持ちます。

Dim myArray(4) As Integer
myArray(0) = 10
myArray(1) = 20
myArray(2) = 30
myArray(3) = 40
myArray(4) = 50

配列の宣言は、変数名に続けて括弧を使用します。

myArrayという配列が5つの整数値を保持しています。それぞれの値はインデックスを使ってアクセスでき、0から始まる連続した数値で識別します。

 

Excel VBA Split関数で配列を作成

Split関数

文字列を指定された区切り文字で分割し、それらの部分文字列を要素とする配列に分割します。

主な目的は、与えられた文字列を指定された区切り文字で分割して、その部分文字列を扱いやすい形で取得することです。

Sub SplitExample()
    Dim originalString As String
    originalString = "Apple,Orange,Banana,Grapes"
    
    Dim fruits() As String
    fruits = Split(originalString, ",") ' カンマを区切り文字として分割
    
    ' 分割された要素をループで表示する例
    Dim i As Integer
    For i = LBound(fruits) To UBound(fruits)
        MsgBox "フルーツ" & i & ": " & fruits(i)
    Next i
End Sub

originalStringという文字列をカンマで区切って配列に分割しています。

Split関数はカンマを区切り文字として使用しているため、

fruits配列に、"Apple"、"Orange"、"Banana"、"Grapes"の4つの要素が格納されます。

その後、ループを使用して配列の要素を表示します。

LBound(fruits)は配列の下限値、UBound(fruits)は配列の下限値で、この例では0から3になります。

 

Excel VBA 動的配列のReDim

動的配列のReDim

ReDimステートメントは、実行時に配列のサイズを変更するVBAステートメントです。

実行時に配列のサイズを調整したり、動的に要素を追加できます。

Sub ReDimExample()
    Dim dynamicArray() As Integer ' 動的配列
    
    ReDim dynamicArray(2) ' 配列のサイズを3に設定
    
    ' 要素に値を代入する例
    dynamicArray(0) = 10
    dynamicArray(1) = 20
    dynamicArray(2) = 30
    
    ' 配列のサイズを変更して要素を追加する例
    ReDim Preserve dynamicArray(3) ' 配列のサイズを4に変更
    dynamicArray(3) = 40 ' 新しい要素を追加
    
    ' 配列の要素をループで表示する例
    Dim i As Integer
    For i = LBound(dynamicArray) To UBound(dynamicArray)
        MsgBox "要素" & i & ": " & dynamicArray(i)
    Next i
End Sub

dynamicArrayという動的配列を宣言し、ReDimステートメントを使って最初のサイズを3に設定しています。

その後、ReDim Preserveを使って配列のサイズを変更し、新しい要素を追加しています。

最後に、ループを使用して配列の要素を表示しています。

Preserveを使用することで、既存の要素を保持しつつ配列のサイズを変更できます。

 

注意点

ReDim Preserveステートメントは、動的配列のサイズを変更する際に、既存のデータを保持しつつ配列のサイズを変更するVBAステートメントです。ReDim Preserveでなく、ReDim だけの場合は、既存のデータを失います。

 

Excel VBA オブジェクト変数

オブジェクト変数

オブジェクト(Range、Worksheet、Workbookなど)を操作するために、オブジェクトを変数として宣言します。

特定のシートやセルのデータを処理したり、ワークブック全体を操作したりする手段となります。

Dim 変数名 As オブジェクト型

※オブジェクト型は、 宣言するオブジェクトの種類で、たとえば、Range、Worksheet、Workbookなどです。

Sub ObjectVariablesExample()
    Dim ws As Worksheet ' Worksheetオブジェクトの変数を宣言
    
    ' Worksheetオブジェクトを変数に代入
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' 変数を使用してセルに値を代入
    ws.Range("A1").Value = "Hello, World!"
    
    ' 変数を使用してセルの値を取得し、メッセージボックスで表示
    MsgBox "A1セルの値は " & ws.Range("A1").Value & " です。"
End Sub

Worksheetオブジェクトの変数 ws を宣言し、Setステートメントを使用して変数にWorksheetオブジェクトを代入しています。

その後、変数 ws を使ってシート上のセルに値を代入し、その値を取得してメッセージボックスで表示しています。オブジェクト変数を使用することで、Excelのシートやセルなどの要素を効果的に操作できます。

 

オブジェクト変数の破棄に使うNothing

Nothingは、VBAでオブジェクト変数を解放するために使用します。

変数が参照しているオブジェクトとの関連が解除され、メモリから解放します。

Set オブジェクト変数 = Nothing

Sub ReleaseObjectVariableExample()
    Dim ws As Worksheet ' Worksheetオブジェクトの変数を宣言
    
    ' Worksheetオブジェクトを変数に代入
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' オブジェクトを使用して何か処理する...
    
    ' オブジェクト変数を解放(Nothingに設定)
    Set ws = Nothing
    
    ' wsが参照していたオブジェクトは解放され、この後のws使用はエラーになります
End Sub

Worksheetオブジェクトの変数 ws を宣言し、オブジェクトを代入して処理を行った後、 Set ws = Nothing を使って変数 ws が参照していたオブジェクトを解放しています。

Nothingに設定された変数は、それ以上何かを参照せず、この後にその変数を使用するとエラーが発生する可能性があります。

オブジェクトの不要なメモリを解放するために、オブジェクト変数を使用した後は適切なタイミングでNothingに設定することが重要です。

 

Excel VBA 変数の演算

Sub CountExample()
    Dim countVariable As Integer ' カウントするための変数を宣言し、0で初期化する
    countVariable = 0 ' 初期化
    
    Dim i As Integer
    For i = 1 To 10 ' ループを使用して1から10までカウント
        countVariable = countVariable + 1 ' カウント変数を1つ増やす
    Next i
    
    MsgBox "カウントされた数は " & countVariable & " です。"
End Sub

countVariableという変数を宣言し、初期値を0に設定しています。

その後、Forループを使用して1から10までの範囲をカウントしています。

ループ内でcountVariableを1ずつ増やし、最終的なカウントされた数をメッセージボックスで表示しています。

こうした操作で変数を使ってカウントできます。

 

Excel VBA 変数の初期値

変数の初期値

変数の初期値は、変数が使用される前に設定される値です。初期値の設定は、変数の動作やコードの読みやすさを向上させるために重要です。

 

注意点

初期値の設定は任意ですが、特に数値や文字列の変数を使用する場合は初期化が推奨されます。初期値を設定することで、変数が意図せず未初期化のまま使用されるリスクを軽減できます。

変数の初期値は、データ型に合わせた適切な値を設定します。数値型の場合は0や1、文字列型の場合は空文字列 `""` を使用することが一般的です。

 

Sub InitialValueExample()
    Dim numberVariable As Integer ' 整数型の変数、初期値は0
    Dim textVariable As String ' 文字列型の変数、初期値は空文字列
    
    ' 初期値を使用して変数を操作
    numberVariable = 10
    textVariable = "Hello, World!"
    
    ' 変数の値を表示
    MsgBox "数値変数の値: " & numberVariable & vbCrLf & "文字列変数の値: " & textVariable
End Sub

numberVariableとtextVariableという変数を宣言し、数値型の変数には0、文字列型の変数には空文字列 `""` を初期値として設定しています。

その後、それぞれの変数に値を代入し、その値をメッセージボックスで表示しています。

初期値の設定は変数の使用方法や読みやすさを向上させます。

 

Excel VBA 文字列の結合

文字列の結合

文字列結合は、複数の文字列を一つにまとめる操作です。VBAでは、`&`演算子や`+`演算子を使って文字列を結合できますが、一般的に`&`演算子を使うことが推奨されています。

Sub StringConcatenationExample()
    Dim firstName As String
    Dim lastName As String
    Dim fullName As String
    
    firstName = "John"
    lastName = "Doe"
    
    ' & 演算子を使用した文字列結合
    fullName = firstName & " " & lastName ' スペースを追加してフルネームを作成
    
    ' メッセージボックスで結合された文字列を表示
    MsgBox "フルネームは: " & fullName
End Sub

firstNameとlastNameという文字列変数を宣言し、それぞれに値を設定しています。そして & 演算子を使用して、スペースを追加してfirstNameとlastNameを結合し、fullNameという新しい文字列変数に格納しています。

最後にメッセージボックスでfullNameを表示しています。文字列結合は、特に複数の文字列を一つにまとめる際に非常に役立ちます。

Excel VBAのスキルを活かして、開発者としてのキャリアを築いてみませんか?

当サイトでは、Excel VBAエキスパート認定資格取得に向けた情報を提供しています。興味がある方は、ぜひ以下の問題集からチャレンジしてみてください。

 

ExcelVBAエキスパートベーシック
仕事の効率をあげるためにExcelVBAを利用する人が対象の問題集です。


ExcelVBAエキスパートスタンダード

ExcelVBAの開発を仕事にする人が対象の問題集です。