拡張子とはファイル名の末尾についている「.xlsx」「.xlsm」などの文字列で、ファイルの種類を表します。VBAでファイルを扱うときは拡張子を正しく指定することが大切で、特にマクロを保存するには .xlsm 形式が必須です。
この記事では、次の内容を順番に解説します。
- Excelでよく使う拡張子の種類と違い
- マクロを保存するときの注意点
- Windowsで拡張子を表示する方法
- VBAでファイルを指定するときの注意点
Excelでよく使う拡張子の種類は?
| 拡張子 | 説明 | マクロの保存 |
|---|---|---|
.xlsx | 通常のExcelファイル | ×(マクロは保存できない) |
.xlsm | マクロ対応のExcelファイル | ○ |
.csv | データだけを保存するファイル | × |
.xls | Excel2003以前の古い形式 | ○(古い形式) |
.pdf | 見た目そのままで保存するファイル | × |
マクロを保存するときの注意点は?
マクロが入っているファイルを保存するときは、必ず .xlsm 形式で保存してください。.xlsx で保存しようとすると「マクロが削除されます」という警告が出ます。このまま保存してしまうとマクロが全部消えてしまうので注意が必要です。
保存するときは「名前を付けて保存」→ファイルの種類を「Excelマクロ有効ブック(*.xlsm)」に変更してから保存してください。
Windowsで拡張子を表示するには?
Windowsの初期設定では拡張子が表示されていない場合があります。VBAでファイルを扱うときに拡張子が見えないと混乱することがあるので、表示するようにしておきましょう。
Windows 11の場合
- エクスプローラーを開く
- 上部メニューの「表示」をクリック
- 「表示」→「ファイル名拡張子」にチェックを入れる
Windows 10の場合
- エクスプローラーを開く
- 上部メニューの「表示」タブをクリック
- 「ファイル名拡張子」にチェックを入れる
VBAでファイルを指定するときの注意点は?
VBAでファイルを開いたり保存したりするときは、拡張子も含めてファイル名を指定します。同じ名前でも拡張子が違えば別のファイルとして扱われます。
' 正しい指定(拡張子あり)
Workbooks.Open "C:¥データ¥売上.xlsx"
Workbooks.Open "C:¥データ¥売上.xlsm" ' 上とは別ファイル
ファイルを指定するときは、拡張子まで正確に書くようにしましょう。拡張子が表示されている状態でファイル名を確認してからコードを書くと間違いが減ります。
VBAでファイルの拡張子を取り出すには?
ファイル名から拡張子だけを取り出したい場合は、InStrRev と Mid を組み合わせます。
Dim fileName As String
Dim ext As String
fileName = "売上データ.xlsx"
ext = Mid(fileName, InStrRev(fileName, ".")) ' → ".xlsx"
まとめ
- マクロを保存するには .xlsm が必須:.xlsxで保存するとマクロが消えてしまう。
- 拡張子は表示しておく:Windowsの設定でファイル名拡張子を表示にしておく。
- VBAでは拡張子まで正確に指定する:同じ名前でも拡張子が違えば別ファイル。
よくある質問
xlsx形式で保存したらマクロが消えてしまった場合は?
一度xlsxで保存してしまうとマクロは消えてしまい、元に戻すことはできません。ただし、保存前の状態がまだ開いていれば「名前を付けて保存」でxlsm形式に変更して保存し直せます。今後のために「マクロを含むファイルは必ずxlsmで保存する」という習慣をつけましょう。
csvファイルをVBAで開くときの注意点は?
csvファイルは Workbooks.Open "ファイルパス.csv" で開けますが、文字コードによっては文字化けすることがあります。また、csv形式ではシートが1枚しか保存されず、書式や数式も保存されません。データの受け渡し用途に使うのが基本です。
xlsとxlsmの違いは?
.xlsはExcel2003以前の古い形式で、マクロを保存できます。ただし現在のExcel(2007以降)では.xlsmが標準形式です。古いシステムとのやりとりで.xlsが必要な場合以外は、.xlsmを使うのがおすすめです。
ファイル名に拡張子が2つついてしまう場合は?
VBAのSaveAsでファイル名を指定するとき、すでに拡張子を含んだファイル名に対してFileFormatも指定すると、拡張子が重複することがあります。ファイル名には拡張子なしの名前だけを入れて、FileFormatで形式を指定するか、ファイル名に拡張子を含めてFileFormatを省略する、どちらかに統一しましょう。
VBAでファイルの拡張子を確認してから処理を分けることはできる?
できます。Mid(fileName, InStrRev(fileName, ".")) で拡張子を取り出して、If ext = ".xlsx" Then のように条件分岐すれば、拡張子によって処理を変えることができます。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



