VBAのForNextステートメントで複数セルの仕事を1秒で片付ける

お知らせこの記事は初心者向用マクロ学習講座|勉強範囲を限定&12本の動画で早く効果を実感の関連記事です

複数セルの仕事を一瞬で処理

繰り返し処理という名前から何かを繰り返すという事は分かるのですが「繰り返し処理とは?」と言われるとなかなか説明できる人は居ません。なぜでしょうか?

理由は大きく分けて2つです。

  • 手作業では出来ない作業である事
  • マクロの記録では生成されない作業である事

よって使える人が本当に少ない為です。

指定した回数だけ作業を繰り返す処理

ものすごく便利な機能ですが1点注意が必要です。普通に作業をループさせるだけだと同じことを繰り返してしまいます。

そこで「変数」という機能を使って値を可変させることで異なる作業を繰り返し行う事が可能になります。

マクロ
マクロ

変数もVBAならではの機能ですよ プログラミングではメジャーな機能です

具体的に申し上げますと「セルA1からセルA10000まで文字を入力する」という大変そうな仕事を数行のコードで実行する事が出来る様になります。加えて処理も一瞬です。

マクロの効果を実感できる機能のひとつが繰り返し処理です。簡単なコードを紹介しますので是非ご自身の仕事に置き換えてみてください。

きっと作業効率があがるはずです。

記事の難易度

本当は2.5を付けたいです。

記事の難易度
易しい
1
2
3
4
5
難しい

オンラインミーティング

繰り返し処理のあたりから作業は難しくなります。ブログや動画だけでは良く分からないという方も居るかもしれません。

私オンラインでVBAの講師をしております。VBAをもっと勉強したいという方のフォローをさせていただきます。詳細はリンク先をご覧ください。

全国可おすすめ勉強法を紹介書店に並んでいるエクセルVBA(マクロ)関連の本が読めるようになるリモートでマクロの勉強しませんか (VBAで定時に帰ろう) 岡崎のパソコンの生徒募集・教室・スクールの広告掲示板|ジモティー
【ジモティー】投稿ご覧いただきありがとうございます。「VBAで定時に帰ろう」という名前で活動しております。早速となりますが以下ご覧ください。・書店でマクロ… (VBAで定時に帰ろう) 岡崎のパソコンの生徒募集・教室・スクールの広告掲示板|ジモティー

前回記事

前の記事VBAで罫線を引く1行のコードで格子状に実線が入る部位毎のコードも紹介

罫線とWithステートメントについて解説しています

この記事を読むとわかる事

繰り返し処理の基礎が身に付きます。加えて変数について少しだけ理解が進みます。

記事からわかる事
  1. 変数の使い方が分かります
  2. Cellsプロパティの使い方が分かります
  3. 繰り返し処理が使えるようになります
仕事が片付きます

マクロ

繰り返し処理については「何でRangeオブジェクトを使わずCellsプロパティを使うのか?」という質問を多くいただくのですがこれは説明すると長いので別記事で紹介します。

初心者様にはなんらかの理由を持っていただかないとモヤモヤしたまま勉強する事になりますので一定の回答を用意します。

Cellsプロパティは変数とForNextステートメントとの相性が良いから」と覚えてください。理由は動画の後に説明させていただきます。

2分動画

マクロ
マクロ

変数を使った繰り返し処理を紹介しています

繰り返し処理が分かる動画を用意しました

動画の中からさらに要点を絞って解説していきます。

変数

変数というぐらいなので数字のように感じますが色々な要素が入る箱のようなものです。変数の定義の仕方を紹介します。

変数の定義

Dim 変数名 as データ型

変数名に入るのは任意で決めた文字です。文字数は1文字でも大丈夫です。長くても問題無いのですがコード内で使う事になりますので程々の文字数で用意いただくのがベターです。

データ型に入るのは以下リストをご覧ください。

データ型(コード)データ型(型の種類)詳細
Long整数型およそ-20億~20億の整数
Currency通貨型Longよりも桁が大きく小数点第4位までの値が持てる
String文字列型文字列
Booleanブール型True または False
Date日付型日付と時刻
Objectオブジェクト型WorkSheetやRangeなどオブジェクト自体を格納できる
Variantバリアント型なんでも入る ただしメモリ消費が大きい
頻度が高そうなものを選んでリスト化しました

動画の中では「Dim i as long」と書いています。これは 以下のような効果がります。

  • 変数 i という文字はコード内で変数として使います
  • 変数 i には数字を格納します

コード内でいきなり i という文字が出てくるとVBA自体がこの i を認識出来なくてエラーを出してきます。そこで 「i というのは変数なんですよ」とVBAに教えてあげる事が必要です。

変数を宣言する事のメリット

3つのメリットがあります。

  • 変数名のミス防止
  • コーディング時の効率Up
  • 他者にも伝わるコードが用意できる

詳細は別記事で紹介しますので今回は「他者にも伝わるコード」が用意できるについて解説します。

