GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBA中級編−ワークシートを使いこなそう
  セルの参照をマスターしよう!
 
■ セルの参照をマスターしよう!

ExcelでVBAを使用するメリットの最たるものは、なんといってもVBAから直接「セル」を操作できることでしょう。これによって、ワークシート上にある様々なデータを取得し、VBAで加工して利用することが可能になります。

今回から、数回にわたってワークシート上のセルを操作するExcel VBAについて解説を行います。これをマスターすることで、現在仕事で使っているワークシートを業務用のアプリケーションとして、利用することができるようになります。

セルを参照する

Excel VBAには、セルを参照する様々な方法が用意されています。これらを使用することで、ワークシートの中の目的のセル、またはセル範囲を自由に参照し、利用することが可能になります。

■Rangeプロパティを使用してセルを参照する
セルを参照するには、Rangeプロパティを使用して、Rangeオブジェクトを取得します。

[書式]
オブジェクト.Range(セル範囲)
または
オブジェクト.Range(開始セル, 終了セル)


オブジェクトにはApplicationオブジェクト、Worksheetオブジェクト、Rangeオブジェクトを指定します。省略した場合は、アクティブシートが対象になります。

セル範囲には、セル範囲を表すA1形式の文字列を、開始セルにはセル範囲の左上端セルを、終了セルには右下端セルをそれぞれ指定します。

(注意)
オブジェクトを省略する場合は、操作の対象となるワークシートをあらかじめアクティブにしておく必要があります。

例:
Range("A1").Select
Worksheets("Sheet1").Range("A1").Select
 
上の例ではアクティブシートの「A1」セルを、下の例では「Sheet1」シートの「A1」セルをRangeオブジェクトのSelectメソッドでそれぞれ選択します。

Rangeオブジェクトとして取得するセル範囲の指定には、他にも様々な記述があります。
指定例 参照するセル 備考
Range("A1") 「A1」セル 単一のセル
Range("A1,C5") 「A1」セルと「C5」セル 複数の単一セル
Range("A1","C5")
Range("A1:C5")
「A1〜C5」セル セル範囲
Range("A1:C5,E1:G5") 「A1〜C5」セルと「E1〜G5」セル 複数のセル範囲
Range("A:C") 「A〜C」列 列範囲
Range("1:5") 「1〜5」行 行範囲

■Cellsプロパティを使用してセルを参照する
単一のセルを参照する場合、Cellsプロパティを使用してRangeオブジェクトを取得することができます。

[書式]
オブジェクト.Cells(行番号, 列番号)

オブジェクトにはApplicationオブジェクト、Worksheetオブジェクト、Rangeオブジェクトを指定します。省略した場合は、アクティブシートが対象になります。

行番号には、対象となるセルの行番号を、列番号には列番号を指定します。列番号には「"A"」のように、ダブルクォーテーションで囲んで、列名をアルファベットで指定することもできます。

(注意)
セルの指定方法は通常、「A1」のように「列、行」の順番で行いますが、Cellsプロパティでは「行、列」の順番で行います。行と列の指定する順番が逆になるので注意してください。

例:
Cells(5, 1).Select
Cells(5, "A").Select

この例ではどちらも、アクティブシートの「A5」セルを選択します。

※ ワークシートの列番号を調べるには、[ツール]メニューの[オプション]より、[全般]タブを選択、[R1C1参照形式を使用する]にチェックを入れることで、シートの列番号を数値で表示させることが可能です。

※ Cellsプロパティの引数を省略した場合、すべてのセルを参照することができます。例えば、「Cells.Select」と記述すると、アクティブシートのすべてのセルを選択します。

■RangeプロパティとCellsプロパティを組み合わせて使用する
CellsプロパティをRangeプロパティと組み合わせて使用することで、セル範囲を参照することができるようになります。

[書式]
オブジェクト.Range(Cells(開始行番号, 開始列番号), Cells(終了行番号, 終了列番号))

開始行番号・開始列番号には、セル範囲の左上端のセルの行番号と列番号を、終了行番号・終了列番号には、セル範囲の右下端のセルの行番号と列番号を、それぞれ指定します。

例:
Range(Cells(1, 1), Cells(5, 3)).Select
Range(Cells(1, "A"), Cells(5, "C")).Select

この例ではどちらも、アクティブシートの「A1〜C5」のセル範囲を選択します。

■その他のセル、セル範囲の指定方法

