Excelマクロの記録で覚えるVBA
第4回.連続数値を入れる

Excelマクロの自動記録を使って、エクセルVBAの初心者向け入門解説
最終更新日:2013-02-18

第4回.連続数値を入れる


さて、前回までで、セルに文字をいれることが出来ました。


今回は、セルに連番を入れて見ましょう。


行番号として、1、2、3、4・・・のように入れてみます。



まず、準備として、以下をやって下さい。


1.エクセルを起動する

2.VBE(Visual Basic Editor)を起動する

3.「ツール」→「オプション」

  「変数の宣言を強制する」にチェックする

4.「OK」


以上で準備OKです。


えっ、何をしたかって、後で説明します。



では、「マクロの記録」をします。


1.マクロの記録

2.セルA1に1

3.セルA2に2

  ・・・

  ・・・オートフィルを使わずに、1つずつ入れて下さい。

  ・・・ちなみに、1、2まで入れたら、A1~A2を選択しオートフィルで連続数値として入れられます。

  ・・・

4.セルA10に10

5.記録終了


さて、マクロを見てみましょう。




Option Explicit


Sub Macro1()
'
' Macro1 Macro
'

'
  ActiveCell.FormulaR1C1 = "1"
  Range("A2").Select
  ActiveCell.FormulaR1C1 = "2"
  Range("A3").Select
  ActiveCell.FormulaR1C1 = "3"
  Range("A4").Select
  ActiveCell.FormulaR1C1 = "4"
  Range("A5").Select
  ActiveCell.FormulaR1C1 = "5"
  Range("A6").Select
  ActiveCell.FormulaR1C1 = "6"
  Range("A7").Select
  ActiveCell.FormulaR1C1 = "7"
  Range("A8").Select
  ActiveCell.FormulaR1C1 = "8"
  Range("A9").Select
  ActiveCell.FormulaR1C1 = "9"
  Range("A10").Select
  ActiveCell.FormulaR1C1 = "10"
  Range("A11").Select

End Sub


何か、先頭に見慣れないものが付きました。

Option Explicit

これが、最初に設定した、

「変数の宣言を強制する」になります。

この下で説明する、変数の宣言をしないと、エクセルが怒るようになります。

エクセルを怒らせると怖いですから、怒らせないようにしましようね。


マクロの中身は分かりますよね。

また、SelectActiveCellの消しこみも大丈夫ですね。

あっ、先頭には、Range("A1").Selectがあると思って下さいね。


不要なものを削除し、消しこんだ結果は、


Sub Macro1()
  Range("A1") = 1
  Range("A2") = 2
  Range("A3") = 3
  Range("A4") = 4
  Range("A5") = 5
  Range("A6") = 6
  Range("A7") = 7
  Range("A8") = 8
  Range("A9") = 9
  Range("A10") = 10
End Sub


このようになります。


そうそう、前回まで説明が漏れていました。

文字を指定する場合は、「"」(ダブルクォーテーション)で囲みます。

でもね、

数値の場合は、「"」は無くてよいです、いや、無い方が良いです。


出来上がりましたね。

えっ、これでお終いかって、そんな訳ないでしょう。


本番はこれからです。



話は少し変わって、電卓って使いますよね。


大抵の電卓には、「M+」「M-」「CM」「RM」とかってありますよね。


100円電卓には無いって・・・もう少し高い電卓を使いましょう(笑)


使い方分かりますか?


これが使えないと、プログラムは・・・って、そんなこと無いですけど。


これって、メモリーが1つ用意されていて、


「M+」は、メモリーに加算します

「M-」は、メモリーに減算します

「CM」は、メモリーを消します。

「RM」は、メモリーを呼び出します


使い方は、

いろいろ計算した結果を、「M+」でメモリーに加算

さらに、いろいろ計算した結果を、「M-」でメモリーに減算

これらを繰り返します

最後に、「RM」で、結果を見ます。


最近は、めっきり電卓の出番も減ったかも知れませんね。


普通の電卓では、このメモリーが1つしかありませんが、


VBAでは、いくらでも、好きなだけ持つ事ができます。


これが、変数です。


メモリー1、メモリー2・・・のように名前を付けます。


それを変数名と呼びます。



最初にどんな名前の変数を使うかを、VBAに宣言します。


この宣言を必ずしなさいというのが、

Option Explicit

になります。

宣言した方がお互い(VBAとアナタ)良いでしょう、意思の疎通ができますから。


宣言方法は、

Dim 変数名

これだけで良いです。

まあ、本当は、いろいろありますが、今はとにかく、これで良いです。


えっ、Dimって何の略かって・・・

聞いても意味無いと思うのですが、Dimensionの略になります。

Dimensionって、次元とかって意味じゃないのかな・・・って、だから、言ったでしょ。

これは、MSさんの過去からの歴史でそうなっちゃったんです。


では、この変数を使って、先の1~10の連番入力のプログラムを作りましょう。



