ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
VBA の基本構造
VBA (Visual Basic for Applications) は Excel / Word / PowerPoint 等の Office アプリケーションを自動化するスクリプト言語です。コードはモジュール (Module) に書き、プロシージャと呼ばれる単位で実行されます。
' モジュール先頭で宣言強制
Option Explicit
' Sub プロシージャ (値を返さない)
Sub HelloWorld()
MsgBox "Hello, World!"
End Sub
' Function プロシージャ (値を返す)
Function Add(a As Long, b As Long) As Long
Add = a + b ' 戻り値は関数名に代入
End Function
' 呼び出し例
Sub Main()
HelloWorld
Dim result As Long
result = Add(3, 5) ' = 8
Debug.Print result
End Sub
Option Explicit と変数宣言
VBA は宣言なしでも変数を使えますが、タイプミスでバグになるため必ず Option Explicit をモジュール先頭に置きます。
Option Explicit
Sub VariableExamples()
' 単独宣言
Dim i As Long
Dim name As String
Dim price As Currency
Dim isReady As Boolean
Dim today As Date
' 同一行で複数宣言 (型は個別指定が必要)
Dim x As Long, y As Long, z As Long
' ⚠️ Dim x, y, z As Long → x と y は Variant 型になる!
' 配列
Dim arr(1 To 10) As Long ' 1 〜 10
Dim arr0(9) As Long ' 0 〜 9 (既定)
Dim dynArr() As String ' 動的配列
ReDim dynArr(5) ' 後でサイズ確保
ReDim Preserve dynArr(10) ' 内容保持して拡張
' 定数
Const PI As Double = 3.14159
Const APP_NAME As String = "MyApp"
' オブジェクト型
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
End Sub
主な型:
| 型 | 用途 | サイズ |
|---|---|---|
Long | 整数 (-21億〜21億) | 4 byte |
Integer | 整数 (-32768〜32767)。古い形式、Long 推奨 | 2 byte |
Double | 倍精度浮動小数 | 8 byte |
Currency | 固定小数点 (金額用) | 8 byte |
String | 文字列 | 可変 |
Boolean | True / False | 2 byte |
Date | 日付/時刻 | 8 byte |
Variant | 任意 (既定) | 16 byte+ |
Object | オブジェクト参照 | 4/8 byte |
コメントと改行
' これはコメント (アポストロフィ)
Rem これもコメント (古い書式、ほぼ使わない)
Dim total As Long
total = 100 + 200 + _
300 + 400 + _ ' 行継続 (半角スペース + アンダースコア)
500
Debug.Print total ' → 1500
制御構文
' If
If score >= 80 Then
grade = "A"
ElseIf score >= 60 Then
grade = "B"
Else
grade = "C"
End If
' 1 行 If (古い書式)
If score = 100 Then MsgBox "Perfect!"
' Select Case
Select Case grade
Case "A"
Debug.Print "優"
Case "B", "C"
Debug.Print "可"
Case Is >= "D" ' 比較演算子
Debug.Print "不可"
Case Else
Debug.Print "?"
End Select
' For ループ
Dim i As Long
For i = 1 To 10
Cells(i, 1).Value = i
Next i
' Step 指定
For i = 10 To 1 Step -1
Debug.Print i ' 逆順
Next i
' For Each (コレクション)
Dim cell As Range
For Each cell In Range("A1:A10")
cell.Value = cell.Value * 2
Next cell
' Do While / Loop
Dim n As Long: n = 1
Do While n <= 100
n = n * 2
Loop
' Do Until
Do Until cell.Value = ""
Set cell = cell.Offset(1)
Loop
' Exit For / Exit Do で途中抜け
With ... End With
同じオブジェクトに対する複数操作を簡潔に書ける構文。VBA らしさが最もよく現れる場面です。
' ❌ 冗長
Range("A1").Font.Name = "Meiryo"
Range("A1").Font.Size = 14
Range("A1").Font.Bold = True
Range("A1").Font.Color = RGB(255, 0, 0)
Range("A1").Interior.Color = RGB(255, 255, 0)
' ✅ With で簡潔
With Range("A1")
With .Font
.Name = "Meiryo"
.Size = 14
.Bold = True
.Color = RGB(255, 0, 0)
End With
.Interior.Color = RGB(255, 255, 0)
End With
Range / Cells でセル操作
Sub CellAccess()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
' 単一セル
ws.Range("A1").Value = "Hello"
ws.Cells(1, 1).Value = "Hello" ' 行,列 で指定
' 範囲
ws.Range("A1:C3").Value = "X"
ws.Range(ws.Cells(1, 1), ws.Cells(3, 3)).Value = "X"
' 最終行取得
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' 列全体
ws.Columns("B").AutoFit
' 配列でまとめて書き込み (高速)
Dim arr(1 To 1000, 1 To 1) As Long
Dim i As Long
For i = 1 To 1000: arr(i, 1) = i: Next i
ws.Range("A1").Resize(1000, 1).Value = arr
End Sub
エラーハンドリング
Sub SafeDivide()
On Error GoTo ErrorHandler
Dim x As Double
x = 10 / 0 ' 実行時エラー: ゼロ除算
Exit Sub ' 正常終了パス
ErrorHandler:
MsgBox "エラー番号: " & Err.Number & vbCrLf & _
"内容: " & Err.Description
Err.Clear
End Sub
' エラーを無視 (使い所注意)
Sub IgnoreError()
On Error Resume Next
Dim w As Worksheet
Set w = ThisWorkbook.Worksheets("存在しないシート")
If w Is Nothing Then
MsgBox "シートが見つかりません"
End If
On Error GoTo 0 ' エラートラップ解除
End Sub
命名規則 (推奨スタイル)
- プロシージャ名: PascalCase (例:
CalculateTotal) - 変数名: camelCase (例:
totalAmount) - 定数名: UPPER_SNAKE_CASE (例:
MAX_RETRY) - モジュール名: 機能を表す名詞 (例:
FileUtil,SalesReport) - ハンガリアン記法 (
strName,lngCount) は古い慣習、現代はあまり使わない
デバッグの基本
| キー | 動作 |
|---|---|
| F5 | マクロ実行 |
| F8 | ステップイン (1 行ずつ実行) |
| Shift+F8 | ステップオーバー (Sub 呼出をまとめて実行) |
| F9 | ブレークポイント設定/解除 |
| Ctrl+G | イミディエイトウィンドウ表示 |
| Ctrl+Break | 実行中断 |
Debug.Print x | イミディエイトに出力 |
Stop | 強制中断 (一時的ブレークポイント) |
Excel オブジェクト階層
Application
└ Workbook (Workbooks コレクション)
└ Worksheet (Worksheets コレクション)
├ Range / Cells / Rows / Columns
├ Shape (図形)
├ ChartObject (グラフ)
└ PivotTable
例:
Application.Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1")
→ ThisWorkbook.Worksheets("Sheet1").Range("A1") と省略可能
FAQ
Q: Dim a, b As Long と書いたら a が Variant 型だった
A: VBA の仕様です。Dim a As Long, b As Long のように変数ごとに型指定が必要です。
Q: マクロが遅い
A: 画面更新 Application.ScreenUpdating = False、自動計算 Application.Calculation = xlCalculationManual を冒頭で OFF にし、最後に戻すと劇的に高速化します。セル単位ではなく配列にまとめて代入するのも効果的。
Q: Set と単純代入の違いは?
A: オブジェクト型 (Range / Worksheet など) には Set が必要。プリミティブ型 (Long / String) には Set を付けません。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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アノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?