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」の記事

第5回.100マスに数値を入れる
第6回.別のシートにコピーする
第7回.別のシートにコピーする2
第8回.計算式を入れる
第9回.計算式をコピーする
第10回.計算結果を入れる
第11回.イミディエイトで値の確認

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

スプレッドシートが非常に遅い、高速化するには|Google Apps Script入門(1月17日)
画像のトリミング(PictureFormat,Crop)|ExcelマクロVBAサンプル集(12月27日)
シート保護|Google Apps Script入門(12月24日)
表示の固定|Google Apps Script入門(12月24日)
グラフ|Google Apps Script入門(12月21日)
入力規則|Google Apps Script入門(12月13日)
並べ替え|Google Apps Script入門(12月12日)
メモの挿入・削除と改行文字|Google Apps Script入門(12月6日)
リンクの挿入・編集・削除|Google Apps Script入門(12月6日)
セルに数式を入れる|Google Apps Script入門(12月1日)

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

1.RangeとCellsの使い方|ExcelマクロVBA入門
2.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.ひらがな⇔カタカナの変換|エクセル基本操作
8.CSVの読み込み方法|ExcelマクロVBAサンプル集
9.変数とデータ型(Dim)|ExcelマクロVBA入門
10.VBAのFindメソッドの使い方には注意が必要です|ExcelマクロVBA技術解説



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

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


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

    ↑ PAGE TOP