ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
VBA とは
VBA (Visual Basic for Applications) は、Microsoft Office に組み込まれているプログラミング言語です。Excel・Word・Access・PowerPoint・Outlook など、ほぼ全ての Office アプリで動作し、ユーザーが手作業で行う操作をマクロとして自動化できます。1993 年に Excel 5.0 で初登場、30 年以上経った現在も事務職の業務自動化の主役として現役です。
| 項目 | 内容 |
|---|---|
| 正式名称 | Visual Basic for Applications |
| 言語仕様 | VB6(Visual Basic 6.0)ベース、オブジェクト指向(一部) |
| 動作環境 | Microsoft Office(Windows / macOS)、AutoCAD など一部のサードパーティ製品 |
| ファイル形式 | .xlsm(Excel)、.docm(Word)、.accdb(Access) |
| 用途 | 業務自動化、データ加工、レポート生成、ユーザーフォーム構築 |
| 後継候補 | Office Scripts(Excel Online)、Python in Excel、Power Automate |
VBE (Visual Basic Editor) の起動
VBA コードを書くには VBE を起動します:
- Excel を開く
- ファイル → オプション → リボンのユーザー設定 → 開発にチェック(初回のみ)
- リボンの 開発タブ → Visual Basic をクリック(または Alt + F11)
- VBE が開く → 挿入 → 標準モジュール でコード記入欄を作る
Hello, World — はじめての VBA
Sub HelloWorld()
MsgBox "Hello, VBA!"
End Sub
F5 キー or VBE の「実行」で動作。Excel に戻って 開発 → マクロ → HelloWorld → 実行 でも OK。
変数とデータ型
Sub VariableSample()
Dim name As String
Dim age As Long ' Integer (16bit) より Long (32bit) 推奨
Dim price As Double
Dim isActive As Boolean
Dim today As Date
name = "Yamada"
age = 30
price = 1980.5
isActive = True
today = Now
Debug.Print name & " / " & age & " / " & today
End Sub
| 型 | 用途 | 範囲 |
|---|---|---|
| Long | 整数(推奨) | -2,147,483,648 ~ 2,147,483,647 |
| Double | 小数 | 倍精度浮動小数点 |
| String | 文字列 | 最大 2GB |
| Boolean | 真偽値 | True / False |
| Date | 日付・時刻 | 西暦 100 年 1 月 1 日 ~ 9999 年 12 月 31 日 |
| Variant | 任意型(既定) | 遅い・型不明確になるので明示推奨 |
モジュール冒頭に Option Explicit を書くと変数宣言が必須になり、タイプミスを検出できます(必須習慣)。
セル操作の基本
Sub CellSample()
' セル A1 に値を書き込み
Range("A1").Value = "氏名"
Cells(1, 2).Value = "年齢" ' B1
' セル範囲に一括書き込み
Range("A2:A4").Value = Application.Transpose(Array("Yamada", "Tanaka", "Suzuki"))
' 書式設定
Range("A1:B1").Font.Bold = True
Range("A1:B1").Interior.Color = RGB(255, 235, 100)
' 最終行を取得
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Debug.Print "最終行: " & lastRow
End Sub
主要オブジェクトモデル
| オブジェクト | 意味 | 例 |
|---|---|---|
| Application | Excel 本体 | Application.ScreenUpdating = False |
| Workbook | ブック (.xlsx) | Workbooks("Book1.xlsx") |
| Worksheet | シート | Worksheets("Sheet1") |
| Range | セル範囲 | Range("A1:B10") |
| Chart | グラフ | ActiveSheet.ChartObjects(1) |
| PivotTable | ピボット | ActiveSheet.PivotTables(1) |
制御構文
' If 文
If age >= 20 Then
Debug.Print "成人"
ElseIf age >= 13 Then
Debug.Print "中高生"
Else
Debug.Print "子供"
End If
' For ループ
Dim i As Long
For i = 1 To 10
Cells(i, 1).Value = i * 2
Next i
' 全行をループ
Dim r As Range
For Each r In Range("A2:A100")
If r.Value = "" Then Exit For
r.Offset(0, 1).Value = r.Value & " 様"
Next r
' Do While
Dim n As Long
n = 1
Do While n <= 5
Debug.Print n
n = n + 1
Loop
' Select Case
Select Case score
Case Is >= 90: rank = "A"
Case 70 To 89: rank = "B"
Case Else: rank = "C"
End Select
イベントマクロ
セル変更・ブック開閉・シート切替などに反応する自動実行マクロを書けます。シート名タブ右クリック → コードの表示 で記述:
' Sheet1 のセル変更時に発火
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Target.Offset(0, 1).Value = "更新: " & Now
End If
End Sub
' ブックを開いた瞬間
Private Sub Workbook_Open()
MsgBox "ようこそ"
End Sub
' ブックを閉じる直前
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If MsgBox("本当に閉じますか?", vbYesNo) = vbNo Then Cancel = True
End Sub
UserForm(GUI)
VBE で 挿入 → ユーザーフォーム。テキストボックス・ボタン・コンボボックス等を配置し、コードでイベント処理:
' フォーム上の CommandButton1 クリック
Private Sub CommandButton1_Click()
Dim name As String
name = TextBox1.Value
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = name
Unload Me
End Sub
' フォーム呼出(標準モジュールから)
Sub ShowForm()
UserForm1.Show
End Sub
パフォーマンス最適化
Sub FastProcessing()
' 画面更新・計算・イベントを停止
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
' 配列で一括処理(セル単位より 100 倍速い)
Dim data() As Variant
data = Range("A1:C10000").Value
Dim i As Long
For i = 1 To UBound(data, 1)
data(i, 3) = data(i, 1) * data(i, 2)
Next i
Range("A1:C10000").Value = data
' 戻す
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
保存形式と配布
| 拡張子 | マクロ | 用途 |
|---|---|---|
| .xlsx | 不可 | 通常のブック(マクロは保存されない) |
| .xlsm | 可能 | マクロ有効ブック(通常) |
| .xlsb | 可能 | バイナリ形式、大容量で高速 |
| .xltm | 可能 | マクロ有効テンプレート |
| .xlam | 可能 | アドイン(複数ブックで共有) |
VBA の後継・代替
| 技術 | 位置付け | 得意分野 |
|---|---|---|
| Office Scripts | TypeScript、Excel Online / デスクトップ両対応 | クラウド時代、Power Automate との連携 |
| Python in Excel (2024+) | クラウドで Python を実行、Anaconda 同梱 | データ分析、機械学習、可視化 |
| Power Automate | GUI フロー、RPA | クロスアプリ自動化、承認フロー |
| Power Query / M | データ取得・変換 | ETL、定期更新の整形 |
| VBA | Office 内蔵、ローカル動作 | 既存資産、オフライン業務 |
FAQ
Q: VBA はもう古い?学ぶ価値ある?
A: 日本企業の事務職では現役。Office Scripts も普及途上で、レガシー資産の保守人材は不足気味。学習コストの割に投資効率は高い。
Q: マクロが「セキュリティ警告」で動かない
A: ファイル → オプション → トラスト センター → マクロの設定 で許可。または信頼できる場所に保存。
Q: Mac の Excel でも動く?
A: 動きますが、Windows API(Win32 宣言)を使うコードは不可。#If Mac Then で分岐。
Q: Python in Excel と VBA はどちらを選ぶべき?
A: ファイル操作・UI 自動化は VBA。データ分析・グラフ生成は Python in Excel。両者は同じシートで併用可能。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?