EXCEL、VBAプログラミング入門18~配列~第1回目

以下は当記事に関連する動画です。本動画に関連する動画はすべてニコニコチャンネルにて閲覧可能です。
https://ch.nicovideo.jp/ai-light

今回は、EXCEL、VBAプログラミングの第18回目で配列について説明をする第1回目です。

今回は、以下のことについて解説を行っています。
1)はじめに(配列を利用した処理の内容確認)
2)配列処理の内容確認

1)はじめに(配列を利用した処理の内容確認)
今回は、下記の計算機システムの「記録」ボタン処理について説明を行いながら配列についても解説を行います。

図1.計算機システム

「記憶」処理がどのような処理かというと、現在、表示されている数値を一時記憶しておく処理です。

例えば、「1+9」と入力して「計算」ボタンを押したとします。「計算」ボタンは電卓でいうところの「=」ボタンを押した処理ですから「1+9」の結果である「10」を「B3」セルに表示します。

その後、「記憶」ボタンを押すと「記録されました」というダイアログボックスが表示され、「B3」セルに表示されている値を一時記憶します。現在は「10」という値を一時記憶します。

「記憶」ボタンで記憶する個数に制限はありません。

次に「画面クリア」ボタンを押すと「B3」セルの値が削除されます。その状態で「20」と入力して、「記憶」ボタンを押すと「20」という値が記憶されます。

同様にして「画面クリア」-「30」-「記憶」ボタンで、「30」という値が記憶されます。これまでの操作を通じて、「10」「20」「30」が記憶されています。

この状態で「次」ボタンを押すと下図の通り、「B3」セルには最初に記憶された数値である「10」が表示され、4行目に「記録  表示配列:0」と表示されます。

図2.次ボタン処理

「次」ボタンを押すと「B3」セルには2番目に記憶された数値である「20」が表示され、4行目に「記録  表示配列:1」と表示されます。

さらに「次」ボタンを押すと「B3」セルには3番目に記憶された数値である「30」が表示され、4行目に「記録  表示配列:2」と表示されます。

さらに「次」ボタンを押すと最初に表示されていた「10」が表示され、4行目に「記録  表示配列:0」と表示されます。

このように、「次」ボタンで記憶された値を順番に表示することができます。

2)配列処理の内容確認
処理の内容を確認します。下図の通り「開発」タグを選択し「デザインモード」欄をクリックしてオンにします。その後「記憶」ボタンを選択しマウスの右クリックで「メニュー」を表示し、「コードの表示」を選択します。

図3.コードの表示

するとマウスのカーソルが「記録_Click()」に移ります。これは下図の通りに「記憶」ボタンをクリックした際に「記録_Click()」処理が実行されることを示しています。

図4.記録クリック処理

「図4の記録クリック処理」にて、「’」(シングルコーテーション)ではじまる部分はコメントですから、実質的な処理は以下の部分です。

ReDim Preserve 記録配列(記録配列数)
記録配列(記録配列数) = Range(“b3”).Value
記録配列数 = 記録配列数 + 1
MsgBox “記録されました”

ReDim Preserve 記録配列(記録配列数)
の「記録配列」という部分がどのように定義されているかを確認します。

下図の通り、記録配列にカーソルを合わせてマウスの右クリックでメニューを表示し「定義」を選択します。

図5.記録配列の定義

すると、「記録配列」は
Public 記録配列() As String
と定義されていることがわかります。


図6.動的配列

また、記録配列は標準モジュールの「Module1」に定義されていることもわかります。これは、「図6.動的配列」の左側の「プロジェクトエクスプローラー」を確認すると、「Module1」が選択されていることでわかります。

ただ、選択されていることを示す色が薄いのでディスプレイによってはわかりづらいです。

その他の確認方法としては、「Visual Basic」エディターのウインドウのタイトルをみると、「Module1」と表示されていることからも確認できます。

VBAは構造化プログラミングを可能とする言語です。構造化プログラミングとは、処理をサブルーチンという形で定義して利用できるようにしたプログラミングです。具体的には、
Private Sub 記録_Click()
  ~
