HOME > 即効テクニック集 > Excel VBA > その他関連のテクニック > オブジェクトを返すメソッド
その他関連のテクニック

オブジェクトを返すメソッド

(Excel 97/2000/2002/2003/2007)
ブックを開くときはWorkbooksコレクションのOpenメソッドを実行します。
次のコードは、C:\Book1.xlsを開きます。

Sub Sample1()
  Workbooks.Open "C:\Book1.xls"
End Sub   
Excelは、開いたブックがアクティブブックになりますので、続けて、開いたC:\Book1.xlsを操作するときは、アクティブブックを操作の対象にします。
Sub Sample2()
  Workbooks.Open "C:\Book1.xls"
  ActiveWorkbook.Sheets("Sheet2").Activate
End Sub   
このように、単一のブックだけを操作するときは、アクティブブックを操作すればいいのですが、複数のブックを操作する場合は、アクティブブックに頼っているとコードが煩雑になります。 そんなときは、Openメソッドで開いたブックをオブジェクト変数に格納しましょう。
Sub Sample3()
  Dim wb As Workbook
  Set wb = Workbooks.Open("C:\Book1.xls")
  wb.Sheets("Sheet2").Activate
End Sub   
Openメソッドは、開いたブックを返します。 その返り値(ブック)をオブジェクト変数に格納します。 オブジェクト変数に格納するときは、Setステートメントを使います。 また、返り値を利用するのですから、メソッドの引数を括弧で囲みます。 このように、メソッドが返すオブジェクトを変数に格納するとその後の操作が楽になる場合が多いです。 次のコードは、非表示のワークシートを作業用として使います。
Sub Sample4()
  Dim ws As Worksheet, OldSheet As Worksheet
  Set OldSheet = ActiveSheet
  Application.ScreenUpdating = False
  Set ws = Worksheets.Add
  ws.Visible = False
  OldSheet.Activate
  Application.ScreenUpdating = True
  With ws
    .Range("A1").Value = 10
    .Range("A2").Value = 20
    MsgBox "答は" & .Range("A1").Value + .Range("A2").Value & "です"
    Application.DisplayAlerts = False
    .Delete
    Application.DisplayAlerts = True
  End With
End Sub   
次のコードは、2つのコメントに計算結果を表示します。 アクティブシートのセル範囲A1:A10に任意の数値を入力してから実行してください。
Sub Sample5()
  Dim com1 As Comment, com2 As Comment, I As Long, buf As Long
  Set com1 = Range("C3").AddComment
  Set com2 = Range("C4").AddComment
  For I = 1 To 10
    buf = buf + Cells(I, 1).Value
  Next I
  com1.Text "合計:" & buf
  buf = 0
  For I = 1 To 10
    If buf < Cells(I, 1).Value Then buf = Cells(I, 1).Value
  Next I
  com2.Text "最大値:" & buf
End Sub