第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
これが、最初に設定した、
「変数の宣言を強制する」になります。
この下で説明する、変数の宣言をしないと、エクセルが怒るようになります。
エクセルを怒らせると怖いですから、怒らせないようにしましようね。
マクロの中身は分かりますよね。
また、SelectとActiveCellの消しこみも大丈夫ですね。
あっ、先頭には、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」は、ワークシート関数でも使いますよね、
iが10以下かの判定です。
Range("A" & i) = i
最初、iには1が入っています。
iを1と見立てます。
そして、「&」は文字列を連結します。(ワークシート関数でも使いますよね)
つまり、
Range("A1") = i
ってことになります。
i = i + 1
これも、
i ← i + 1
つまり、iに1足して、iに入れます。
結局、iが1加算されるのです。
言葉で上の処理を書くと
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で挫折する人は、この基本を理解しきれていないのだと推測します。
基本は、しっかり覚えて、腹の底に沈めて下さい。
頭に入れるのではなく、腹の底に沈めるのです、腑に落とすのです。
操作は指に覚えさせ、基本は腹の底に沈めるのです。
つまり、記憶するのではなく、体得するということです。
これ、プログラムにおける、私なりの考え方です。
同じテーマ「マクロの記録でVBA」の記事
第1回.マクロを記録して実行
第2回.セルに文字を入れる
第3回.複数セルに文字を入れる
第4回.連続数値を入れる
第5回.100マスに数値を入れる
第6回.別のシートにコピーする
第7回.別のシートにコピーする2
第8回.計算式を入れる
第9回.計算式をコピーする
第10回.計算結果を入れる
第11回.イミディエイトで値の確認
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
- ホーム
- マクロVBA入門編
- マクロの記録でVBA
- 連続数値を入れる
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。