EXCEL、VBAプログラミング入門22~次ボタン処理の流れ~第2回目

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

本講座のシリーズは以下にて閲覧可能です。
https://www.nicovideo.jp/series/231329

今回は、EXCEL、VBAプログラミングの第22回目で「次ボタン処理の流れ」の第2回目です。

今回は、以下のことについて解説を行っています。
1)はじめに
2)初回の「次」ボタン処理
3)2回目の「次」ボタン処理
4)3回目の次ボタン処理
5)4回目の次ボタン処理

1)はじめに
前回は下図の計算機システムで「記録」ボタン処理を行い、配列の「記録配列」変数に
記録配列(0)=「10」
記録配列(1)=「20」
記録配列(2)=「30」
の値を登録しました。

図1.計算機システム

今回は「図1.計算機システム」の「次」ボタン処理を行います。「次」ボタン処理にて前回に登録した配列の「記録配列」変数の要素を順に表示します。

「次」ボタン処理の内容は以下の通りです。

図2.次ボタン処理

2)初回の「次」ボタン処理
「図2.次ボタン処理」の上部の
On Error GoTo Error
にブレイクポイントを設定して、ステップ実行を行いながら処理の内容を確かめます。

「’」(シングルコーテーション)がある部分はすべてコメントとなりますので、次の処理の部分は
If 記録配列数 <= 表示配列数 Then
となります。

「表示配列数」は、「次_Click()」内では定義されていないので定義内容を確認します。「表示配列数」欄にカーソルを合わせてマウスの右クリックでメニューを表示し「定義」を選択します。

図3.「表示配列数」変数の定義確認

「表示配列数」変数は下図の通り
Public 表示配列数 As Integer
と定義されています。

図4.「表示配列数」変数の定義

以下にて「図2.次ボタン処理」のプログラムについて1行づつ解説を行っていきます。

Range(“b3”).Value = 記録配列(表示配列数)
によって、「表示配列数」変数の値は現在「0」ですから「記録配列(0)」の要素をセル「b3」に表示します。

表示配列数 = 表示配列数 + 1
によって、「表示配列数」変数の値は「1」になります。変数をカウントアップしたい時にはこのような処理を行います。

表示モード = “記録”
「表示モード」変数に「記録」という文字をセットします。ある文字列を変数にセットしたい場合にはその値を「”」(ダブルクォーテーション)で囲います。

Range(“b4”).Value = 表示モード
「表示モード」変数の値をセル番号「B3」に表示します。1行前で「表示モード」変数に「記録」という文字を入れていますので、セル番号「B3」には「記録」と表示されます。

Range(“d4”).Value = “表示配列:” & 表示配列数 – 1

表示配列数 – 1
についてですが、現在、セル番地「B3」には「記録配列(0)」の値が表示されていますが、次の準備のために前の行にて
表示配列数 = 表示配列数 + 1
を行い「表示配列数」変数の値を「0」から「1」にカウントアップしました。そのため
表示配列数 – 1
を行うことによって「記録配列」配列の要素番号である「0」を得るようにしています。

「&」は文字列の結合ですから、「表示配列:」と「0」の文字を結合して表示します。結果、セル番地「D4」には
表示配列:0
と表示されます。

出力結果は下図の通りです。

図5.出力結果

セル番号「D4」には、現在、表示されている配列の要素番号が表示されています。また、要素番号「0」の値は、セル番号「B3」に表示されます。セル番号「B4」は記録された要素を出力しているという意味で「記録」と表示しました。

3)2回目の「次」ボタン処理
さらに「次」ボタンを押します。

If 記録配列数 <= 表示配列数 Then
では先ほど「表示配列数」をカウントアップしましたので「1」という値が入っています。「記録配列数」の値は「次」ボタン処理では変化を与えていませんので「3」のままです。よってIF文内の条件は成立しませんので、IF文内は処理されません。

Range(“b3”).Value = 記録配列(表示配列数)
で「表示配列数」変数の値は「1」なので、記録配列(1) の値をセル番地「B3」表示します。

表示配列数 = 表示配列数 + 1
にて表示配列数をカウントアップします。「表示配列数」変数の値は「1」から「2」に代わります。

表示モード = “記録”
Range(“b4”).Value = 表示モード
にてセル番地「B4」に「記録」という文字を表示します。

Range(“d4”).Value = “表示配列:” & 表示配列数 – 1
にてセル番地「D4」に「表示配列:1」という文字を表示します。

4)3回目の次ボタン処理
さらに「次」ボタンを押します。

If 記録配列数 <= 表示配列数 Then
にて「表示配列数」変数の値は「2」で「記録配列数」変数の値は「3」ですからIF文の条件は成立しませんのでIF文内は処理されません。

Range(“b3”).Value = 記録配列(表示配列数)
にて「表示配列数」変数の値は「2」ですから記録配列(2)の値がセル番号「B3」に表示されます。

表示配列数 = 表示配列数 + 1
にて、表示配列数をカウントアップします。「表示配列数」変数の値は「2」から「3」に代わります。

表示モード = “記録”
Range(“b4”).Value = 表示モード
にてセル番地「B4」に「記録」という文字を表示します。

Range(“d4”).Value = “表示配列:” & 表示配列数 – 1
にて、セル番地「D4」に「表示配列:2」という文字を表示します。

5)4回目の次ボタン処理
これまでの処理で「次」ボタンをクリックすることによって
記録配列(0)→記録配列(1) →記録配列(2)
と表示してきました。

記録配列の要素は「2」までしかないので「次」ボタンを押すと今度は記録配列(0)の値を表示します。
If 記録配列数 <= 表示配列数 Then
にて「表示配列数」変数の値は「3」で「記録配列数」変数の値は「3」ですからIF文の条件が成立してIF文内が処理されます。このIF文の処理で記録配列の要素数を最初の値に戻す訳です。

IF文内の処理である
表示配列数 = 0
が実行されます。

Range(“b3”).Value = 記録配列(表示配列数)
にて「表示配列数」変数の値は「0」ですから、記録配列(0)の値がセル番号「B3」に表示されます。

プログラムの入門書ではIF文の構文の説明や「ReDim」と「ReDim Preserve」の違いなどプログラムのルールに関する説明をどうしてもしなければなりません。ぞのため入門書ではどうしてもルールに関する説明が多くなります。

そのため、入門書を読んでいる方はプログラムのルール的な内容を重視しがちです。しかしプログラムを理解するには処理の流れを理解することが重要です。そのためには既存のシステムをステップ実行で稼働させながら変数の変化や処理がどのように流れているかを順に追っていくと良いかと思います。

今回の処理ではセル番号「B3」に表示する値を
記録配列(0)→記録配列(1) →記録配列(2) →記録配列(0)・・・・
と順に表示していくためにパブリック変数である「表示配列数」を上手く活用している点に注目すると良いかと思います。


ニコニコチャンネル(月額固定で見放題)
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までお願いします。