EXCEL、VBAプログラミング入門23~画面クリアボタン(繰返し処理について)~

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

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

本文に関連する動画は以下にて閲覧可能です。

EXCEL、VBAプログラミングの第23回目で「画面クリアボタン(繰返し処理について)」について解説を行います。

今回は、以下のことについて解説を行っています。
1)はじめに(オペレーションの説明)
2)「画面クリア」ボタン処理の確認
3)Do While~Loopによる繰返し処理

1)はじめに(オペレーションの説明)
今回は、下図の計算機システムで「画面クリア」ボタン処理について解説を行います。

図1.計算機システム

「画面クリア」ボタン処理の機能を確認する前準備として以下の処理を行います。

「0」ボタンを押した後に「+」「1」と順にボタンを押した後に「計算」ボタンを押します。「計算」ボタンは電卓では「=」ボタンに該当しますので「0+1」の結果である「1」をセル番地「B3」に表示します。

次に「記録」ボタンを押します。「記録されました」というダイアログメッセージが表示されます。「記録」ボタンによってセル番地「B3」に表示されている「1」を内部記録します。内部記録は動的配列を利用しています。「画面クリア」ボタンを押すとセル番地「B3」をクリアします。

同様に、「1」「+」「2」と順に入力した後に「計算」ボタンを押して結果である「3」をセル番地「B3」に表示します。その後「記録」ボタンを押してセル番地「B3」に表示されている「3」を内部記録します。

「画面クリア」ボタンを押すとセル番地「B3」をクリアします。さらに「3」「+」「3」「計算」「記録」と順にボタンを押して、「3+3」の計算結果である「6」を内部記録します。

「4」「+」「6」「計算」ボタンを押した後に、「記録」ボタンを押して「4+6」の計算結果である「10」を内部記録します。「7」「+」「8」の計算結果である「15」を「記録」ボタンで内部記録します。

これまでの操作で、「1」、「3」、「6」、「10」、「15」の5つの数値を内部記録しました。

内部記録を行った5つの数値は、「次」ボタンを押すと下図の通り、セル番地「B3」に表示に表示されます。

図2.次ボタン処理

セル番地「B4」には現在のモードを知らせるために「記録」と表示され、セル番地「D4」には「表示配列:1」と配列の何番目を表示しているかを示し、さらにセル番地「B3」にはその値である「3」が表示されています。

さらに「次」ボタンを押すと、記録した順に
「表示配列:1、値:6」→「表示配列:2、値:10」→「表示配列:3、値:15」
と表示され、さらに「次」ボタンを押すと、最初の値に戻って
「表示配列:0、値:1」→「表示配列:1、値:3」→「表示配列:2、値:6」・・・・
と表示していきます。

配列の要素数は「0」からスタートしますので、最初の「表示配列」も「0」からスタートするようにしています。

下図の通り、「表示配列:2、値:6」が表示されている状態で、「画面クリア」ボタンを押すと該当のデータが削除されます。

図3.「画面クリア」ボタン処理

この際に現在セルに表示されている数値を消すと同時に、内部記録したデータも削除しています。

具体的には内部に記録させた値は下図の通り、左側の「表示配列:2、値:6」が削除されてその分、「表示配列:3、値:10」「表示配列:4、値:15」の表示配列の値が詰められるようになります。

図4.記録された値

つまり、処理前と処理後で以下のように更新されます。
「表示配列:3、値:10」 → 「表示配列:2、値:10」
「表示配列:4、値:15」 → 「表示配列:3、値:15」

単純に前に詰めているだけなので、一見、簡単そうに感じるかもしれませんがプログラムではそうとは限りません。人間が簡単と感じることが必ずしもコンピュータにとっても簡単とは限らないからです。

2)「画面クリア」ボタン処理の確認
「画面クリア」ボタン処理を確認するには下図の通り「開発」タグを選択後に「デザインモード」をオンにします。次に「画面クリア」ボタンを選択してマウスの右クリックでメニューを表示し、「コードの表示」を選択します。

図5.画面クリアボタン処理

実際のプログラムの内容は以下の通りです。ただし、「’」(シングルコーテーション)の箇所はコメントですので、表示されている大部分がコメントとなっています。

図6.画面クリアボタン処理の内容

コメントは実際のプログラムではない部分です。コメントはよくプログラムに対する補足説明として記述されますが、上記のコメントは過去に制作したプログラムを履歴として残しておくためにコメントを利用しています。

「図6.画面クリアボタン処理の内容」ではすべてのプログラムを表示しきれていないので、下図の通り処理の後半部分を表示します。

図7.画面クリアボタン処理後半

3)Do While~Loopによる繰返し処理
「図7.画面クリアボタン処理後半」の以下の部分に着目します。
Do While 記録配列数 > 表示配列数
            記録配列(表示配列数 – 1) = 記録配列(表示配列数)
            表示配列数 = 表示配列数 + 1
Loop

Do While 条件
  ~
Loop
は条件に該当している間は、「Do While」~「Loop」の間を繰返し処理します。「表示配列数」変数は現在、シート上で表示されている配列要素の次の値になっています。

例えば、「図3.「画面クリア」ボタン処理」にてシート上に「表示配列:2、値:10」が表示されている場合には、「表示配列数」変数の値は次の値である「3」になっています。

記録配列(表示配列数 – 1) = 記録配列(表示配列数)
にて記録配列(表示配列数)は記録配列(3)となります。「図4.記録された値」を見ると記録配列(3)の値は「10」となっています。この値を
記録配列(表示配列数 – 1)
つまり、記録配列(2)に代入する訳です。

以上より、
「表示配列:3、値:10」 → 「表示配列:2、値:10」
と左から右に値を代入します。

表示配列数 = 表示配列数 + 1
にて、「表示配列数」に「1」を足した値を「表示配列数」に代入する訳ですから、「表示配列数」変数の値は「4」になります。

さらに繰返し処理にて
記録配列(表示配列数 – 1) = 記録配列(表示配列数)
を行い、
「表示配列:4、値:15」 → 「表示配列:3、値:15」
が代入されます。

ただし、「Do While」~「Loop」中では
「表示配列:4、値:15」
を削除していませんから、この値は残ったままになります。

以上の処理で
「表示配列:1、値: 1」 → 「表示配列:1、値: 1」
「表示配列:2、値: 3」 → 「表示配列:2、値: 3」
「表示配列:3、値: 6」 → 「表示配列:3、値:10」
「表示配列:4、値:10」 → 「表示配列:4、値:15」
「表示配列:5、値:15」 → 「表示配列:5、値:15」
となります。

「記録」ボタンで記録する値は動的配列を利用して値を保持しています。「画面クリア」ボタンでは、現在、表示されている値の内部記録を削除したいのですが、単純に真ん中の要素だけを削除することができません。

そのため、削除したい配列要素に上記のように次の配列要素を上書きしていきます。今回の説明ではそこまででしたが最終要素を削除しないと最終データの値が重複して残ってしまいますので最終行を削除する処理が必要です。この部分については次回に解説を行います。


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