変数の宣言をしてVBA自体に「○○は変数ですよ」とコード内に記載する事で自分以外の人がコードを読んだときに変数を使っている事をお知らせする事が出来ます。

Cellsプロパティ

Rangeオブジェクトと同じことができるのがCellsプロパティです。違いは色々ありますが最初はこれだけ覚えてください。

  • 行と列の表記順が違います。Cells(行,列)なのでRange(“列,行”)とは並びが逆です
  • Cellsのかっこ内は数値で指定しますがRangeのかっこ内は文字列(数字)です

行列表記

これは見た目で分かりますね。Cellsプロパティは行が先です。Rangeオブジェクトは列が先です。

Cellsのかっこ内は数値で指定

Cellsのかっこ内はです。Cells(1,1) はセルA1です。かっこ内の後ろの1は列なのでA列を指します。B列は2、C列は3という様に数値が進むと列も進みます。

動画内でも「Cells(2,1)はセルA2です」と例題を挙げて解説していますが慣れないと行の事なのか列の事なのか分からなくなります。

動画の他にここでも2つほど事例を挙げてみます。ゆっくり考えてみて下さい。

  • Cells(1,4)はセルD1です
  • Cells(4,1)はセルA4です

最初は混乱しますがゆっくり考えると分かります。ここは慣れです。

代わってRangeはダブルクォーテーションでセルの番地を挟んでいるので文字列(数字)です。数値ではないのでご注意ください。

繰り返し処理(ForNextステートメント)

マクロ
マクロ

コードはWクリックで選択出来ます。その後「Ctrl+C」でコピー、「Ctrl+V」で貼付けです。

繰り返し処理は色々な方法があります。その中で今回はForNextステートメントについて紹介します。

'****************************************
'基本となる型

Dim 変数名 As Long

'基本形
For 変数名 = 初期値 To 最終値

    '繰り返す内容

Next
'****************************************
'動画内のコード

Dim i As Long '・・・1

For i = 1 To 10 '・・・2

    Cells(i, 1) = "おはよう" '・・・3

Next '・・・4
'****************************************

上段は基本となる型です。型をもとに動画内のコードを再現したのが下段です。下段のコメントにある1~4の番号を使って解説します。

  1. ここで変数iは数値が格納される変数であることを宣言しています
  2. ループの回数は初期値から最終値までです。ループする度に変数iに異なる数値が格納されます。最初は1でループしてくると次に2が入る・・・という流れです。
  3. 最初はiには1が入ってきます。Cells(1,1)になるのでセルA1に文字が記入されます。次のループではiが2になります。Cells(2,1)に文字が記入されます。
  4. NextでコードがForまで戻る様に指示しています。

動画内でコードを実行する際ローカルウインドウにオレンジの線を入れています。ここを見ていただくとループする事で変数iが変化していく状態が分かると思います。

Cellsプロパティは変数とForNextステートメントと相性が良い

今回宣言した変数は数値です。よってこの3つの共通点は数値です。全部同じ数値という型でコードを書く事が出来ます。これがCellsプロパティを使う理由です。

Rangeオブジェクトはかっこ内の値は文字列(数字)でした。よってコード内でRangeオブジェクトを使う事になると都度数値を文字列(数字)に変換する必要があります。

'****************************************
'Rangeオブジェクトを使うコード
Dim i As Long
Dim str As String

For i = 1 To 10
    
    '半角英数のA1を作ってから変数strに格納
    str = StrConv("A" & i, vbNarrow)
    '半角英数の文字列A1をRangeオブジェクトの引数に使用
    Range(str) = "おはよう"

Next
'****************************************

このコードはRangeオブジェクトを使う為にForNextステートメントで生成される変数iの値を半角英数の文字列に作り直して使うという事をやっています。明らかに面倒ですよね。

まとめ

この辺から難しくなってきます。動画でコードを書いて実行していますが見ても良く分からないし説明してほしいというご要望をいただく事があります。

是非オンラインのミーティングを活用ください。ご自身で調べて解決させることが一番ですがある程度まで頑張ったら分かる人に聞くのが効率が良いです。ご連絡お待ちしております。

今回は繰り返し処理の紹介でしたが変数や新しい要素(Cellsプロパティ)を使いました。これらは繰り返し処理と一緒に使われることが多い要素ですのでセットで覚えましょう。

本日勉強したこと
  1. 変数の使い方
  2. Cellsプロパティの使い方
  3. 繰り返し処理の使い方
繰り返し処理は魔法です

マクロ

変数、Cellsプロパティ、繰り返し処理全てもっと深堀りする要素があります。このシリーズを終えたら記事を用意する予定です。

まずはこのシリーズを完結させます。次は条件分岐です。今回の繰り返し処理と組み合わせて使うとさらに色々な事ができる様になりますよ。

次の記事VBAIfステートメントとメッセージボックス2つの機能を組み合わせる

Ifステートメントとメッセージボックスについて解説しています
タイトルとURLをコピーしました