テクパー2020
テクニカルヘルパー


 VisualBasic アプリ開発入門 

◆ 配列(Array)
同じデータ型の要素が連続的に集合していることを配列と呼び、
 その要素を「添え字」(インデックス)で特定します。

※ 添え字(インデックス)は 0 から始まります。
1.1次元配列の宣言
【 書式1 】 Dim 配列変数名() As 要素のデータ型
【 書式2 】 Dim 配列変数名(添え字の上限値) As 要素のデータ型
【 書式3 】 Dim 配列変数名() As 要素のデータ型 = {要素の初期値,要素の初期値,……}
<記述例>
Dim Ary1() As Integer'書式1
Dim Ary2(3) As Integer'書式2
Dim Ary3() As Integer = { 10, 20, 30, 40 }'書式3
'
Ary1 = Ary3'配列(Ary1)に配列(Ary3)を代入
'
Ary2(0) = 11'配列(Ary2)の1番目の要素
Ary2(1) = 21'配列(Ary2)の2番目の要素
Ary2(2) = 31'配列(Ary2)の3番目の要素
Ary2(3) = 41'配列(Ary2)の4番目の要素
'
Ary3 = Nothing'配列(Ary3)の参照実体の解放
Ary3 = New Integer = { 12, 22, 32, 42 }'配列(Ary3)に初期値の再設定
<配列の要素イメージ>
添え字 (0) (1) (2) (3)
配列1(Ary1) 10 20 30 40
配列2(Ary2) 11 21 31 41
配列3(Ary3) 12 22 32 42
2.要素の数の変更
【 書式1 】 ReDim 配列変数名(添え字の上限値)'既存の要素を放棄し、新たな要素を確保
【 書式2 】 ReDim Preserve 配列変数名(添え字の上限値)'既存の要素を新たな要素にコピーして確保
<記述例>
Dim Ary1() As Integer = { 10, 20, 30, 40 }
Dim Ary2() As Integer = { 11, 21, 31, 41 }
'
ReDim Ary1(5)'書式1
ReDim Preserve Ary2(5)'書式2
<配列の要素イメージ>
添え字 (0) (1) (2) (3) (4) (5)
配列1(Ary1) [前] 10 20 30 40
[新]






配列2(Ary2) [前] 11 21 31 41
[新] 11 21 31 41

3.多次元配列の宣言
【 書式1 】 Dim 配列変数名(,,……) As 要素のデータ型
【 書式2 】 Dim 配列変数名(添え字の上限値,添え字の上限値,……) As 要素のデータ型
【 書式3 】 Dim 配列変数名(,,……) As 要素のデータ型 = {{要素の初期値,……}, {要素の初期値,……}, ……}
<記述例>
Dim Ary1(,) As Integer '書式1
Dim Ary2(2,3) As Integer '書式2
Dim Ary3(,) As Integer = {{10, 20, 30, 40}, {11, 21, 31, 41}, {12, 22, 32, 42}} '書式3
'
Ary1 = Ary3'配列(Ary1)に配列(Ary3)を代入
'
Ary2(0, 0) = 10'配列(Ary2)の(0, 0)の要素
Ary2(0, 1) = 20'配列(Ary2)の(0, 1)の要素
Ary2(1, 2) = 31'配列(Ary2)の(1, 3)の要素
Ary2(2, 3) = 42'配列(Ary2)の(2, 2)の要素
<多次元配列の要素イメージ>
Ary1 (*, 0) (*, 1) (*, 2) (*, 3) Ary2 (*, 0) (*, 1) (*, 2) (*, 3) Ary3 (*, 0) (*, 1) (*, 2) (*, 3)
(0, *) 10 20 30 40 (0, *) 10 20

(0, *) 10 20 30 40
(1, *) 11 21 31 41 (1, *)

31
(1, *) 11 21 31 41
(2, *) 12 22 32 42 (2, *)


42 (2, *) 12 22 32 42
4.多段階配列の宣言
Dim 配列変数名()() As 要素のデータ型
<記述例>
Dim Ary()() As Integer
'
Ary = New Integer(2) {}'配列を要素として持つ添え字の上限値で確保
'
Ary(0) = New Integer() {10, 20}'配列要素(0)に2個の要素の配列を設定
Ary(1) = New Integer() {11, 21, 31, 41}'配列要素(1)に4個の要素の配列を設定
Ary(2) = New Integer() {12, 22, 32}'配列要素(2)に3個の要素の配列を設定
<多段階配列の要素イメージ>

(0)(0) (0)(1)
Ary(0) 10 20

(1)(0) (1)(1) (1)(2) (1)(3)
Ary(1) 11 21 31 41

