VBAVBAでセル/セル範囲を指定するために使用する、Range,Cellsの基本的な使い方を解説します。他シート/他ブックのセル範囲を変数で指定する使いたい変数が「最終行」の場合おまけ:変数名について単独のセルを指定する場合A1セルを指定するコード単独のセル「A1」を指定する場合は、以下の3通りの書き方ができます。"A")Rangeを使う場合はセルアドレスをそのまま入力できます。列番号)とカンマで行と列を区切って指定します。この時、列番号には数値を入れてもアルファベットを入れても問題ありません。後ほど説明しますが、Cellsで書くメリットは「中身に変数を使えること」です。よって、ただ「A1セル」を指定したいとき(≒変数がいらないとき)は、Range("A1")と書いておくのがわかりやすいですね。セルに値を代入する以下のコードで「A1セルに1を入力」することができます。1同じ処理をしたいとき、RangeとCellsで書き方が変わることは基本ありません。セルの値を使用する以下のコードのようにセルの値を使用できます。Range("A1")前述の通り、Rangeの部分をCellsで書いても同じように動きます。セルの値をシート名に使用するなど、関数ではできないことを簡単に実行できるのはVBAの良さですね。他のシートのセルを指定する以下のコードで他のシートのセルを指定できます。シートの番号(左から何番目のシートか)で指定するWorksheets(1).Range("A1")例えば以下のコードで、そのシートを選択せずに別のシートの値を変更できます。1現在のシート以外のシートを扱えるのも、VBAの良さですね。ちなみに、最初に使ったシートを指定しない場合のRange("A1")このコードは「現在選択しているシート」のA1セルを指しますが、この「現在選択しているシート」をActiveSheetと呼び、ActiveSheet.Range("A1")でも同じ指定ができます。言い換えると「Range("A1")はActiveSheet.Range("A1")の省略形」ということですので、こちらも覚えておきましょう。他のブックのセルを指定する以下のコードで他のブックのセルも指定できます。Workbooks("Book1.xlsx").Worksheets("○○").Range("A1")ただし、このブックは開いている必要がありますのでご注意ください。ブックも番号(開いた順番)で指定することが一応できますが、シート番号と違い開くたびに変わる数字なため基本は使用しません。単独セルの解説については以上です。この書き方が基本となりますので覚えておきましょう。複数のセルに同じ処理をしたい場合は、Forステートメントを使った繰り返し処理を行います。以下の表のD列を計算するコードがこちらです。C列(個数)という計算を、2行目から7行目まで行うコードです。このコードは「VBAプログラミングの基本コード」ですので、しっかりマスターしておいて下さい。一括で処理されているわけではなく、1セルずつ順番に処理をしています。・・・よってセルの指定自体は「ひとつのセルを指定」しているのに変わりありません。"A")この3つがあると説明しました。「変数を使いたい=ループ処理を書きたい場合はCells」と覚えておけばOKです。4)と使い分けた通りです。Cellsの「列」に数字を使うかアルファベットを使うかは自由です。表がAA列を超えるなど読みやすさを重視したい場合はアルファベットあたりの理由を参考に、好みの方法を選んで書けばOKです。3)Nextと、このままではかなり読みづらいコードになってしまいます。シートだけでもこれなので、さらにブックの指定なんて書けません。"C")Nextなどの方法があります。シートの指定方法を勉強したい方は、以下の記事をご参考ください。www.limecode.jpこれで複数セルをFor文で処理する場合の解説を終わります。まとめとしては、A1など固定されたセルである場合はRange変数を使いたい=ループ処理を書きたい場合はCellsを使用すればよいと覚えておきましょう。最後に「セル範囲」へ一括で処理を行う場合のコードを解説します。以下のコードでセル範囲を指定できます。Range("A2:A7")シート関数の「SUM」の中身でもお馴染の「開始セル:終了セル」という指定で、Rangeによるセル範囲の取得も行うことができます。0)など、セル範囲.○○というコードでいろいろな処理を実行できます。出てくる書き方ですのでしっかり覚えておきましょう。値貼り付けができます。手作業の「コピー⇒値貼り付け」はコードにすると大変なのですが、このコードは単純明快でしかも高速ですので活用してみてください。セル範囲を変数で扱いたい場合RangeにはRange("セルアドレス")のほかにもう一つの書き方があります。終了Cells)と、RangeとCellsを組み合わせる方法です。A2:A7セルをその書き方で書くと以下のコードになります。1))開始セルと終了セルをそれぞれCellsで指定して、それをカンマ区切りでRangeに渡すことでもセル範囲が指定できます。最終行である「7」を変数で扱う場合は以下のコードになります。1))これで最終行がシートによって異なる場合でも、セル範囲を自動的に取得して処理できるようになりました。Cells)という書き方も、これから先たくさん書くことになる基本コードです。マスターしておきましょう。ここまでのコードをまとめると、A1やA2:A7など固定されたセル/セル範囲である場合はRange変数を使ってループ処理を書きたい場合はCells変数を使ってセル範囲を指定したい場合はRange(Cells,Cells)と使い分ければよいということになります。1))と、中身のCells両方にシートの指定を付ければOKです。この指定を忘れるとエラーになりますのでご注意ください。1))などを活用してください。1))このようにRangeのシート指定はあってもなくてもOKです。個人的にはあった方が見やすいので、見やすさ重視で「Range(Cells,Cells)は3つすべてにシート指定を付ける」と覚えてしまってもよいと思います。再掲になりますが、シート指定の方法についてはこちらを参考にしてください。実はもっと簡単にセル範囲を指定できる方法があります。最終行)このコードのように、「セルアドレスを文字列結合で作る」方法でも、セル範囲を指定することができます。最終行)これで済むためとても使い勝手が良いです。最終行以外にも変数を使いたい場合は使えない手法のため万能ではないですが、この方法はとても便利ですのでぜひ活用してください。以上でRange,Cellsを使用したセル/セル範囲の指定方法の解説を終了します。Range,Cells、正確には「Rnageプロパティ」「Cellsプロパティ」は、VBAの核となるプロパティで、初級者から上級者まで全員が使います。快適なVBAライフのお供としてください。セル範囲の指定方法はRange,Cells以外にもたくさんあり、もっと簡単で便利に書ける方法もあります。A2:A〇セルの「〇はわからないけどデータ数はわかっている場合」は、Range("A2").Resize(データ数)なんていう書き方もできます。直観的で読みやすいですよね。いろいろなセル範囲の取得方法については以下の記事にまとめています。興味がある方は、ぜひのぞいていってください。変数名についても軽く解説しておきます。3)Nextこのように行を「Row」の頭文字Rで表しました。3)Nextこんな風に書くことも可能です。自分なりにわかりやすい変数名にするとよいです。3)Nextと書かれているコードを見かけるかもしれません。この「i」は整数(Integer)の頭文字に由来していて、ループに使う変数は「i」を使うプログラミング文化があります。行列はR,Cなど「行と列だとすぐわかるもの」にした方がいいと思います。k)流石に前者の方が読みやすく間違えにくいです。人のコードを読むために文化としては覚えておきましょう。この変数名の考察についてはこちらをどうぞ。23:55Tweet関連記事2022-12-06ロックされていないセルをすべて選択/クリアするロックされていないセルをすべて選択/クリアする方法を解説しま...2021-01-19偶数シートなど飛び飛びのシートをループする偶数番のシートや、3つおきのシートなど、規則性がある飛び飛び...2020-09-13RangeとCellsの違いセルを指定するプロパティ、RangeとCellsの違いを解説します。「日本語の変数でプログラミングすれば、みんなが幸せになれる」という思想の元、主にExcelVBAのマクロやコードを解説しているブログです。この思想については↓の記事をご覧ください。変数を日本語にすればプログラミングが上達する記事の更新通知や質問の回答はTwitterでも行っております。お気軽にフォローください。12はてなブログをはじめよう!LimeCodeさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。