End Sub
というように処理をモジュールに分割して定義きるようにしているということです。このような仕組みを取り入れることによって、類似の処理をサブルーチン化することにより、何度も同じ処理を複数個所に記述する必要がなくなります。

しかし、プログラムを理解するには処理の流れを掴む必要があります。サブルーチン化していないと、処理の流れはその箇所のみしか見る必要がありませんので、特定の処理を理解する上ではサブルーチン化していない方が理解しやすいです。しかし、通常はプログラムが構造化されていますから、処理がどの部分に関連付けられているのかということを理解することも重要です。

さらに、「記録配列」変数はPublic(パブリック)変数として定義されています。パブリック変数とは本Excelファイルが起動している間は有効な変数です。これは前段の説明の通り、「記憶」ボタンを複数回押した時でもこれまでの変数をすべて記憶しておく必要があるからです。

「記録配列」変数は「記録配列()」と表記されています。「()」の部分が動的配列であることを示しています。

いきなり、動的配列を説明するのは難しいのでその前段階として「配列」について説明をします。

配列とは1つの変数の中に複数の値を格納できます。今回の事例のように「記録配列()」という中に「10」「20」「30」といった複数の値が格納できる訳です。

また、通常の配列では格納できる要素数を事前に宣言し固定します。例えば要素数が3個までと制限が付く場合には、
Dim 記録配列(2) As String
と記入します。要素数が3個なのに(2)と記載するのは配列の要素数は「0」~「2」までの3つが格納できるからです。

今回の場合だと「記憶」ボタンを何度押されるか分かりませんので、事前に要素数を固定にすることは出来ません。要素数を固定しない方法として動的配列を利用します。

動的配列を利用する場合には、
Dim 記録配列() As String
と記入します。


ニコニコチャンネル(月額固定で見放題)
http://ch.nicovideo.jp/ai-light
本記事に関連する動画講座を閲覧できます。一部の動画は無料でも閲覧できます。

YouTubeチャンネル(無料動画配信中)
https://www.youtube.com/user/ailightcom
ITと経営に関する動画を配信しております。
よろしければ、チャンネル登録をお願い致します。

無料から学べる講座
https://www.ai-light.com/itkeiei/
本記事に関連する動画講座をセット販売しております。
その他、ITと経営に関する動画もセット販売しております。

格安ホームページ制作所
https://www.ai-light.com/hp2
インターネットマーケティングに関する記事が無料で閲覧可能です。

株式会社アイライト公式HP
https://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

ITでお困りのことがございましたら、まずはご相談(コンサルティング)
https://www.ai-light.com/itconsulting.html


弊社は、主に中小企業様向けの業務システム開発ホームページ制作パソコンサポートコンサルティングなど、ITに関する様々なサービスを格安で提供しております。
特に小規模な業務システム開発の分野では、主にAccess(アクセス)を利用した柔軟で効率的な開発を得意としており、関西でダントツの実績があります。

業務システム開発に関しては、以下のような内容で対応しております。
・顧客管理などの単機能なシステムは20万円~50万円が多い。
・受注から入金まで業務全体システムで100万円~350万円ぐらいが多い。
・Access(アクセス)-SQLserverで大規模システム開発は350万円~1500万円が多い。

詳細は、Access(アクセス)、Excel(エクセル)、WEBサイト製作による小規模システム開発のページをご参考ください。

大阪商工会議所からの推薦を受けて、中小企業庁運営の中小企業支援事業に専門家として登録されました。
通称ミラサポ。3回まで無料でのコンサルティングが可能です。ご興味がある方はご連絡ください。
https://www.mirasapo.jp/


(近畿大学にて非常勤講師も務めたバリバリの技術屋が経営する会社)

Access(アクセス)Excel(エクセル)SQL server バーコード Webシステムを使った業務システムのシステム開発の無料相談を受付中

株式会社 アイライト 担当:内藤 響(Naito Ko)
〒550-0005 大阪市西区西本町1丁目5番9号 日清ビル 5F
(四つ橋線 本町駅 24番出口すぐ)
まずは、メール・電話でご相談ください。
TEL : (06) 6599-8890 E-mail : info@ai-light.com
お電話が混んでいる場合が多いので、つながりにくい場合は
TEL : (06) 6535-5117までお願いします。