文書番号: 401698 - 最終更新日: 2003年9月5日 - リビジョン: 1.1

[XL2002]Q&A (VBA Range オブジェクト編)

この記事は、以前は次の ID で公開されていました: JP401698
上記の製品の総称を以下 Excel とします。

目次

すべて展開する | すべて折りたたむ

概要

この資料は、Visual Basic for Applications (以下 VBA) の Range オブジェクトに関する Q&A をサンプル モジュールと共に説明しています。

詳細

<任意のセルに入力する方法>
任意のセルに入力するには、以下のように Range プロパティを用いてセルを指定し、 データの入力を行います。

サンプル 1 : アクティブ ワークシートの任意のセルへ入力するサンプル

次のサンプル モジュールでは、アクティブ ワークシートのセル "$A$1" に文字列 "Hello !!" を入力しています。
       Sub Sample1()
           Range("$A$1").Value = "Hello !!"
       End Sub

サンプル 2 : 任意のワークシートのセルへ入力するサンプル

次のサンプル モジュールでは、ワークシート "Sheet1" のセル "$B$2" に数値 "1234" を入力しています。
       Sub Sample2()
           Worksheets("Sheet1").Range("$B$2").Value = 1234
       End Sub

サンプル 3 : 任意のブックに含まれるワークシートのセルへ入力するサンプル

次のサンプル モジュールでは、ブック "Book1" に含まれるワークシート "Sheet2" のセル "$C$3" に文字列 "1234" を入力しています。
       Sub Sample3()
           Workbooks("Book1.xls").Worksheets("Sheet2").Range("$C$3").Value = _
           "'1234"
       End Sub

サンプル 4 : 任意のブックに含まれるワークシートのセルへ数式を入力するサンプル

次のサンプル モジュールでは、ブック "Book2" に含まれるワークシート "Sheet3" のセル "$D$4" に数式 "=SUM($D$1:$D$3)" を入力しています。
       Sub Sample4()
           Workbooks("Book2.xls").Worksheets("Sheet3").Range("$D$4").Formula = _
           "=SUM($D$1:$D$3)"
       End Sub
<セル範囲への繰り返し入力する方法>
セル座標に変数を指定してデータの入力を繰り返し行うには、以下のように Cells メ ソッドを用いてセルを指定して、データの入力を繰り返しおこないます。また、For Each
 ステートメントを用いてプログラムを簡略化することができます。

サンプル 5 : Cells プロパティを利用して各々のセルに入力するサンプル

次のサンプル モジュールでは、ブック "Book1" に含まれるワークシート "Sheet1" の セル範囲 "$A$1:$J$4" に「 1 から 40 まで」の数値を順番に入力しています。
       Sub Sample5()
           Dim currentRow, currentColumn, Number As Integer
           Number = 1
           For currentRow = 1 To 4
               For currentColumn = 1 To 10
                    Workbooks("Book1.xls").Worksheets("Sheet1") _
                    .Cells(currentRow, currentColumn).Value = Number
                    Number = Number + 1
               Next currentColumn
           Next currentRow
       End Sub

サンプル 6 : For Each ステートメントを利用して各々のセルに入力するサンプル (1)

次のサンプル モジュールは、<サンプル 5> と同じ動作を For Each ステートメ ントを用いることによりプログラムを簡略化し見易くしています。
       Sub Sample6()
           Dim currentCell As Range
           Dim Number As Integer
           Number = 1
           For Each currentCell In Workbooks("Book1.xls").Worksheets("Sheet1") _
           .Range("$A$1:$J$4")
               currentCell.Value = Number
               Number = Number + 1
           Next currentCell
       End Sub

サンプル 7 : For Each ステートメントを利用して各々のセルに入力するサンプル (2)

次のサンプル モジュールは、<サンプル 5> では 繰り返しを行う「開始セル」と 「終了セル」が固定されてしまうことに対応し、「開始セル」と「終了セル」を任
意に指定できるようにしています。
       Sub Sample7()
           Dim currentCell As Range
           Dim wk As Worksheet
           Dim startrow As Integer, startcolumn As Integer
           Dim endrow As Integer, endcolumn As Integer
           Dim Number As Integer
           startrow = 1
           startcolumn = 1
           endrow = 4
           endcolumn = 10
           Set wk = Workbooks("Book1.xls").Worksheets("Sheet1")
           Number = 1
           For Each currentCell In wk.Range(wk.Cells(startrow, _
           startcolumn), wk.Cells(endrow, endcolumn))
                currentCell.Value = Number
                Number = Number + 1
           Next currentCell
       End Sub