プログラムを先に紹介して、説明します。




Sub Macro1()
  Dim i
  i = 1
  Do While i <= 10
   Range("A" & i) = i
   i = i + 1
  Loop
End Sub


これで、上のマクロと全く同じ処理をしてくれます。

Dim i
これが、変数の宣言です。

変数名を「i」としています。

まあ、多くの人が、数値を入れる変数は、i、j、k等を使っています。

これも、過去からの習慣みたいなもので、悪しき習慣でもあります。

でも、当分はこれで良いでしょう。


i = 1
これは、文字を入れる時の「=」と同じです。

i ← 1

と言う事です、つまり、iに1を入れます


Do While i <= 10

・・・

Loop
これは、

Do While 条件

・・・

Loop

で、条件になるまで、「・・・」を繰り返し処理します。

i <= 10」は、ワークシート関数でも使いますよね、

i10以下かの判定です。


Range("A" & i) = i
最初、iには1が入っています。

i1と見立てます。

そして、「&」は文字列を連結します。(ワークシート関数でも使いますよね)

つまり、

Range("A1") = i

ってことになります。


i = i + 1
これも、

i ← i + 1

つまり、i1足してiに入れます。

結局、i1加算されるのです。


言葉で上の処理を書くと


iに1を入れる

iが10以下の間、以下の処理を繰り返す

 ・A列のi行目にiを入れる
 ・iに1を加算する


ということです。


ではマクロを実行して下さい。

ちゃんと、A1~A10に、1~10まで入りましたよね。



以上は、縦に1~10を入れたから良いのですが、横に入れるとしたらどうでしょう。


全体のプログラムとしては、そのままで良いですが、


Range("A" & i) = i

の部分をどう書きましょうか。


縦は、1、2、3・・・なので、数値で指定出来ましたが、


横は、A、B、C・・・なので、番号で指定できませんよね。


心配無用です。


VBAでは、便利な書き方があるのです。


Range("列行")

Cells(行数, 列数)


これ、「セル」(複数形ですけど)ですね、Rangeより分かり易いかもしれませんね。

行数はそのまま行数です。

列数は、A列が1、B列が2、C列が3・・・となります。

これなら、数値だけで指定出来ます。


上のプログラムをこれで書きなおすと、


Sub Macro1()
  Dim i
  i = 1
  Do While i <= 10
   Cells(i, 1) = i
   i = i + 1
  Loop
End Sub


Cells(i, 1)

は、i行目、1列(A列)のセルになります。


では、横にA1~J10までに、1~10を入れるとしたら、どうなるでしょう。


宿題です、やってみて下さい。


出来ますよね。


次回は、この回答と、もう少し難しい数値の入れ方として、縦横に数値をいれます。



今回からの数回でやる内容が、VBAの基本であり、全てと言っても良いです。


後は、これらのバリエーションでしかありません。


実際にPCの内部では、このように全て処理されているのです。


一見複雑に見える処理でも、細部を見て行けば、


1つずつ、値を足したり、変数に入れたり、出したりの繰り返しでしかありません。



とはいえ、エクセルには豊富な機能が用意されていますので、


本シリーズでは、「マクロの記録」を通して、それらの機能を使っていきます。



しかし、ここでの基本が出来ていないと、その時に応用がききません。


おそらく、VBAで挫折する人は、この基本を理解しきれていないのだと推測します。


基本は、しっかり覚えて、腹の底に沈めて下さい。


頭に入れるのではなく、腹の底に沈めるのです、腑に落とすのです。


操作は指に覚えさせ、基本は腹の底に沈めるのです。


つまり、記憶するのではなく、体得するということです。


これ、プログラムにおける、私なりの考え方です。





同じテーマ「Excelマクロの記録で覚えるVBA」の記事

第1回.マクロを記録して実行
第2回.セルに文字を入れる
第3回.複数セルに文字を入れる
第4回.連続数値を入れる
第5回.100マスに数値を入れる
第6回.別のシートにコピーする
第7回.別のシートにコピーする2
第8回.計算式を入れる
第9回.計算式をコピーする
第10回.計算結果を入れる
第11回.イミディエイトで値の確認


新着記事NEW ・・・新着記事一覧を見る

CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)
IfステートメントとIIF関数とMax関数の速度比較|VBA技術解説(6月23日)
Withステートメントの実行速度と注意点|VBA技術解説(6月6日)
VBA+SeleniumBasicで検索順位チェッカー(改)|VBA技術解説(6月2日)
マクロでShift_JIS文字コードか判定する|VBA技術解説(6月1日)
Shift_JISのテキストファイルをUTF-8に一括変換|VBAサンプル集(5月31日)
「VBAによる解析シリーズその2 カッコ」をやってみた|エクセル(5月21日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄
9.ひらがな⇔カタカナの変換|エクセル基本操作
10.セルに文字を入れるとは(Range,Value)|VBA入門



  • >
  • >
  • >
  • 連続数値を入れる

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