文書番号: 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 Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。" |
|
先頭へ戻る