・[]を使ってセル範囲を参照する。

例:
[A1].Value = "Sample"
[A1:C5].Value = "Sample"

上の例ではアクティブシートの「A1」セルに、下の例ではアクティブシートの「A1〜C5」のセル範囲に、それぞれ「Sample」の文字列を設定します。

・インデックス番号を使用してセルを参照する。

例:
Cells(1).Select
Cells(257).Select

Excel2003までのバージョンでは、上の例では「A1」セルを、下の例では「A2」セルを、それぞれ参照します。

■セルのアドレスを指定せずに、セルを参照する方法
セルのアドレスを明示的に指定できないケースで、あるセルから相対的に位置を指定してセルを参照したり、特定の条件をもつセルを参照したりすることができます。

・Offsetプロパティ
あるセルから相対的に指定した位置にある、セルの参照を取得できます。

[書式]
オブジェクト.Offset(行方向, 列方向)

オブジェクトにはRangeオブジェクトを指定します。

行方向には参照したいセルに対するアクティブセルからの行数を、列方向には参照したいセルに対するアクティブセルからの列数を、それぞれ指定します。

例:
Range("A1").Offset(1, 1).Select
Range("A1").Offset(1, 2).Select

上の例ではアクティブシートの「B2」セルを、下の例では「C2」セルを、それぞれ選択します。

・CurrentRegionプロパティ
指定したセルを含む、表全体を参照します。このとき選択されるセル範囲を「アクティブセル領域」といいます。アクティブセル領域とは、キーボードで[Ctrl]+[*]キーを押したときに選択されるセル領域です。

[書式]
オブジェクト.CurrentRegion

オブジェクトにはRangeオブジェクトを指定します。

例:
Range("A1").CurrentRegion.Select

この例では、アクティブシートの「A1〜C3」のセル範囲にデータが格納されている場合、「A1〜C3」のセル範囲を選択します。

・Endプロパティ
データの入力されているセル領域の終端セルを参照します。

[書式]
オブジェクト.End(参照方向)

オブジェクトにはRangeオブジェクトを指定します。

参照方向には、次のXlDirectionクラスの定数で、参照する方向を指定します。
定数 参照方向 定数 参照方向
xlUp 上端 xlToRight 右端
xlDown 下端 xlToLeft 左端

例:
Range("B2").End(xlUp).Select
Range("B2").End(xlDown).Select
Range("B2").End(xlToRight).Select
Range("B2").End(xlToLeft).Select

この例では、アクティブシートの「A1〜C3」のセル範囲にデータが格納されているものとします。「xlUp」を引数に指定した場合「B1」セルを、「xlDown」を引数に指定した場合「B3」セルを、「xlToRight」を引数に指定した場合「C2」セルを、「xlToLeft」を引数に指定した場合「A2」セルを、それぞれ選択します。


※ Endプロパティでは、基準となるセルと終端セルの間に空白のセルがある場合、空白のセルの1つ手前のセルを取得します。表の最終行のセルを参照したい場合、「xlDown」を引数に指定するのではなく、「xlUp」を引数に指定し、最下行からセルを参照します。例えば「Range("A65536").End(xlUp).Select」ならば、A列の最下行の65536行(Excel2007の場合は1048576行を指定)からデータの入力されている上端のセルを参照することができます。この場合、データが格納されているセル範囲が「A1〜C3」ならば、「A3」セルを選択します。

・SpecialCellsメソッド
指定したセル範囲の中で、条件を満たすすべてのセルを参照します。

[書式]
オブジェクト.SpecialCells(セル種類, 値)

オブジェクトにはRangeオブジェクトを指定します。

セル種類には、次のXlCellTypeクラスの定数を指定します。
定数 内容
xlCellTypeAllFormatConditions 表示形式が設定されているセル
xlCellTypeAllValidation 条件の設定が含まれているセル
xlCellTypeBlanks 空の文字列
xlCellTypeComments コメントが含まれているセル
xlCellTypeConstants 定数が含まれているセル
xlCellTypeFormulas 数式が含まれているセル
xlCellTypeLastCell 使われたセル範囲内の最後のセル
xlCellTypeSameFormatConditions 同じ表示形式が設定されているセル
xlCellTypeSameValidation 同じ条件の設定が含まれているセル
xlCellTypeVisible すべての可視セル

