VBA技術解説
Excelのバージョンを判断して「名前を付けて保存」

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2013-07-21 最終更新日:2013-07-31

Excelのバージョンを判断して「名前を付けて保存」


Excel2007以降とExcel2003以前ではExcelのファイルフォーマットが違います、


Excel2007以降で2003以前の形式で保存したい場合に問題が発生します。

Excel2007以降で普通に97-2003形式で保存するVBAコードを書くと、

Excel2003以前ではエラーとなってしまいます。

以下のような対応で解決できます。


Const xlExcel8 As Integer = 56
If CInt(Application.Version) < 12 Then
  ThisWorkbook.SaveAs Filename:="ファイルのフルパス", FileFormat:=xlExcel9795
Else
  ThisWorkbook.SaveAs Filename:="ファイルのフルパス", FileFormat:=xlExcel8
End If


xlExcel8は、Excel2007以降で追加されたものですので、


そのまま使用した場合は、2003以前で実行した場合に、未定義エラーが発生します。

そこで、同一名称で、Const定義をしています。

もちろん、Const定義をせずに、

FileFormat:=56

でもOKです。

ただ、後で見た時に、56って何だ?

とならないように、Const定義しておいた方が良いと思います。

さらに、

FileFormat:=xlExcel9795

これも指定は不要ですが、
(2003以前のバージョンの時に動作する行なので、指定する必要はありません)

見た目で理解しやすいように、あえて記述しています。



同じテーマ「マクロVBA技術解説」の記事

最終行・最終列の取得方法(End,CurrentRegion,SpecialCells,UsedRange)

・最終行取得の基本:手動ではCtrl + ↑、VBAではCells(1, 1).End(xlDown) ・最終列の取得 ・特殊な表の場合 ・CurrentRegion ・SpecialCells(xlCellTypeLastCell) ・UsedRange ・Findメソッド ・サイト内関連ページ
ユーザー定義関数の作り方
・簡単な例でユーザー定義関数を作ってみましょう ・この関数の使い方 ・ユーザー定義関数の実践使用例
セルの値について(Value,Value2,Text)
マクロVBAにおいて、セルの値を操作する事は基本の基本ですが、意外に理解できていない場合が多いようです。Value 指定されたセル範囲の値を表すバリアント型(Variant)の値を設定します。値の取得および設定が可能です。
Excelのバージョンを判断して「名前を付けて保存」
空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)
・セルの値が空白の判定 ・計算式が入っていない判定 ・エラー値の判定 ・IsEmpty関数:空白を判定するVBA関数 ・TypeName関数:データ型を判定するVBA関数 ・RangeオブジェクトのFormulaプロパティ ・空白セルを正しく判定する方法続編
空白セルを正しく判定する方法2
空白セルの判定について、いろいろな方から意見を頂きました。やはり、空白判定は奥が深く結構難しいものとなっています。ここでは、各プロパティや関数が、セルの状態によって返す値を再確認してみます。元記事は、空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula) 上記の記事では、
Rangeオブジェクト.Valueの省略について
エクセルVBAを教えていて、これほど多く聞かれる質問はないでしょう、RangeやCellsの.Valueは省略したほうが良いか、書いた方が良いか、当然、省略出来ない場合もあれば、オブジェクトとして扱うために.Valueは書けない場合もあります。ですので、結論から言えば、書きたければ書けば良いし、書きたくなければ書か…
シート保護でユーザー操作を制限する
・セルのロックと解除:Locked ・シートの保護:Protect ・スクロール範囲:ScrollArea ・シート保護でユーザー操作を制限する
シートに数式を設定する時のセル参照の指定方法
シートに計算結果ではなく、計算式を設定する場合の、セル参照の記述方法について解説します、マクロVBAでは多くの場合、計算結果をセルに入れる事が多いのですが、時に計算式を設定する必要があります、その時の、セル参照の記述が以外に面倒なものです。下の表で説明していきます。
標準モジュールとシートモジュールの違い
・書かれている場所と概要 ・シートを省略してRangeやCellsと記述した時 ・他モジュールから使う時 ・デバッグ時の違い ・標準モジュールとシートモジュールの使い分け方
オートフィルタ(AutoFilter)の使い方まとめ
オートフィルタはエクセルの中でもデータ処理において非常に強力なものです、特に大量データの処理には書くことのできない機能となっています。しかし、使い方が難しく、またバージョン違いの影響が大きく、使いずらい物となっていて、問い合わせを受ける事も多いです。


新着記事NEW ・・・新着記事一覧を見る

カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