【エクセルVBA】乱数生成と配列操作
エクセルVBAにて 乱数生成と配列の操作 について解説します
乱数を生成
Rnd
関数は
0以上1未満のランダムなSingle型の値を返します
Randomize
ステートメントと組み合わせて使うことで、毎回異なる乱数を生成できます
Randomize ' 乱数ジェネレータを初期化
Dim randomNumber As Single
randomNumber = Rnd ' 0以上1未満の乱数を生成
MsgBox "生成された乱数: " & randomNumber
乱数ジェネレータのシード値を設定
Randomize
ステートメントは
乱数ジェネレータのシード値を設定します
シード値にはTimer
関数を使うことが多く
プログラムの実行ごとに異なる乱数シーケンスが得られます
Randomize Timer ' 現在時刻をシード値として使用
配列を作成
Array
関数は
引数に指定した値から配列を作成します
作成された配列はVariant型であり、異なるデータ型の値を含むことができます
Dim myArray As Variant
myArray = Array("Apple", "Banana", "Cherry")
MsgBox "配列の第1要素: " & myArray(0)
配列の最大インデックスを返す
UBound
関数は
指定された配列の最大インデックス(要素数-1)を返します
配列のサイズを知ることができるため、配列をループ処理する際に有用です
Dim myArray As Variant
myArray = Array("Apple", "Banana", "Cherry")
MsgBox "配列の最大インデックス: " & UBound(myArray)
配列の最小インデックスを返す
LBound
関数は
指定された配列の最小インデックスを返します
VBAでは配列のインデックスが通常0から始まるため
この関数の戻り値はほとんどの場合0ですが
Option Base 1
を使用している場合や
動的配列を特定のインデックスから始めた場合に便利です
Dim myArray As Variant
myArray = Array("Apple", "Banana", "Cherry")
MsgBox "配列の最小インデックス: " & LBound(myArray)
配列のサイズを変更
ReDim
ステートメントは
動的配列のサイズを変更します
Preserve
キーワードを使うことで
既存の配列データを保持したままサイズ変更が可能です
Dim myArray() As Integer
ReDim myArray(5)
ReDim Preserve myArray(10) ' Preserveキーワードで元のデータを保持しつつサイズ変更
MsgBox "配列の新しいサイズ: " & UBound(myArray) + 1
文字列を区切り文字で分割して配列に格納
Split
関数は
第一引数に指定された文字列を第二引数に指定された区切り文字で分割し
結果を配列として返します
文字列データを配列に変換する際に役立ちます
Dim myArray() As String
myArray = Split("Apple,Banana,Cherry", ",")
MsgBox "配列の第2要素: " & myArray(1)
配列の要素を結合して文字列にする
Join
関数は
配列の要素を指定された区切り文字で結合し、1つの文字列として返します
配列のデータを文字列で表現したい場合に使用されます
Dim myArray As Variant
myArray = Array("Apple", "Banana", "Cherry")
Dim myString As String
myString = Join(myArray, ", ")
MsgBox "結合された文字列: " & myString
配列かどうかを判定
IsArray
関数は
指定された式が配列であるかどうかを判定します
変数の型を確認する際に役立ちます
Dim myArray As Variant
myArray = Array("Apple", "Banana", "Cherry")
If IsArray(myArray) Then
MsgBox "変数は配列です。"
Else
MsgBox "変数は配列ではありません。"
End If
要素を初期化
Erase
ステートメントは
指定された配列の要素を全て初期化します
動的配列の場合、サイズも0になります
配列をリセットしたい時に使用します
Dim myArray() As Integer
ReDim myArray(5)
Erase myArray ' 配列の要素を全て初期化