配列ってなんだか難しそうな感じですよね。
でも、きっと大丈夫です!!
この記事では国民的アニメの「サザエさん」を使って、VBAの配列を勉強して行きます。
サザエさんのメインキャラを、「サザエ一家」と言う 配列に格納して、デバックプリントを使って、イミディエイトウィンドウに書き出して(出力して)行きます。
Excel側でシート「国民的アニメ」を用意して、表の中のキャラクター名を
配列「サザエ一家」に格納します。
配列は、
サザエ一家[0]=磯野波平
サザエ一家[1]=磯野フネ
サザエ一家[2]=フグ田マスオ
サザエ一家[3]=フグ田サザエ
サザエ一家[4]=磯野カツオ
サザエ一家[5]=磯野ワカメ
サザエ一家[6]=フグ田タラオ
です。
この様に配列は「0から」始まります。
この0から始まる部屋番号みたいなものを、添え字といいます。
では、下記のコードで実際に「波平さん(=0) ~ タラちゃん(=6)」までの名前を配列「サザエ一家」に格納して、それをイミディエイトウィンドウに出力します。
Sub 配列1()
'文字列型の配列「サザエ一家(6)」と、添え字の変数i(数値型)を定義
Dim サザエ一家(6) As String, i As Integer
'ループでiを0から6まで配列の長さ分指定する
For i = 0 To 6
'ExcelのセルB3の磯野波平から順番に配列「サザエ一家」に格納する
サザエ一家(i) = Worksheets("国民的アニメ").Cells(3 + i, 2).Value
'デバックプリントに配列「サザエ一家」を出力する
Debug.Print サザエ一家(i)
'配列の添え字iを進める
Next i
End Sub
イミディエイトウィンドウの出力結果です。
では次に、サザエさん一家の中から代表して、「磯野波平」さんに一家のメンバーカラーを割り当ててみましょう。
メンバーカラーも、配列を使います。
配列名を「メンバーカラー」とします。
配列メンバーカラーの型は、Variant(バリアント型)という何でも入る型を使います。
このVariant型は、段ボール箱に四次元ポケットの機能を付けたようなイメージです。
ここでも、配列は0から始まります。
インプットボックスに0から4までの数字を入力して、波平さんにメンバーカラーを割り当てます。
「配列メンバーカラー」は
メンバーカラー[0]=赤
メンバーカラー[1]=青
メンバーカラー[2]=黄
メンバーカラー[3]=緑
メンバーカラー[4]=紫
としました。
ここでは波平さんに4番の「紫」のメンカラを割り当てます。
出力結果です。
コードです。
配列はArrayを使って作成します。
Sub 配列2()
'Variant型の配列「メンバーカラー」と、数値型の「番号」を宣言
Dim メンバーカラー As Variant, 番号 As Integer
'配列メンバーカラーの色を「赤、青、黄、緑、紫」とする
メンバーカラー = Array("赤", "青", "黄", "緑", "紫")
'インプットボックスを使って、メンバーカラーの番号を入力する
番号 = InputBox("赤:0、青:1、 黄:2、緑:3、紫:4", "「磯野波平」氏にどのメンバーカラーを割り当てますか?")
'メッセージボックスに、「磯野波平氏」のメンバーカラーは「メンバーカラー(番号)ですと出力する
MsgBox ("磯野波平氏のメンバーカラーは" & "「" & メンバーカラー(番号) & "」です☆★")
End Sub
皆様お気付きの通り、サザエさん一家に大事なキャラクターの「タマ」がいません!
そこで先ほどの配列「サザエさん一家」を自動で範囲の拡張をさせます。
新たに、配列「サザエ一家」に「タマ」も追加したい時、配列に自動的に追加出来るようなコードを書いて行きます。
行の「上端」と、「下端」と、「配列の最後(この場合は[7])」を、このExcelの全ての行を使って用意します。
このExcelの表を下にず〜〜〜〜とスクロールして、スクロールして、更に下に行くと、とてつもなく大きい数の行数があります。
数えきれないので、下記のVBAのコードでは
「このExcelの全ての行数 = ActiveSheet.Rows.Count」
と掲載します。
一番下である「このExcelの全ての行数」から上に向かって最初にぶつかるのが、
「タマ」の行です。
ここでは10行目で、変数「下端」に代入します。
変数「上端」は、B1から最初にぶつかるのが、「サザエ一家」という見出しで2行目です。
一家の行数は全部で8行で、配列は0から始まって7で終わります。
10行目から見出しの2行目を引いた数が行数として8行と求まります。
配列の最後の添え字は7なので、そこから1を引いています。
下記のコードで、LBoundは配列「サザエ一家」の一番小さい番号で[0]、
UBoundは一番大きい番号で[7]です。
Sub 配列3()
'文字列型の配列「サザエ一家」、ループの添え字数値型「i」、Long型の「上端」、Long型の「下端」、Long型の「配列の要素数」、Long型の「このExcelの全ての行数」を宣言
Dim サザエ一家() As String, i As Long, 上端 As Long, _
下端 As Long, 配列の要素数 As Long, このExcelの全ての行数 As Long
'ワークシート「国民的アニメ」をアクティブにする
Worksheets("国民的アニメ").Activate
'このExcelの全ての行数をActiveSheet.Rows.Countを使って求める
このExcelの全ての行数 = ActiveSheet.Rows.Count
'「上端」をセルB1、1行目2列目から下に向かって求める
上端 = Cells(1, 2).End(xlDown).Row
'「下端」を行が「このExcelの全ての行数」で、列がB列(2列目)から上に上がって求める
下端 = Cells(このExcelの全ての行数, 2).End(xlUp).Row
'「配列の要素数」の[7]を下端(10)-上端(2)-1から求める
配列の要素数 = 下端 - 上端 - 1
'ReDimを使って、新たに配列を出力
ReDim サザエ一家(配列の要素数)
'Forループで配列の最初(LBound)から配列の最後(UBound)までを添え字iに代入
For i = LBound(サザエ一家) To UBound(サザエ一家)
'配列「サザエ一家」に、Excelのシート「国民的アニメ」のセルB3からB7までを格納
サザエ一家(i) = Worksheets("国民的アニメ").Cells(上端 + i + 1, 2).Value
'デバックプリントを使って、イミディエイトウィンドウに配列サザエ一家[i]を出力
Debug.Print サザエ一家(i)
'ループを進める
Next i
End Sub
実行すると、無事に自動で「タマ」も出力されました。
お疲れ様でした。
ここでサザエさんTipsですが、サザエさんは「あわび女子学園大学」を卒業されています。
参考記事:サザエさんの登場人物の学歴がヤバい…卒業した大学や就職先を公開
サザエさんのBGMが聴きたい方は、こちらの動画がオススメです。
この記事を書き終わって、私も思わず聴きに行きました。
皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・
いたばし花火大会2023の「にこちゃんマーク」の花火です。
「♪はだしで かけてく、陽気なサザエさん」 に合いそうな写真だと、個人的に思います。
仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!
こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。
※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪
最後までご精読、誠にありがとうございました!!
自己紹介
VBA自作サンプルプログラム集へ戻る
取りあえず事務職で働きたいから手っ取り早くExcel教えてくれ
MOSなどの資格試験対策