配列についていろいろメモしときます。
Optin Baseのように使わない情報はすっとばしますよっと。
配列といえば複数の値を格納できる変数ですね。
宣言の仕方や、要素の入力方法に違いがあるので選ぶ基準からメモっていきます。
頭の中で考えてく流れを現してみました。
◆配列作成の流れ
┳要素数が確定している
┃ ┃
┃ ┣(1)要素数が少ない
┃ ┃ ・要素数 :宣言時に要素数を指定
┃ ┃ ・型の指定:任意の型を指定
┃ ┃ ・代入方法:要素別に一つ一つ代入する
┃ ┃
┃ ┗(2)要素数が多い
┃ ・要素数 :宣言時に要素数を指定しない
┃ ・型の指定:Variant型のみ
┃ ・代入方法:Array関数を使ってまとめて代入
┃
┗要素数が不確定
┃
┣初期に何か入力することがある
┃ ┃
┃ ┣(3)入力要素数が少ない
┃ ┃ ・要素数 :宣言時に要素数を指定しない
┃ ┃ ・型の指定:Variant型のみ
┃ ┃ ・初期代入:要素別に一つ一つ代入する
┃ ┃
┃ ┗(4)入力要素数が多い
┃ ・要素数 :宣言時に要素数を指定しない
┃ ・型の指定:任意の型を指定
┃ ・初期代入:Array関数を使ってまとめて代入
┃
┗(5)初期に何か入力することがない
・要素数 :宣言時に要素数を指定しない
・型の指定:任意の型を指定
・代入方法:要素別に一つ一つ代入する
まずは、サンプルコードから。
◆注意点のまとめ。
・配列の最初の要素は0から始まる
・Dim or ReDimで要素数を指定する場合最後の要素番号を書く
・Array関数を使う時は、Variantのみ
・ReDimだけだと既に入力した値は消えるのでPreserveも指定することで
既に入力してある値を引き継いでつかう。
・UBoundで一番最後の要素番号を調べれる。
ただし、要素数の宣言をしていない配列を引数に渡すとエラーとなる。
・Splite関数の値を受け取る場合、変数の要素数を指定しておくとエラーとなる。
◆配列の初期化
動的宣言の場合…Dimで要素数を宣言していない場合、要素数自体クリアされる。
Optin Baseのように使わない情報はすっとばしますよっと。
配列といえば複数の値を格納できる変数ですね。
宣言の仕方や、要素の入力方法に違いがあるので選ぶ基準からメモっていきます。
頭の中で考えてく流れを現してみました。
◆配列作成の流れ
┳要素数が確定している
┃ ┃
┃ ┣(1)要素数が少ない
┃ ┃ ・要素数 :宣言時に要素数を指定
┃ ┃ ・型の指定:任意の型を指定
┃ ┃ ・代入方法:要素別に一つ一つ代入する
┃ ┃
┃ ┗(2)要素数が多い
┃ ・要素数 :宣言時に要素数を指定しない
┃ ・型の指定:Variant型のみ
┃ ・代入方法:Array関数を使ってまとめて代入
┃
┗要素数が不確定
┃
┣初期に何か入力することがある
┃ ┃
┃ ┣(3)入力要素数が少ない
┃ ┃ ・要素数 :宣言時に要素数を指定しない
┃ ┃ ・型の指定:Variant型のみ
┃ ┃ ・初期代入:要素別に一つ一つ代入する
┃ ┃
┃ ┗(4)入力要素数が多い
┃ ・要素数 :宣言時に要素数を指定しない
┃ ・型の指定:任意の型を指定
┃ ・初期代入:Array関数を使ってまとめて代入
┃
┗(5)初期に何か入力することがない
・要素数 :宣言時に要素数を指定しない
・型の指定:任意の型を指定
・代入方法:要素別に一つ一つ代入する
まずは、サンプルコードから。
Option Explicit
Sub Sample()
'■要素数が確定している
'(1)要素数が少ない
' ・要素数 :宣言時に要素数を指定
' ・型の指定:任意の型を指定
' ・代入方法:要素別に一つ一つ代入する
'
' -ポイント-
' ⇒配列の最初の要素は0から始まる
' ⇒宣言時に指定する要素の値は、最後のインデックス番号。
Dim test1(2) As String '3個の要素を用意
test1(0) = "あああ"
test1(1) = "いいい"
test1(2) = "ううう"
'内容確認
Dim val As Variant
For Each val In test1
Debug.Print val
Next
'----------------------------------------------------------------
'■要素数が確定している
'(2)要素数が多い
' ・要素数 :宣言時に要素数を指定しない
' ・型の指定:Variant型のみ
' ・代入方法:Array関数を使ってまとめて代入
'
' -ポイント-
' ⇒Array関数は、Variant型のみ
Dim test2() As Variant
test2 = Array("1月", "2月", "3月", "4月", "5月", "6月", _
"7月", "8月", "9月", "10月", "11月", "12月")
'内容確認
For Each val In test2
Debug.Print val
Next
'----------------------------------------------------------------
'■要素数が不確定
' 初期に何か入力することがある
'(3)入力要素数が少ない
' ・要素数 :宣言時に要素数を指定しない
' ・型の指定:Variant型のみ
' ・代入方法:要素別に一つ一つ代入する
'
' -ポイント-
' ⇒ReDim 変数(最後の要素番号)で配列の要素数を変更
' ただし、既に代入している値はリセットされる
' ⇒ReDimと一緒にPreserveを使うと既に代入している値が引継がれます
Dim test3() As Variant
ReDim test3(2)
test3(0) = "000"
test3(1) = "111"
test3(2) = "222"
'追加代入
Dim i As Integer
For i = UBound(test3) + 1 To 9 'UBoundで一番最後の要素番号を調べる
ReDim Preserve test3(i) 'Preserve…既に代入している値が引継がれます
test3(i) = CStr(i & i & i)
Next
'内容確認
For Each val In test3
Debug.Print val
Next
'----------------------------------------------------------------
'■要素数が不確定
' 初期に何か入力することがある
'(4)入力要素数が多い
' ・要素数 :宣言時に要素数を指定しない
' ・型の指定:Variant型のみ
' ・代入方法:Array関数を使ってまとめて代入
'
' -ポイント-
' ⇒Array関数は、Variant型のみ
' ⇒ReDim 変数(最後の要素番号)で配列の要素数を変更
' ただし、既に代入している値はリセットされる
' ⇒ReDimと一緒にPreserveを使うと既に代入している値が引継がれます
Dim test4() As Variant
test4 = Array("あいうえお", True, Date, Time) 'Variantなので複数の型を格納できる
'追加代入
For i = UBound(test4) + 1 To 9 'UBoundで一番最後の要素番号を調べる
ReDim Preserve test4(i) 'Preserve…既に代入している値が引継がれます
test4(i) = i ^ i
Next
'内容確認
For Each val In test4
Debug.Print val
Next
'----------------------------------------------------------------
'■要素数が不確定
'(5)初期に何か入力することがない
' ・要素数 :宣言時に要素数を指定しない
' ・型の指定:任意の型を指定
' ・代入方法:要素別に一つ一つ代入する
'
' -ポイント-
' ⇒要素数を宣言する前にUBoundを使うとエラーになります
'Case1
Dim test5() As String
For i = 0 To 9
ReDim Preserve test5(i)
test5(i) = i ^ 3
Next
'内容確認
For Each val In test5
Debug.Print val
Next
'Case2
Dim test6() As String
test6 = Split("あ,い,う,え,お", ",")
'内容確認
For Each val In test6
Debug.Print val
Next
End Sub◆注意点のまとめ。
・配列の最初の要素は0から始まる
・Dim or ReDimで要素数を指定する場合最後の要素番号を書く
・Array関数を使う時は、Variantのみ
・ReDimだけだと既に入力した値は消えるのでPreserveも指定することで
既に入力してある値を引き継いでつかう。
・UBoundで一番最後の要素番号を調べれる。
ただし、要素数の宣言をしていない配列を引数に渡すとエラーとなる。
・Splite関数の値を受け取る場合、変数の要素数を指定しておくとエラーとなる。
◆配列の初期化
Erase 変数静的宣言の場合…Dimで要素数を宣言している場合、各要素が各要素がクリアされる。
動的宣言の場合…Dimで要素数を宣言していない場合、要素数自体クリアされる。
0 件のコメント:
コメントを投稿