11 VBAの配列をサザエさんで覚える

配列ってなんだか難しそうな感じですよね。
でも、きっと大丈夫です!!

この記事では国民的アニメの「サザエさん」を使って、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アカウントを作成して頂くと、登録が ラク です♪

写真素材素材【写真AC】

 

最後までご精読、誠にありがとうございました!!

自己紹介


VBA自作サンプルプログラム集へ戻る

取りあえず事務職で働きたいから手っ取り早くExcel教えてくれ


MOSなどの資格試験対策

投稿者: nekosiestr

プログラミング学習中のロスジェネ(就職氷河期世代)の発達障害者です。 宜しくお願いします。 趣味で写真を撮っています。 プログラミングは、GAS/HTML/CSS/JavaScript/jQuery/PHP、 発達障害は、自閉症スペクトラムASD/ADHD、その他双極性障害やHSP(5人に1人の繊細さん)などの生きづらさを抱えておりますが、それでも楽しく生きて行きたいです!! 写真は、以前はコンパクトデジカメ、現在は、OLYMPUSミラーレス一眼を使っています。

「11 VBAの配列をサザエさんで覚える」への1件のフィードバック

コメントは受け付けていません。