excel vba array array methods with examples
このチュートリアルでは、プログラミング例を使用して、VBA配列、さまざまな配列タイプ、バリアント配列、および配列メソッドについて説明します。
通常のVBA変数は、単一のデータの値を格納するプレースホルダーです。これには1対1の関係があります。つまり、1つの値に対して1つの変数があります。
ここで、同じタイプの複数の値を格納することを想像してください。複数の変数を作成する代わりに、1つの変数を作成して、すべて同じタイプの値を格納できます。この変数はARRAYと呼ばれます。
=> すべてのVBAトレーニングシリーズを表示するには、こちらにアクセスしてください
アンドロイドのための最高のモバイルスパイソフトウェア
このチュートリアルでは、VBA配列、1次元、および2次元配列と、FixedやDynamicなどのさまざまなタイプの配列について理解します。また、VBAで使用されるさまざまな配列メソッドについても理解します。
学習内容:
VBAアレイ
配列は、同じデータ型の複数の値を格納できる特殊な種類の変数です。
例えば、 100人の従業員の名前がある場合、データ型stringの変数を100個作成する代わりに、string型の配列変数を1つ作成して、同じ配列変数に100個の値を割り当てることができます。
一次元配列
すべての要素が単一の行または単一の列にある配列は、1次元配列と呼ばれます。クラス内のすべての生徒の名前を1つの列にリストすることは、1次元配列の例です。以下のように宣言します。
Dim arrayname(lowerboundからUpperBound)As DataType
配列を宣言する方法は複数あります。以下にいくつかの例を示します。
例:
#1)Dim MyArrayExample(0 To 3)As Integer
整数値を受け入れる位置0、1、2、3の配列を作成します。
#2)Dim MyArray2(3)As String
デフォルトは0から3で、文字列値を受け入れる位置0,1,2,3の配列を作成します。
#3)Dim MyArray2(13 to 15)As Double
13、つまり13、14、および15から始まる配列を作成し、Double値を受け入れます。下限を13と述べたので、配列は0ではなく13の位置から値の割り当てを開始します。
簡単なコードを作成して、配列宣言の3つの方法すべてを理解しましょう。
注意: VBコードを作成するにはMicrosoftExcelを開きます(サポートされているバージョンはExcel 2007、2010、2013、2016、2019です)。案内する (開発者)タブ-> Visual Basic (または、ショートカットAlt + F11を使用します)。 VBエディターで、をクリックします 挿入->モジュール 以下のコードを貼り付けます。
さまざまなタイプの宣言を示す以下の手順を検討してください。
Private Sub arrayExample1() Dim firstQuarter(0 To 2) As String ‘creates array with index 0,1,2 firstQuarter(0) = 'Jan' firstQuarter(1) = 'Feb' firstQuarter(2) = 'Mar' MsgBox 'First Quarter in calendar ' & ' ' & firstQuarter(0) & ' ' & firstQuarter(1) & ' ' & firstQuarter(2) End Sub Private Sub arrayExample2() Dim secondQuarter(2) As String ‘creates array with index 0,1,2 secondQuarter(0) = 'April' secondQuarter(1) = 'May' secondQuarter(2) = 'June' MsgBox 'Second Quarter in calendar ' & ' ' & secondQuarter(0) & ' ' & secondQuarter(1) & ' ' & secondQuarter(2) End Sub Private Sub arrayExample3() Dim thirdQuarter(13 To 15) As String ‘creates array with index 13,14,15 thirdQuarter(13) = 'July' thirdQuarter(14) = 'Aug' thirdQuarter(15) = 'Sep' MsgBox 'Third Quarter in calendar ' & ' ' & thirdQuarter(13) & ' ' & thirdQuarter(14) & ' ' & thirdQuarter(15) End Sub
F5キーを押すか、ツールバーの実行ボタンを押してコードを実行します。
通常の変数と配列変数
これで、1次元配列がどのように機能するかがわかりました。それでは、プログラミング言語で配列が非常に重要である理由を理解しましょう。
5人の従業員の給与を入力する必要があると想定します。通常の変数を使用してこれを実現するには、5つの変数を作成する必要があります。
Public Sub RegularVariable() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets('Sheet1') ' Declare variable for each student Dim Emp1 As String Dim Emp2 As String Dim Emp3 As String Dim Emp4 As String Dim Emp5 As String ' Read student marks from cell Emp1 = shet.Range('A' & 2).Value Emp2 = shet.Range('A' & 3).Value Emp3 = shet.Range('A' & 4).Value Emp4 = shet.Range('A' & 5).Value Emp5 = shet.Range('A' & 6).Value ' Print student marks Debug.Print 'Emp Name' Debug.Print Emp1 Debug.Print Emp2 Debug.Print Emp3 Debug.Print Emp4 Debug.Print Emp5 End Sub
次に、配列変数を使用して同じコードを作成しましょう。
Option Explicit Public Sub ArrayVarible() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets('Sheet1') Dim Employee(1 To 6) As String Dim i As Integer For i = 1 To 6 Employee(i) = shet.Range('A' & i).Value Debug.Print Employee(i) Next i End Sub
ここでは、すべての従業員名を格納する1つの配列変数を使用しました。さらに100人の従業員名を追加する必要がある場合、配列サイズを変更するだけで、新しい変数を作成する必要はありません。
これにより、コードの行数が減り、コードがわかりやすく読みやすくなります。
2次元配列
2次元配列には2つのインデックスがあります。最初のインデックスは行を表し、2番目のインデックスは列を表します。複数の行と列があり、通常は表形式で表されます。
2dim配列の宣言は次のとおりです。
Dim ArrayName(FirstIndex To LastIndex、FirstIndex To LastIndex)AsDataType。
3つの科目で得られた2人の学生のマークを保存する例を考えてみましょう。したがって、2行3列の2次元配列を作成します。
行1から行2、列1から列3の配列を開始します。
Sub Twodim() Dim totalMarks(1 To 2, 1 To 3) As Integer totalMarks(1, 1) = 23 totalMarks(2, 1) = 34 totalMarks(1, 2) = 33 totalMarks(2, 2) = 55 totalMarks(1, 3) = 45 totalMarks(2, 3) = 44 Msgbox “Total Marks in Row 2 and column 2 is “ &totalMarks(2,2) Msgbox “Total Marks in Row 1 and column 3 is “ &totalMarks(1,3) End Sub
F5キーを押すか、ツールバーの実行ボタンを押してコードを実行します。
行2と列2
行1と列3
固定配列
静的配列とも呼ばれる固定配列には、固定の下限と上限があり、このサイズは実行時に変更できません。配列のサイズは、括弧内の宣言時に指定されます。上記の例はすべて、宣言時にサイズについて説明したように、固定配列です。
固定配列は通常、配列のサイズがわかっている場合に使用されます。 例えば、 1週間の日数で、下限0と上限6の配列を作成し、そのサイズを変更しないようにすることができます。
動的配列
動的配列を使用すると、実行時に配列のサイズを変更できます。これらは、配列のサイズがわからない場合に役立ちます。大学入学時に、実際に何人の学生が入学できるかわからない場合があるため、設計時または宣言時にサイズを決定できないとします。
動的配列の宣言は、括弧が空の静的配列に似ています。
Dim Employee()As String
REDIM
サイズを変更したい場合は使用する必要があります REDIM 、下限は変更できないことに注意する必要があります。変更できるのは配列の上限のみです。
Sub dynamicArray() Dim dynArray() As String Dim curdate As Date curdate = Now ReDim dynArray(2) ‘ Redim will help to change the array size during runtime dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled after ' & curdate & ' are “ & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) End Sub
これで、実行時に配列のサイズを変更できることがわかりました。したがって、配列のuboundを増やす必要があるときはいつでも、ReDimステートメントを使用できます。もう一度配列サイズを増やして、新しい生徒名を追加してみましょう。
Sub RedimExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) ReDim dynArray(3) ‘ Redim will reinitialise the array and destroy the old values dynArray(3) = 'John' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) & ' , ' & dynArray(3) End Sub
結果には以前に追加された学生の名前が表示されず、null値が表示されることがわかります。これは、Redimステートメントが新しいサイズの新しい配列を作成し、古い値を破棄するためです。
ReDim Preserve
Represerveステートメントは、古い値を保持して配列のサイズを増やすことにより、ReDimの制限を克服するのに役立ちます。
ReDimPreserveを使用して上記のコードを書き直してみましょう。
Sub preserveExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) ReDim preserve dynArray(3) ‘ Redim preserve will retain the old values dynArray(3) = 'John' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) & ' , ' & dynArray(3) End Sub
保持キーワードを使用したため、以前に入力した値が失われることはなく、新しい値が正常に追加されます。
バリアント配列
これまで、同じタイプの値を受け入れる配列を見てきました。次に、配列をバリアントとして宣言し、String、Date、Long、Integerなどのさまざまなタイプのデータを単一の配列に格納しましょう。
例:
Sub arrayVariant() Dim arrayData(3) As Variant arrayData(0) = 'Vikram Vikrant' arrayData(1) = 411234567890# arrayData(2) = 38 arrayData(3) = '06-09-1972' MsgBox 'Details of person ' & arrayData(0) & ' is ' & ' Phone No ' & arrayData(1) & ' ,Id ' & arrayData(2) & ' ,DOB ' & arrayData(3) End Sub
VBA配列メソッド
以下に説明するように、VBA配列には、さまざまな機能を実行するのに役立ついくつかのメソッドがあります。
Sl。番号 | 名前 | 構文 | 説明 |
---|---|---|---|
7 | 参加する | Join(sourcearray、(delimiter)) | 配列内の複数の部分文字列を結合し、文字列値を返します。 |
1 | アレイ | アレイ(不正) | 通常のバリアントを変換します 変数を配列に変換します。 |
二 | 消去 | arraynameを消去します | 固定サイズの配列を再初期化するために使用されます 動的配列用にメモリを解放します。 |
3 | IsArray | IsArray(変数名) | 変数が配列であるかどうかを判別します。 |
4 | Lbound | LBound(ArrayName、(Dimension)) | 最小の添え字を返します 配列の。 |
5 | Ubound | UBound(ArrayName、(Dimension)) | 最高の添え字を返します 配列の。 |
6 | スプリット | Split(式、(区切り文字、(制限、(比較)))) | 文字列を複数の部分文字列に分割し、ゼロベースの配列を返します。 |
8 | フィルタ | Filter(sourcearray、match、(include、(compare))) | フィルタを使用すると、 配列から指定された一致。 |
例を挙げて、それぞれについて詳しく説明しましょう。
#1)配列
通常のバリアント変数を宣言し、それを配列として使用しましょう。通常のバリアント変数を配列に変更する場合は、 アレイ 以下の例に示すように機能します。
配列関数は、コンマ区切りの値を含む引数を受け入れます。これらの値は、配列の要素として割り当てられます。
Sub variantArray() Dim varData As Variant varData = Array('Mon Bel', '+61 112334123', 567, '06-09-1972') MsgBox 'Details of person ' & varData(0) & ' is ' & ' Phone No ' & varData(1) & ' ,Id ' & varData(2) & ' ,DOB ' & varData(3) End Sub
インデックスを使用して配列変数を識別する必要があるため、上記の例では、値はvarData(0)varData(2)varData(3)として取得されます。
#2)消去
この関数は、固定サイズの配列に入力されたすべての値を消去し、動的配列のメモリスペースを解放します。
構文:arraynameを消去します
消去は、以下に示すように、データ型ごとに異なる動作をします。
- 固定数値の場合: すべての値がゼロにリセットされます。
- 固定文字列データ型の場合: すべての値がゼロの長さにリセットされます。
- 動的配列の場合: アレイが使用していたメモリを解放します。
例:
Sub eraseExample() Dim NumArray(3) As Integer Dim decArray(2) As Double Dim strArray(2) As String NumArray(0) = 12345 decArray(1) = 34.5 strArray(1) = 'Erase Function' Dim DynaArray() ReDim DynaArray(3) MsgBox ' Values before Erase ' & (NumArray(0)) & ',' & (decArray(1)) & ' , ' & (strArray(1)) Erase NumArray Erase decArray Erase strArray Erase DynaArray ' Free the memory ' All values are erased. MsgBox ' Values after Erase ' & NumArray(0) & ',' & decArray(1) & ' , ' & strArray(1) End Sub
消去機能を使用する前の結果
外付けハードドライブ用の無料バックアップソフトウェア
消去使用後の結果
#3)IsArray
この関数は、指定された入力変数が配列であるかどうかを判別するために使用されます。入力した変数がtrueの場合はtrueを返し、そうでない場合はfalseを返します。
構文:IsArray(変数名)
例:
Sub isArrayTest() Dim arr1, arr2 As Variant arr1 = Array('Jan', 'Feb', 'Mar') arr2 = '12345' MsgBox ('Is arr1 an Array : ' & IsArray(arr1)) MsgBox ('Is arr2 an Array : ' & IsArray(arr2)) End
最初のMsgboxからの結果
2番目のメッセージボックスからの結果
#4)Lbound
Lbound関数の引数として指定された配列の最下位の添え字を返します。
構文:LBound(ArrayName、(Dimension))
ArrayNameは、アレイの名前です。
次元はオプションの整数値です。配列に複数の次元がある場合は、Lboundを決定する次元を指定できます。
例:
Sub lboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim Arraywithoutlbound(10) Result1 = LBound(ArrayValue, 1) ' Returns 1. Result2 = LBound(ArrayValue, 3) ' Returns 10. Result3 = LBound(Arraywithoutlbound) MsgBox 'Lowest subscript in first array ' & Result1 & ' lowest subscript in 3rd array ' & Result2 & ' Lowest subscript in Arraywithoutlbound ' & Result3 End Sub
#5)Ubound
Ubound関数で引数として指定された配列の上位添え字を返します。
構文:UBound(ArrayName、(Dimension))
ArrayNameは、アレイの名前です。
次元はオプションの整数値です。配列に複数の次元がある場合は、Uboundを決定する次元を指定できます。
例:
Sub UboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim ArraywithoutUbound(10) Result1 = UBound(ArrayValue, 1) Result2 = UBound(ArrayValue, 3) Result3 = UBound(ArraywithoutUbound) MsgBox 'Lowest subscript in first array ' & Result1 & ' lowest subscript in 3rd array ' & Result2 & ' Lowest subscript in Arraywithoutlbound ' & Result3 End Sub
#6)分割
指定された文字列全体から派生したいくつかの部分文字列を含む配列を返します。
構文:Split(expression、(delimiter、(limit、(compare))))
- 式: これは、部分文字列を生成するために使用される文字列全体です。
- デリミタ: 指定された区切り文字を使用して、部分文字列が生成されます。これが言及されていない場合、スペースは区切り文字と見なされます。
- 制限: 返される部分文字列の数。
- 比較: 部分文字列が生成された後、さまざまな比較オプションを使用して結果をテストできます。
例: 以下の例では、区切り文字を–として使用し、制限を3として使用しています。
したがって、split関数は、区切り文字に基づいて文字列全体を部分文字列に分割します。ただし、制限を3と記載しているため、制限3の後に部分文字列は形成されません。したがって、最後の区切り文字–はスキップされます。
Sub splitExample() Dim MyString As String Dim Result() As String Dim DisplayText As String MyString = 'This is the example for-VBA-Split-Function' Result = Split(MyString, '-',3) MsgBox Result(0) & vbNewLine & Result(1) & vbNewLine & Result(2) & vbNewLine & Result(3) End Sub
#7)参加する
これは分割の逆です。Joinは複数の部分文字列を組み合わせて1つの文字列を作成します。
構文:Join(sourcearray、(delimiter))
Sourcearray: 1つに結合する文字列の1次元配列。
デリミタ: 結合中、各文字列の後に指定された区切り文字が追加されます。
例:
Sub joinExample() Dim Result As String Dim dirarray(0 To 2) As String dirarray(0) = 'D:' dirarray(1) = 'SoftwareTestingHelp' dirarray(2) = 'Arrays' Result = Join(dirarray, '') MsgBox 'Date after joining ' & Result End Sub
区切り文字としてを説明したように、3つの値はすべて結合され、は各単語の間に配置されます。
#8)フィルター
フィルタを使用すると、配列から指定された一致を検索できます。フィルタ基準に基づいて、文字列配列のサブセットが返されます。
構文:Filter(sourcearray、match、(include、(compare)))
例:
Sub filterExample() Dim Mystring As Variant Mystring = Array('Software Testing', 'Testing help', 'Software help') filterString = Filter(Mystring, 'help') MsgBox 'Found ' & UBound(Mystring) - LBound(Mystring) + 1 & ' words matching the criteria ' End Sub
この例では、フィルター関数を使用して、すべての配列文字列で「ヘルプ」という単語を検索します。
よくある質問
Q#1)VBAで配列の長さを取得するにはどうすればよいですか?
回答: 配列の長さを取得するには、Ubound関数を使用します。この関数は、指定された配列の上付き文字を提供します。
Q#2)VBAで配列を宣言する方法は?
回答:1次元配列は次のように宣言されています。
Dim arrayname(lowerboundからUpperBound)As DataType
例: Dim Myarray(0 To 2)As Integer
2次元配列は、次のように宣言されます。
Dim ArrayName(FirstIndex To LastIndex、FirstIndex To LastIndex)AsDataType。
例: 薄暗いマーク(1から3、0から2)整数として
Q#3)範囲を配列に変換する方法は?
回答: 転置関数を使用して、範囲を配列に変換できます。このコードはMys (10)を作成します
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range('A1:A10')) End Sub
Q#4)VBAのアレイバリアントとは何ですか?
回答: バリアント配列は、そのインデックスにすべての種類のデータ型を受け入れます。つまり、単一の配列にさまざまな種類の値を格納できます。
例:
Dim arrayData(3)As Variant
arrayData(0)= 'Vikas Vipal'
arrayData(1)= 411234567890#
Q#5)オプションベースステートメントとは何ですか?
回答: これは、配列の下付き文字を宣言するために使用され、モジュールの開始時に使用されます。モジュールレベルでオプションベース1を宣言した場合、デフォルトでは下付き文字は0になり、すべてのアレイのデフォルトの下付き文字は1になります。
結論
このチュートリアルでは、VBAで配列がどのように使用されるかを学び、配列が通常の変数とどのように異なるかを確認しました。例を使用して、1次元および2次元の配列を調べました。また、固定配列と動的配列についても説明しました。
実行時に配列のサイズを変更し、redimpreserveを使用して値を保持する方法について例を挙げて説明しました。最後に、いくつかの操作を実行するのに役立つ配列メソッドを学びました。
=> ここですべてのVBAチュートリアルを確認してください