# Excel Vba

> Excel VBA開発の専門スキル。VBAマクロ作成、Excel操作自動化、ワークブック処理時に使用。

- Skill: `majiayu000/excel-vba` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add majiayu000/excel-vba`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/excel-vba/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/excel-vba

---


# Excel VBA開発スキル

## 基本方針
- Option Explicit必須
- エラーハンドリング必須（On Error GoTo）
- 画面更新・計算の制御でパフォーマンス最適化
- 変数は明示的に型宣言

## 標準テンプレート

### Sub プロシージャ
```vba
Option Explicit

Public Sub ProcessData()
    On Error GoTo ErrorHandler

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    ' 処理本体

CleanUp:
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Exit Sub

ErrorHandler:
    MsgBox "エラー: " & Err.Description, vbExclamation
    Resume CleanUp
End Sub
```

## 命名規則
- モジュール: mod_機能名
- プロシージャ: 動詞_目的語
- 変数: キャメルケース（接頭辞付き: str, lng, rng等）

## よく使うパターン

### 最終行取得
```vba
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
```

### 範囲ループ
```vba
Dim cell As Range
For Each cell In Range("A1:A" & lastRow)
    ' 処理
Next cell
```

### 配列処理（高速）
```vba
Dim data As Variant
data = Range("A1:Z1000").Value
' 配列で処理
Range("A1:Z1000").Value = data
```

## パフォーマンス最適化
```vba
' 処理開始時
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

' 処理終了時
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
```

## エラーハンドリングパターン
```vba
On Error GoTo ErrorHandler
' 処理

Exit Sub

ErrorHandler:
    Dim errMsg As String
    errMsg = "エラー番号: " & Err.Number & vbCrLf & _
             "エラー内容: " & Err.Description
    MsgBox errMsg, vbCritical, "エラー"
    ' 必要に応じてログ出力
End Sub
```

## Examples

- `/excel-vba 売上データを集計したい` → ワークシート操作＋集計ロジックのテンプレートを提供
- `/excel-vba 複数のExcelを統合したい` → FileSystemObjectとワークブック操作のパターンを提供
- `マクロが遅い` → パフォーマンス最適化パターン（ScreenUpdating等）を適用
- `エラーでマクロが止まる` → エラーハンドリングテンプレートを提供

## Guidelines

- 必ず `Option Explicit` を宣言して暗黙の変数宣言を禁止
- すべてのプロシージャに `On Error GoTo ErrorHandler` を実装
- 大量データ処理時は配列に読み込んでからループ処理
- 処理前後で `ScreenUpdating` と `Calculation` を制御
- 変数名には型を示す接頭辞を付ける（str, lng, rng, ws等）
- 長いプロシージャは機能ごとに分割して可読性を確保

## 関連エージェント
- `@excel-vba-expert`: VBA開発専門家

