Excel から学ぶオブジェクト指向入門

1. はじめに

プログラミング初心者にとって「オブジェクト指向(OOP)」という言葉は取っつきにくく感じられがちです。しかし、日常的に使っている Excel の考え方と対応付けると、驚くほどスムーズにイメージできます。本資料では、

  • 行 → インスタンス
  • 列 → プロパティ(属性)
  • 数式 → メソッド(振る舞い)

という対応を軸に、Excel から OOP へ橋渡しする方法を解説します。


2. Excel と OOP の対応表

ExcelOOP 用語説明
1 行(レコード)インスタンスデータの 1 まとまり(具体的な “モノ")
1 列(フィールド)プロパティインスタンスが持つ値・状態
セルの数式メソッド値を計算・操作する振る舞い

ポイント
OOP では「クラス = ひな型」を定義し、そこから生成される具体例が インスタンス です。Excel で言えば「シートの見出し行」がクラス、「各データ行」がインスタンスに相当します。


2.1 クラスとは?

クラスはインスタンス(オブジェクト)の共通する**属性(プロパティ)振る舞い(メソッド)**をまとめた“設計図”です。Excel でたとえると、見出し行(列名)がクラスで定義するプロパティの一覧、セルにあらかじめ組んでおく数式のテンプレートがメソッドに相当します。

ExcelOOP 構成要素
シート名クラス名Student シート ≒ Student クラス
見出し行プロパティ一覧名前 / 数学 / 英語
決まった数式メソッド=AVERAGE(B2:C2) → GetAverage()

WorkSheet とクラスの類似点

  • 新しい行をコピーして追加 ⇒ new 演算子でインスタンス生成
  • 列名を追加 ⇒ クラスにプロパティを追加
  • 全行で同じ数式を再計算 ⇒ すべてのインスタンスでメソッドを呼び出し

覚え方のヒント
クラス = ひな型 / インスタンス = 実体 と覚えると、Excel シートをコピーしてデータを増やす感覚に近い。

// クラス定義(設計図)
public class Student 
{
    public string Name { get; set; }
    public int Math { get; set; }
    public int English { get; set; }
    public double GetAverage() => (Math + English) / 2.0;
}

// インスタンス生成(実体)
var alice = new Student { Name = "Alice", Math = 80, English = 90 };

3. 成績管理シートをクラスへ変換する

3.1 Excel シートの例

|   | A      | B      | C     | D        |
|---|--------|--------|-------|----------|
| 1 | 名前   | 数学   | 英語  | 平均点   |
| 2 | Alice  | 80     | 90    | =AVERAGE(B2:C2) |
| 3 | Bob    | 70     | 85    | =AVERAGE(B3:C3) |

3.2 対応する Student クラス(C#)

public class Student
{
    // 列 → プロパティ
    public string Name { get; set; }
    public int Math { get; set; }
    public int English { get; set; }

    // 数式 → メソッド
    public double GetAverage()
    {
        return (Math + English) / 2.0;
    }
}
  • 行 2 が new Student { Name = "Alice", Math = 80, English = 90 } に対応。
  • GetAverage() が Excel の =AVERAGE(...) と同じ働きをします。

4. Excel 操作 ↔︎ OOP 操作

目的Excel での操作OOP での操作
新しいデータを追加新しい行を挿入new Student(...) でインスタンス生成
値を更新セルを編集プロパティを書き換え
集計・再計算ワークシート全体を再計算メソッドを呼び出す

5. 実践サンプルコード

// 学生データを作成
var students = new List<Student>
{
    new Student { Name = "Alice", Math = 80, English = 90 },
    new Student { Name = "Bob",   Math = 70, English = 85 }
};

// 一覧表示
foreach (var s in students)
{
    Console.WriteLine($"{s.Name}: 平均 = {s.GetAverage():0.0}");
}

実行結果(一例)

Alice: 平均 = 85.0
Bob:   平均 = 77.5

6. 演習問題

  1. 追加プロパティ: 理科 (Science) 列を追加し、GetAverage() が 3 科目平均を返すように改造してみましょう。
  2. 全体平均の計算: すべての学生の平均点を求める GetClassAverage(List<Student>) メソッドを書きましょう。
  3. 成績判定double GetAverage() の結果に応じて “S/A/B/C/D" を返す GetGrade() メソッドを追加しましょう。

7. まとめと次のステップ

  • Excel の行・列・数式を OOP のインスタンス・プロパティ・メソッドに置き換えると、OOP の基本構造が直感的に理解できます。
  • 次は List や Dictionary<TKey,TValue> など、コレクションを取り入れてデータ構造を増やしていきましょう。
  • GUI アプリや Unity でも、「画面上のオブジェクト=クラス」 と考えると応用しやすくなります。

Tips: Excel マクロ (VBA) を触ったことがある方は、マクロでシートのセルを操作するコードと C# のプロパティ/メソッドを比較してみると、更に理解が深まります。

訪問数 2 回, 今日の訪問数 2回