EXCEL、VBAプログラミング入門19~配列のプログラムを稼働させる~

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

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

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

今回は、EXCEL、VBAプログラミングの第19回目で「配列のプログラムを稼働させる」というテーマで説明をします。

今回は、以下のことについて解説を行っています。
1)はじめに(動的配列の定義と配列の定義)
2)配列のサンプルプログラムの解説

1)はじめに(動的配列の定義と配列の定義)
今回は、前回に引き続き配列に関する説明を行います。下記の計算機システムの「記録」ボタン処理内で配列が利用されています。そのプログラムの紹介を通して配列について説明を順次行っていきます。

図1.計算機システム

「記録」ボタンを押した時の処理は下図の通りです。

図2.記録クリック処理

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

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

前回までの説明で「記録配列」変数は標準モジュールの「Module1」に定義されており
Dim 記録配列() As String
と定義されていることを説明しました。

通常の配列ですと例えば、
Dim 記録配列(2) As String
と配列の要素数を指定して定義しますが、動的配列の場合には上記のように要素数を指定せずに定義します。動的配列を利用することにより、事前に配列の要素数を決めずに配列を定義できます。

2)配列のサンプルプログラムの解説
今回は、配列についてもう少し解説を行います。以下のサンプルプログラムについて解説を行います。

Sub 配列()
 Dim i As Integer
 Dim A(3) As Integer
    ‘配列要素のデータを入力する時
  For i = 0 To 3
    A(i) = i*3
  Next i

   ‘配列要素のデータを出力する時
  For i = 0 To 3
    Cells(i + 1, 1).Value = A(i)
  Next i
End Sub

上記のサンプルプログラムについて上部から順に説明を行います。

Dim i As Integer
では、iをInteger型(整数型)として定義しています。ここで気を付ける点としては、Integer型は「-32,768 ~ 32,767の整数」までの数値しか扱えません。つまり、40,000などの数値を扱うことはできないということです。

40,000などの数値を扱いたい場合には、Long型を利用して下さい。Long型は-2,147,483,648~2,147,483,647の整数が扱えます。Long型を利用する場合には
 Dim i As long
と定義します。

 Dim A(3) As Integer
で要素数が4の配列を定義しています。配列の添え字は0から始まります。つまり、A(0), A(1), A(2), A(3)の4つの要素数が利用できます。

 For i = 0 To 3
   ~
 Next i
で、iが0から始まり3になるまで4回の繰り返し処理を行います。

繰り返し処理を行う範囲は
Next i
までの部分です。

もう少し詳細に説明をしますと
For i = 0 To 3
は、
For カウント変数 = 最初の値 To 最後の値
と定義します。

つまり、1回目の処理の際には、
i = 0
がセットされて処理が行われ、
Next i
の部分でiがカウントアップされてiが1となります。最終的には、i=3となるまで4回ループされます。

   A(i) = i*3
で各配列要素に数値を代入します。

1回目のループ時は
i = 0
ですから、
A(0) = 0*3
となり、A(0)には「0」がセットされます。

同様に2回目のループ時はi = 1ですから、
A(1) = 1*3
となり、A(1)には「3」がセットされます。

さらに出力処理の
  For i = 0 To 3
    Cells(i + 1, 1).Value = A(i)
  Next i
も同様です。

Cells(i + 1, 1).Value
の部分はExcelのセル番地を示しています。

Cells(行番号, 列番号)
となります。つまり、1回目のループ時はi = 0ですから、
 Cells(0 + 1, 1).Value = A(0)
となりCells(1, 1)の場所、つまりセル番地「A1」にA(0)の値をセットしています。

Cells(i + 1, 1).Value
の部分は
Range(“A” & i + 1).Value = A(i)
とも記載可能です。

仮にCellsの部分を
Range(“A” & i + 1).Value = A(i)
のように記載した場合の1回目のループではiが「0」ですから、
i + 1

0 + 1
となり、「1」となります。

また、「&」は文字の結合ですから、
Range(“A” & 1)

Range(“A1”)
と同じ意味となります。

Rangeの方がExcelのシートの表記方法と同じなので見やすいですが、Cellsは行、列ともに数値で表現されていますので、プログラム上で行列どちらにも変動する場合には容易に記述できます。Rangeの場合は列方向が「A」などとアルファベット表記なので、プログラム上で列方向に動かす場合には苦労します。


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