配列についていろいろメモしときます。
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 件のコメント:
コメントを投稿