(2)(0) (2)(1) (2)(2)
Ary(2) 12 22 32
5.配列の要素数の取得
要素数 = 配列変数名.Length
<記述例>
Dim AryS1(5) As Integer
Dim Num1 As Integer = AryS1.Length 'Num1に要素数の 6 が返される
'
Dim AryS2(2, 3) As Integer
Dim Num2 As Integer = AryS2.Length 'Num2に要素数の 12 (3 X 6) が返される
'
Dim AryS3()() As Integer
AryS3 = New Integer(2) {}
Dim Num31 As Integer = AryS3.Length 'Num31に要素数の 3 が返される
'
AryS3(0) = New Integer() {10, 20}
Dim Num32 As Integer = AryS3(0).Length 'Num32に要素数の 2 が返される
'
AryS3(1) = New Integer() {11, 21, 31, 41}
Dim Num33 As Integer = AryS3(1).Length 'Num33に要素数の 4 が返される
'
AryS3(2) = New Integer() {12, 22, 32}
Dim Num34 As Integer = AryS3(2).Length 'Num34に要素数の 3 が返される
'
多次元配列の要素数 = 配列変数名.GetLength(添え字)
<記述例>
Dim AryG1(2, 3) As Integer '3 X 4 の二次元配列
Dim NumG1 As Integer = AryS2.GetLength(0) 'NumG1に 3 が返される
Dim NumG1 As Integer = AryS2.GetLength(1) 'NumG1に 4 が返される
6.配列の要素の文字列を検索するフィルター関数
Filter(source, match, include, compare)
1. source [必須]文字列の検索元の一次元配列を指定します
2. match [必須]検索する文字列を指定します
3. include [省略可]検索する文字列を含むか(True)、含まないか(False)の条件を指定します
4. compare [省略可]文字列の比較をバイナリー(CompareMethod.Binary)か、テキスト(CompareMethod.Text)で指定します
※ 文字列の検索結果は一次元配列として返されます
<記述例>
Dim Ary() As String = {"ABCD", "abcd", "ABCDEF", "abcdef", "BCDE", "bcde"}
Dim result() As String
'
'abc が含まれる文字列のテキスト比較 ⇒ ABCD abcd ABCDEF abcdef
result = Filter(Ary, "abc", True, CompareMethod.Text)
For Each str As String In result
MsgBox(str)
Next
'
'abc が含まれる文字列のバイナリー比較 ⇒ abcd abcdef
result = Filter(Ary, "abc", True, CompareMethod.Binary)
'
'abc が含まれない文字列のテキスト比較 ⇒ BCDE bcde
result = Filter(Ary, "abc", False, CompareMethod.Text)
'
'abc が含まれない文字列のバイナリー比較 ⇒ bcde
result = Filter(Ary, "abc", False, CompareMethod.Binary)
7.配列変数かを検査する関数
IsArray(object)
1. object [必須]配列変数かを検査する変数(オブジェクト)を指定します
※ 検査結果はブール型の値で返されます(配列変数はTrue、その他はFalse)
<記述例>
Dim Ary1() As Integer = {10, 20, 30, 40}
Dim Ary2(,) As Integer = {{10, 20, 30, 40}, {11, 21, 31, 41}, {12, 22, 32, 42}}
Dim Ary3 As String = "10, 20, 30, 40"
'
MsgBox(IsArray(Ary1))'結果はTrue
MsgBox(IsArray(Ary2))'結果はTrue
MsgBox(IsArray(Ary3))'結果はFalse
8.配列の文字列を結合するジョイン関数
Join(source, delimiter)
1. source [必須]文字列の結合元の配列を指定します
2. delimiter [省略可]結合する文字列の区切り文字列を指定します(省略はスペースで区切ります)
※ 結合結果は文字列で返されます
<記述例>
Dim Ary() As String = {"abc", "def", "ghi", "xyz"}
'
MsgBox(Join(Ary))'結果はabc def ghi xyz
MsgBox(Join(Ary, " : "))'結果はabc : def : ghi : xyz
MsgBox(Join(Ary, ""))'結果はabcdefghixyz
9.配列の添字の最小値と最大値を取得する関数
【 最小値 】LBound(array, rank)
【 最大値 】UBound(array, rank)
1. array [必須]添字を取得する配列を指定します
2. rank [省略可]添字を取得する配列の次元を指定します(省略は1次元目の値を返します)
※ 結果は数値で返されます
<記述例>
Dim Ary1() As String = {"abc", "def", "ghi", "xyz"}
Dim Ary2(10, 20, 30) As String
'
MsgBox(LBound(Ary1))'結果は0
MsgBox(LBound(Ary2))'結果は0
MsgBox(LBound(Ary2, 2))'結果は0
'
MsgBox(UBound(Ary1))'結果は3
MsgBox(UBound(Ary2))'結果は10
MsgBox(UBound(Ary2, 2))'結果は20
Copyright (C) 2010 プログラミングのテクニックをあなたに!!(リトル・ヘルパー) All Rights Reserved.