には、次のXlSpecialCellsValuesクラスの定数を使用します。セルの種類にxlCellTypeConstantsまたは xlCellTypeFormulasを指定したとき、特定の種類の定数や数式を含むセルを参照するときに使用します。
定数 内容 定数 内容
xlErrors エラー値 xlNumbers 数値
xlLogical 論理値 xlTextValues 文字

※ 複数の値を+演算子を使用して指定すると、複数の種類の定数や数式を指定することができます。また省略した場合、すべての定数および数式を対象にします。

例:
Range("A1:C3").SpecialCells(xlCellTypeBlanks).Select
Debug.Print Range("A1:C3").SpecialCells(xlCellTypeBlanks).Count

上の例では、アクティブシートの「A1〜C3」のセル範囲にあるすべての空白のセルを選択します。下の例では、空白のセルの個数を、イミディエイトウィンドウに出力します。

(注意)セル範囲にSpecialCellsメソッドで指定したセルがない場合、実行時エラーが発生するので注意してください。

・Selectionプロパティ、ActiveCellプロパティ
現在選択されているセル、またはセル範囲を参照します。

[書式]
オブジェクト.Selection
オブジェクト.ActiveCell

オブジェクトにはApplicationオブジェクト、またはWindowオブジェクトを指定します。省略した場合は、アクティブウィンドウが対象となります。

例:
Sub Test()
  Range("A1:C3").Select
  Debug.Print Selection.Address
  Range("A2").Activate
  ActiveCell.Value = "Sample"
End Sub

このプロシージャを実行すると、アクティブシートの「A1〜C3」のセル範囲を選択し、イミディエイトウィンドウに「$A$1:$C$3」を出力した後、「A2」セルに「Sample」の文字列を設定します。

※ 単一のセルを選択した場合、SelectionプロパティとActiveCellプロパティは同一のセルを参照します。セル範囲を選択した場合、Selectionプロパティは選択したセル範囲全体を、ActiveCellプロパティはアクティブセル(選択したセル範囲で色の付いていないセル)を参照します。

■セルに名前を定義する

・Nameプロパティ
セルやセル範囲に名前を設定するにはRangeオブジェクトのNameプロパティを使用します。セル範囲に名前を付けることで、セル範囲の指定が簡単になります。

[書式]
オブジェクト.Name = 値

オブジェクトにはRangeオブジェクトを指定します。

にはセル範囲に付ける名前を指定します。

例:
Sub Test()
  Range("A10").Name = "合計1"
  Range("A11").Name = "合計2"
  Range("A12").Name = "合計3"
  Range("合計1").Select
End Sub

このプロシージャを実行すると、アクティブシートの「A10」セルの名前が「合計1」に、「A11」セルの名前が「合計2」に、「A12」セルの名前が「合計3」に定義されます。次に、定義した名前の「合計1」を使用してセルを選択します。「合計1」という名前が付いた「A10」セルが選択されます。

・Namesプロパティ
セルやセル範囲に付けられた名前を参照するにはWorkbookオブジェクトのNamesプロパティを使用します。また名前を削除するにはDeleteメソッドを使用します。

[書式]
オブジェクト.Names(名前)

オブジェクトには、Applicationオブジェクト、Workbookオブジェクトを指定します。省略すると作業中のブックが対象となります。

名前には、定義した名前のインデックス番号または名前そのものを指定します。

例:
Sub Test()
  Dim o As Object
  For Each o In ActiveWorkbook.Names
    Debug.Print o.Name & Space(2) & o.RefersTo
  Next
End Sub

このプロシージャを実行すると、アクティブブックに定義されたセルの名前の一覧をイミディエイトウィンドウに出力します。「Sheet1」シートの「A10」セルに「合計1」、「A11」セルに「合計2」、「A12」セルに「合計3」の名前が定義されている場合、次の結果が出力されます。
合計1 =Sheet1!$A$10
合計2 =Sheet1!$A$11
合計3 =Sheet1!$A$12
またコードの最後に「ActiveWorkbook.Names("合計3").Delete」の記述を追加すると、「A12」セルに定義された名前「合計3」が削除されます。


以上、セルを参照するいろいろな方法について解説しました。
目的のセル範囲を自由に操作するためには、そのセル範囲を正確に参照する操作が必要不可欠です。そのためには、今回の解説について十分な理解をしている必要があります。

次は、セルを選択する様々な方法について詳しく解説を行います。

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,