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

ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説
最終更新日: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)

エクセルの表をVBAで扱う時はデータ部分の先頭から最終行までの開始列から最終列まで処理する事が多いでしょう。開始行や開始列はほとんどの場合見出し行や見出し列の次からになります。単純な話として1行目に見出しがあれば2行目から 1列目に見出しがあれば2列目から ではここで最終行や最終列は
ユーザー定義関数の作り方
マクロを作成してボタンで一括処理…それほどではないが関数だけではちょっと大変そんな時はユーザー定義関数を使ってみましょう。作り方は簡単です。FunctionUserFunc(aAsVariant,bAsVariant)AsVariant UserFunc=a+bEndFunction 上記は
セルの値について(Value,Value2,Text)
マクロVBAにおいて、セルの値を操作する事は基本の基本ですが、意外に理解できていない場合が多いようです。Value 指定されたセル範囲の値を表すバリアント型(Variant)の値を設定します。値の取得および設定が可能です。
Excelのバージョンを判断して「名前を付けて保存」
空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)
空白セルの判定は、VBAにおいては頻繁に発生しますが、正しく空白セルを判定する事は以外と難しいものです。そもそも「空白」とはどのような状態なのか… これが、はっきりしない為に何が正しいのかが判然としないことが問題を複雑にしています。以下、A1セルが空白かどうか判定する方法をいくつか紹介します。
空白セルを正しく判定する方法2
空白セルの判定についていろいろな方から意見を頂きましたやはり空白判定は奥が深く結構難しいものとなっています。ここでは各プロパティや関数がセルの状態によって返す値を再確認してみます。元記事は空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula) 上記の記事では
Rangeオブジェクト.Valueの省略について
エクセルVBAを教えていてこれほど多く聞かれる質問はないでしょうRangeやCellsの.Valueは省略したほうが良いか書いた方が良いか当然省略出来ない場合もあればオブジェクトとして扱うために.Valueは書けない場合もあります。ですので結論から言えば書きたければ書けば良いし書きたくなければ書かなくて良い。
ユーザー操作を制限する(Locked,Protect,ScrollArea)
ユーザーにあちこち触られたくない時や、操作していて迷子にならないように、操作できるセルを徹底的に限定してしまおうというものです、無用なセルはクリックもできない、スクロールすることもできなくします。以下の手順になります。セルのロック→シートの保護→ScrollAreaの設定 順に説明します。
シートに数式を設定する時のセル参照の指定方法
シートに計算結果ではなく、計算式を設定する場合の、セル参照の記述方法について解説します、マクロVBAでは多くの場合、計算結果をセルに入れる事が多いのですが、時に計算式を設定する必要があります、その時の、セル参照の記述が以外に面倒なものです。下の表で説明していきます。
標準モジュールとシートモジュールの違い
エクセルVBAを初めての人に教えるとき、まずは標準モジュールを挿入して、そこに書きましょう、と教えます、しかし、時に間違ってシートモジュールに書いてしまう事があります。そういう時に、必ず聞かれるのが、「何が違うんですか?」「どこが違うんですか?」これらになります。
オートフィルタ(AutoFilter)の使い方まとめ
オートフィルタはエクセルの中でもデータ処理において非常に強力なものです、特に大量データの処理には書くことのできない機能となっています。しかし、使い方が難しく、またバージョン違いの影響が大きく、使いずらい物となっていて、問い合わせを受ける事も多いです。


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

Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説(7月22日)
コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説(7月20日)
CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)
IfステートメントとIIF関数とMax関数の速度比較|VBA技術解説(6月23日)
Withステートメントの実行速度と注意点|VBA技術解説(6月6日)
VBA+SeleniumBasicで検索順位チェッカー(改)|VBA技術解説(6月2日)
マクロでShift_JIS文字コードか判定する|VBA技術解説(6月1日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.変数とデータ型(Dim)|ExcelマクロVBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄
9.ひらがな⇔カタカナの変換|エクセル基本操作
10.セルに文字を入れるとは(Range,Value)|VBA入門



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

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


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




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