<ファイル名に依存しない参照方法>
ブックを指定してセルにデータを入力するコードを、次のように記述する場合が
あります。
       Workbooks("Book1.xls").Worksheets("Sheet1").Range("$A$1") = 1
しかし、この記述ではブックのファイル名が固定されてしまい、ブックのファイ
ル名を変更した場合にエラーが発生してしまいます。ブックのファイル名に依存し
ない参照を行うには、"ActiveWorkbook" や "ThisWorkbook" のようにブックのファイ ル名に依存しないワークブック オブジェクトを返すプロパティを使用します。
ActiveWorkbook プロパティは 現在アクティブとなっているワークブック オブジ
ェクトを返し、ThisWorkbook プロパティは現在実行中のマクロ コードが格納され
ているワークブック オブジェクトを返します。これらのプロパティを使用することに よりブックのファイル名に依存しないプログラミングを行うことが可能です。

サンプル 8 : ActiveWorkbook プロパティを用いてアクティブブックに入力するサンプル

次のサンプル モジュールでは、アクティブ ブックに含まれるワークシート
"Sheet1" のセル "$A$1" に文字列 "Hello !!" を入力後、同じワークシートのセル "$D$1" にセル "$A$1" の値を入力しています。
       Sub Sample8()
           ActiveWorkbook.Worksheets("Sheet1").Range("$A$1").Value = _
           "Hello !!"
           ActiveWorkbook.Worksheets("Sheet1").Range("$D$1").Value = _
           ActiveWorkbook.Worksheets("Sheet1").Range("$A$1").Value
       End Sub

サンプル 9 : ThisWorkbook プロパティを利用してマクロブックに入力するサンプル

次のサンプル モジュールは、<サンプル 8> と同じ動作をアクティブ ブックにで はなく、現在実行中のマクロ コードが格納されているブックに対して行います。
       Sub Sample9()
           ThisWorkbook.Worksheets("Sheet1").Range("$A$1").Value = _
           "Hello !!"
           ThisWorkbook.Worksheets("Sheet1").Range("$D$1").Value = _
           ThisWorkbook.Worksheets("Sheet1").Range("$A$1").Value
       End Sub
<配列を使用して複数のデータを扱う方法>
ワークシートのセルからデータの取得をおこなう際nい、配列を使用して複数のデータを取得するには、Variant 型の変数にデータを受け取ります。

サンプル 10 :配列によってセル範囲の値を取得するサンプル

次のサンプル コードでは、ワークシート "Sheet1" のセル範囲 " $A$1:$B$10" の値を取得し、MsgBox 関数によって画面に表示しています。
       Sub Sample10()
           Dim a As Variant
           Dim i As Integer, b As Integer
           a = Worksheets("Sheet1").Range("$A$1:$B$10").Value
           For i = 1 To UBound(a, 1)
               For b = 1 To UBound(a, 2)
                   MsgBox a(i, b)
               Next b
           Next i
       End Sub
<相対的なセルの参照>
任意のセルを基点として、そこから相対的な位置にあるセルの内容を取得するには、 Offset プロパティを使用します。

サンプル 11 :配列によってセル範囲の値を取得するサンプル

次のサンプル モジュールでは、ワークシート "Sheet1" のセル "$G$5" を基点とし、 「左方向に 2 つ、下方向に 3 つ」の位置にあるセルの値を MsgBox 関数によって
表示しています。
       Sub Sample11()
           MsgBox Worksheets("Sheet1").Range("$G$5").Offset(3, -2).Value
       End Sub
<最後のセルを取得する方法>
任意の列の最下行の Range オブジェクトを取得するには、End メソッドを使用します。

サンプル 12 :任意の列の最後のセルまでを範囲選択するサンプル

次のサンプル モジュールでは、ワークシート "Sheet1" の A 列の最下行 (デー タがないセルの一つ前のセル) を取得し、セル "$A$1" から最下行までのセル範囲 を選択します。
        Sub Sample12()
            Dim EndRange As String
            EndRange = Worksheets("Sheet1").Range("$A$1").End(xlDown).Address
            MsgBox Worksheets("Sheet1").Range("$A$1:" & EndRange).Address
        End Sub

この資料は以下の製品について記述したものです。
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Excel 5.0 Standard Edition
キーワード:?
edition excel5 excel95 excel97 kbhowto offxp qa range vba xl xl10 xl20 xl2000 xl2002 xl2k xl5 xl95 xl97 KB401698
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"