Excel VBA | オブジェクトとコレクション

Excel VBA VBA
スポンサーリンク

Excel VBA の「オブジェクト」と「コレクション」を、初心者向けにやさしく

初めてだと「オブジェクトって何?」からつまずきがち。ここでは、身近なたとえと小さな例題で、手を動かしながら理解できるように説明します。


オブジェクトとは何か

  • ざっくり定義:
    オブジェクト: Excelの中の「もの」そのもの。たとえば「ブック」「シート」「セルの範囲」など。
  • たとえ:
    Excelを「家」に例えると…
    • Application: 大家さん(Excelそのもの)
    • Workbook: 家(ブック)
    • Worksheet: 部屋(シート)
    • Range: 机の上のスペース(セル範囲)
  • 操作の仕方:
    メソッド: オブジェクトに「やってもらう動作」(掃除する、コピーする)
    プロパティ: オブジェクトの「見た目や状態」(色、値、サイズ)

まずはセルを触ってみる(最小の例)

例題1: A1 に「こんにちは」を書く

Sub WriteHello()
    Worksheets(1).Range("A1").Value = "こんにちは"
End Sub
VB
  • ポイント:
    • Worksheets(1): 左から1番目のシート
    • Range(“A1”): A1セル
    • Value プロパティ: セルの中身を設定

例題2: A1 を消す(クリア)

Sub ClearA1()
    Worksheets(1).Range("A1").Clear
End Sub
VB
  • ポイント:
    • Clear メソッド: セルの内容・書式をまとめて消す

コレクションってなに?

  • ざっくり定義:
    コレクション: 同じ種類のオブジェクトをまとめた「グループ」。
    例: Worksheets(そのブック内の全シート)、Workbooks(開いている全ブック)
  • 指定のしかたは2通り:
    • 番号で指定:
      Worksheets(1) → 一番左のシート
    • 名前で指定:
      Worksheets("売上") → シート名「売上」
  • 初心者あるある対策:
    シート名は目視と完全一致が必要。全角・半角・スペースに注意。

例題3: 「売上」シートのB2に数値を入れる

Sub WriteToSalesSheet()
    Worksheets("売上").Range("B2").Value = 12345
End Sub
VB
  • ポイント:
    • シート名が存在しないとエラーになる(まずは作ってから実行)

オブジェクトは階層でつながっている

  • 階層イメージ: Application(Excel全体) └─ Workbooks(複数のブック) └─ Worksheets(複数のシート) └─ Range(セルや範囲) └─ Font(文字の見た目)
  • 短縮形:
    多くの場合「今アクティブなブック・シート」を前提に省略できます(ただし、慣れるまでは明示指定が安全)。

例題4: 2番目のシートのA2を大きく太字に

Sub StyleA2()
    Worksheets(2).Range("A2").Value = "見出し"
    With Worksheets(2).Range("A2").Font
        .Bold = True
        .Size = 20
        .Color = RGB(0, 102, 204) ' 少し落ち着いた青
    End With
End Sub
VB
  • ポイント:
    • With ~ End With: 同じオブジェクトの設定をまとめて書ける

よく使うメソッドとプロパティ(まずはこれだけ)

  • メソッド(動作)
    • Clear: 内容と書式を消す
    • Copy / PasteSpecial: コピーと貼り付け
    • Select: 選択(初心者はよく使うが、慣れたら非推奨。直接Rangeに操作するほうが速く安定)
  • プロパティ(状態)
    • Value: セルの中身
    • Formula: 公式(例 "=SUM(A1:A10)"
    • Interior.Color: 背景色
    • Font.Size / Font.Bold / Font.Color: 文字の見た目
    • NumberFormat: 表示形式(例 "#,##0""yyyy/mm/dd"

例題5: 合計を自動で入れて書式も整える

Sub SumAndFormat()
    With Worksheets(1)
        .Range("B1:B10").Value = 10            ' B1~B10にまとめて 10 を入れる
        .Range("B11").Formula = "=SUM(B1:B10)" ' 合計
        .Range("B11").NumberFormat = "#,##0"   ' カンマ区切り
        .Range("B11").Interior.Color = RGB(255, 255, 204) ' 薄い黄色
        .Range("B11").Font.Bold = True
    End With
End Sub
VB
  • ポイント:
    範囲指定はまとめて操作できる。表示形式と色は見やすさに直結。

コレクションを回す(複数に同じことをする)

例題6: 全シートのA1に日付を入れる

Sub SetDateToAllSheets()
    Dim ws As Worksheet
    For Each ws In Worksheets
        ws.Range("A1").Value = Date ' 今日の日付
        ws.Range("A1").NumberFormat = "yyyy/mm/dd"
    Next ws
End Sub
VB
  • ポイント:
    • For Each: コレクション(Worksheets)を1つずつ順番に処理
    • 失敗しづらい基本形。覚えると一気に楽になる。

よくあるつまずきと回避策

  • シートやブックの特定ミス:
    • 対策: できるだけ「名前」で指定する。外部ファイルならフルパスで開いて、その戻り値を変数に入れて扱う。
  • Select や Activate に頼りすぎ:
    • 対策: 直接オブジェクトを指定して操作(Worksheets("売上").Range("B2").Value = ...
  • 実行対象のブックが違う:
    • 対策: 明示的にブックを掴む。 Sub SafeWorkbookAccess() Dim wb As Workbook Set wb = Workbooks("売上管理.xlsx") wb.Worksheets("2025").Range("A1").Value = "OK" End Sub

練習課題

  • 課題1: 書式整え
    • 目標: シート1のC1~C10に1~10を入れ、合計をC11に出し、C11を太字・薄緑に。
    • ヒント: For i=1 To 10FormulaInterior.Color
  • 課題2: 複数シートに同じ見出し
    • 目標: すべてのシートのA1に「月次レポート」と青太字20pt。
    • ヒント: For Each ws In WorksheetsFont プロパティ
  • 課題3: 名前でセル範囲を扱う
    • 目標: シート「集計」の範囲「Data」(名前定義済み)に一括で「OK」を入力。
    • ヒント: Range("Data") は名前付き範囲にアクセスできる

まとめの一言

  • 核となる考え: 「どのオブジェクトに、何のメソッド(動作)・プロパティ(状態)を使うか」を明確にするだけ。
  • 最初の一歩: RangeのValue、Font、Interior、NumberFormatを自在に操れるようになると、急に楽になります。
  • 次のステップ: ループ(For Each)、With構文、名前指定で「頑丈なコード」に。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました