朋亮VBA構造の用語とRange・Cellsの違いと正しい使い分けツイートシェアはてブLINEPocket今回はVBAの初心者講座第5弾です。【VBAの押さえておきたい用語とRangeとCellsの使い方の違い】についてのお話です。専門用語ばかりでは飽きてしまうのでセルの操作の基本的な使い分けについてお話してきましょうVBAは聞き慣れない横文字が結構出てきますが、全部を覚えなくても大丈夫です。全体的に耳慣れしておけば、問題無いのでサクッと用語などを押さえていきましょう。まとめプロジェクト・モジュール・プロシージャ・ステートメントって何?VBAには「プロジェクト」「モジュール」「プロシージャ」「ステートメント」という用語があります。聞き慣れない横文字が多くて混乱しますが、この4つを簡単に例えると「マトリョーシカ」みたいなものです。ロシア土産として有名なマトリョーシカは、大きな人形の中に小さな人形がたくさん入っていますよね。ちみにマトリョーシカは、こんなオモチャです。「プロジェクト→モジュール→プロシージャ→ステートメント」といった感じで、規模がだんだん小さくなっていきます。画像で見てみましょうまず、プロジェクトについてです。VBAProject(用語集.xlsm)というのがプロジェクト(Project)という部分です。()内はファイル名なので「用語集.xlsm」というファイルのプロジェクトという意味になりますプロジェクトとは、直訳すると「大規模な計画」という意味なのでこれから細かいことを決めていく「大枠」のようなものですね。次はモジュールについてですモジュール(module)は、「ブック・シート・標準」などに分かれていて、簡単に言うとコードを書く場所のことです。コードは「標準モジュール」に書くということだけ分かっていれば大丈夫です。モジュールとは、直訳すると「基本単位」という意味です。VBAの場合「基本的にコードを書く場所」だよと思っておけば大丈夫です。次はプロシージャについてですプロシージャ(procedure)は、コードを書く枠のことです。SubがプロシージャでSubプロシージャと言いますプロシージャとは、直訳すると「手順」という意味です。「プロシージャB」という2つの手順の中にそれぞれのメッセージを表示してね。いうコード(手順)を書いているということですね。Sub・Dim・Callなど最小単位のプログラムのことを言います「Subステートメント」や「Ifステートメント」などと言い表すことができますねステートメントとは、直訳すると「述べること」という意味です。要はこれは「Subステートメント」だよと宣言するような感じです。正確にはそういう呼び方をするんだな。こんな風に大きさがだんだんと小さくなって収納されているマトリョーシカのように、範囲がだんだんと小さくなっていく呼び方の専門用語があると思っていれば大丈夫です。「モジュール」はよく出てくるのでこれだけは、覚えておいて損はないですよ。RangeとCellsの違いと使い分けVBAの基本でもあるセルの選択には、2種類の方法があります。Range(レンジ)を使う方法とCells(セルス)を使う方法の2種類です。どちらも基本は、ワークシートのセルに対して何かを行う時に使います。同じセルに対して操作するなら、どうして2種類なのかよく分からないしどっちを使ったら良いか迷いますよね。私がオススメする使い分けの方法はシンプルです。「セルの範囲を対象にしたいならRange」を使いましょう「単体のセルを対象にするならCells」を使いましょうただ、RangeとCellsを合体させる使い方も結構多いので両方セットで覚えるのがベストです。Cellsの基本的な使い方について知っておきましょう。Rangeの基本的な使い方は第2弾で解説しているのでそちらを見て下さいね。VBAの便利な初期設定とRangeを使った初めてのプログラミングCellsの使い方は、すごく簡単です。「Cells(行数,列数)」で指定してターゲットのセルの値を取得したり、書き込んだりすることが出来ます。今回の場合は「1行1列」つまり「A1」のセルの内容を取得したということですね。それをメッセージボックスで表示させているのが今回のコードです。RangeとCellsの大きな違いは、Rangeはセル範囲を指定出来ますがCellsは1つのセルしか指定できません。聞くとRangeの方が使い勝手が良さそうですが、Rangeには大きな弱点があります。それは、柔軟な範囲選択が苦手なことです。行数が増えたり減ったりする範囲を選択する場合、両方を組み合わせる必要が出てきます。文章だけでは伝わりづらいので次は、柔軟な範囲を選ぶ方法について触れていきましょう。RangeとCellsを使って柔軟にセル範囲を選択してみようまず、Rangeを使って指定の範囲を選択してみましょう。範囲の指定は、「Range(“a2:b11”).Select」で指定できます。コレを日本語にすると「Range(“A2セル~B11セル”)を選択する」という意味になります。「”a2:b11′′」がポイントで「”」(ダブルクォーテーション)で範囲を囲むのは基本と同じで「:」(コロン)で2つのセルを結ぶと、「~」という意味になります。「A2セル~B11セル」を指定したという意味になりますよね。「.Select」(選択するという意味)は、いわゆる「RangeオブジェクトのSelectプロパティ」を使ったので「Rangeで指定した範囲を選択してね」という意味になります。これが、Rangeの使い方でCellsでは出来ない操作方法になります。ランキングが15位まで増えたとしましょうその場合は、どうしますか?もちろんこの方法も有りです。単純に「B16セル」まで範囲を伸ばしました。ここで重要なのは、この対策方法では実務では到底使えないですよね。理由は範囲が変わるたびにいちいちコードを書き直さないといけないからです。これじゃ、VBAが使える人じゃないと変更出来ないし項目が減ったり増えたりするたびに書き換えるのか?って話になっちゃうので考え方を変える必要があります。すればコードを書き換えること無く項目に増減があっても範囲を自由に変更出来ると思いますか?答えは、入力されている最終行数を自動的に取得して、Rangeの範囲も最終行数に自動的に変更されれば良い訳です。2))」の部分ですね。Range(“a2:b16”)の「”」「:」が無くなって「,」に変わっています。「”」は必要が無くなり「:」→「,」に変わりますが意味は同じです。「MaxRow」には最終行数である16という数字が入っているので結果は変わりません今回のパターンは、変数が出てきたり最終行数を取得する方法が追記されていますが、追記分は今は無視して大丈夫です。2)).Select」の部分は、行数が増えても減ってもコードを書き換える必要もなく自動的に範囲を調整してくれます。今は、難しいですがこれを日本語に変えて解説すると次のような感じになります。「Range(Cells(2行,1列)~Cells(最終行,2列))の範囲を選択する」という意味になります。RangeとCellsを組み合わせることで柔軟なセル範囲を選択出来るようになります。Rangeだけでも柔軟な範囲選択をすることは出来ますが、分かりづらいのでこんな風にRangeとCellsで自由な範囲を選択出来るということを覚えておいて下さい。この方法は、実務でよく使う技なので柔軟な範囲を選びたい時の定番はこれなんだ。いうところまで覚えておいてくださいね。これが、RangeとCellsの上手な使い方です。VBAの基本中の基本でちゃんと分かっていれば、いつまでも活躍するスキルなので是非覚えておきましょう。まとめ今回は、プロジェクト・モジュール・プロシージャ・ステートメントやRangeとCellsの違いについてお話してきました。プロジェクトなどは、VBAを書いていく場所の大きさ(階層)や単位にはそういった言い方があるんだよということでしたね。RangeとCellsではセルの範囲と1箇所のセルを指定するという違いがあり、2つを組み合わせることで柔軟な範囲選択ができるということが分かってもらえたでしょうか?今の段階では、まだ難しく感じると思いますがこの方法はいつまでも使える応用力のある方法なので、何となくでいいので覚えておいてほしい方法の紹介でした。色々な用語やセルの選択の方法の違いなど、最初は覚えることが多いですが詳しい用語は後で覚え直してもOKです。今は全て覚えなくても問題は無いですよ。用語に耳慣れして、セル選択の使い方も何度も出てくるのでそのうち手が慣れてきます。続けることが大切なので、分からないところで立ち止まらずまずは、一つでも自由に扱えるようになることを当面の目標にして頑張ってみて下さい。それでは、また次回お会いしましょう。読み込み中...Excelvbaこの記事が気に入ったらいいねしよう!最新記事をお届けします。コメントをキャンセルメールアドレスが公開されることはありません。新しい投稿をメールで受け取るΔWindows11の特徴を分かりやすく解説VBAを勉強するなら目的と出来ることをハッキリさせるとこが最重要RECOMMENDこちらの記事も人気です。ともあき)Excel・Word・ブログ・アウトドアが大好きです。2005年母の経営するエステサロンで仕事を始める→25歳の時にゲーム業界転職を目指すも挫折→Officeの講師業・IT企業へ就職して失敗→現在エステサロンに復帰し運営しています。零細企業や女性を中心にOfficeの悩みの解決や仕事の効率化などの活用方法を発信しています。(必須)サイト%d人のブロガーが「いいね」をつけました。