• ベストアンサー

VBAでエクセルのバージョンを取得するには

エクセルBOOKを開いているアプリケーションがエクセル2007以降かそうでないかを、その開かれているBOOKのVBAで取得するにはどのような記述をすればよろしいでしょうか? 2007以降か、その前かでコードを分岐させたいのです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_s777
  • ベストアンサー率57% (8/14)
回答No.2

Application.Version でバージョン情報は取得できます。 Excel2000が「9.0」ですが2007以降は○.○がどうなっているかは私は判りません。 ご存知なら上記で。 判らなければ手っ取り早く Sheets(1).Rows.Count'行数のカウント とすれば2007までは65536以下が取得され、2007なら65536を超えた値が取得されますので If Sheets(1).Rows.Count <= 65536 Then  MsgBox "Excel2007以前です" Else  MsgBox "Excel2007以降です" End If と条件分岐させてもいいかもしれませんね。

merlionXX
質問者

お礼

> Sheets(1).Rows.Count'行数のカウント すばらしいアイデアだと感心しました。 しかし、やってみると・・・・。 エクセル2000で作成したBOOKをエクセル2007で開いても行数は増えませんので「2007以前」と判定されてしまいました。 BOOKのバージョンではなく、アプリケーションのバージョンを調べたかったのです。

merlionXX
質問者

補足

行数のカウントでの判別方法が面白かったので、このようにしてみました。 これで無事判定できました。 ありがとうございます。 Sub 行数で判別() Set nb = Workbooks.Add x = nb.Sheets(1).Rows.Count nb.Close (False) Set nb = Nothing If x <= 65536 Then MsgBox "Excel2007未満です" Else MsgBox "Excel2007以降です" End If End Sub

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 遅くなりました。 >>「ダイレクティブス If」  というものがありますね > >それって何でしょうか? >検索をかけても見つけられませんでした 読みが違っていましたね。ずっと、ダイレクティブと読んでいました。 「ディレクティブ」でした。 #If...Then...#Else Directives ヘルプで、「directive」 と入れれば出てきます。 使い方は、バージョンによって、エラーが出る場合に、これを使います。 VBAは、コードを、一旦コンパイルしますから、その時に、バージョンによってコマンドなどがないと、「コマンドが見当たらない」ということで、プロシージャ全体をエラーで拒否してしまいます。そういう場合、この"Directive If" を使って、バージョンによって分岐させるわけですね。特に、Excel 97 と共用させるコードなどにはたまに用いられます。でも、実際に、そのバージョンで通るか通らないかは、私のレベルでは、それぞれのバージョンでやってみないと分からないです。

merlionXX
質問者

お礼

なるほど・・・。 わかりました。 有難うございます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 私は、当分、Excel2007 は、買えそうにもないというか、仕事のツール優先で、それすら、今は、思案中です。仕事で、MS-Office を使えば購入しますが、納品の時だけで、収入面では、何にも役には立っていません。 話を逸らせて申し訳ないのですが、 #2 のお礼 >しかし、やってみると・・・・。 >エクセル2000で作成したBOOKをエクセル2007で開いても行数は増えませんので「2007以前」と判定されてしまいました。 解決策は出ていますが、私は、コードを書くときに、よく、全行数を取るときに、Application から取るようにしています。 > Sheets(1).Rows.Count'行数のカウント という指定シート「Sheets(1)」の必要性ってないと思うのです。 単に、 Rows.Count '標準モジュールの場合 言い換えると、 Application.Rows.Count ということですね。そうすれば、旧ブックから持ってきても、そのアプリケーションのデフォルトの行数を取れるのではありませんか?試してはいないのですが...。 おまけなのですが、それに関連して「ダイレクティブス If」  というものがありますね。 #Const Directive #If...Then...#Else Directives 本当は、そのバージョンチェックと組み合わせて使うというわけですが、意外になれていないせいか使いこなせないです。 No.3454293の質問の件 >別件ですが、エクセル2007でワークシート上で右クリックが出来ない原因、対処法、おわかりになったらご教示くださいませ。 前から読んでいますが、回答できません。まだ、2007 はバグ続きだという話もあるようですから、一体、どういう原因か分からないです。 個人的には、  Application.CommandBars("CELL").Reset 辺りは効かないかなって思います。まったく自信はないです。

merlionXX
質問者

お礼

隣の人のVISTA エクセル2007で、Application.Rows.Count を試してみました。 残念ながら互換モードで開いた2000で作成したBOOKでは 65536 と出ました。 なお、右クリックがきかなかった件、不思議なことにいつのまにか直っていました。べつに何にもしてないのですが・・・。変ですね。 有難うございました。

merlionXX
質問者

補足

>「ダイレクティブス If」  というものがありますね それって何でしょうか? 検索をかけても見つけられませんでした。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 やり方はいろいろあるでしょうね。 Sub test()  Dim ret As Variant  ret = Application.Version  If Val(ret) > 11 Then   MsgBox "2007だと思われます"  Else   MsgBox "2007以下だと思われます"  End If End Sub

merlionXX
質問者

お礼

有難うございました。 これで分岐できました。 いつもお世話様です。 別件ですが、エクセル2007でワークシート上で右クリックが出来ない原因、対処法、おわかりになったらご教示くださいませ。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

MsgBox Application.Version

merlionXX
質問者

お礼

Excel2007のバージョンが12.0であることが取得できました。 有難うございます。

関連するQ&A

  • 別のプログラムとして開いたエクセルをVBAコードでアクティブにする方法について

    すいません、エクセルVBAのことで質問があります。 使っているのはExcel2000です。 1 エクセルブック"A"を開く 2 当方で使用している業務用のアプリケーションを使いデータをエクセル形式で搬出   ⇒"AAA"とは別のエクセルプログラムとして"BooK1"が開かれる このとき、ブック"A"のVBAコードに Workbooks("Book1").Activate と記載しても実行時エラーとなってしまいます。 別のエクセルプログラムで開いたブックを指定してアクティブにするにはどのようなVBAコードを記載したらよろしいのでしょうか。 同じプログラムとして開ければ問題ないのでしょうが、 当方で使っているアプリケーションですと、データを搬出するときには必ず別のプログラムとしてブックが開かれてしまう模様で どうにも回避できません。 どうぞよろしくご教示願います。

  • ExcelVBA:自己のBook名を取得したい

    WindowsXP-Proです。 Excelヴァージョンは2003です。 ExcelVBAでコーディングしています。 で、自分自身(つまり、このVBAコードを記述しているExcel本体)のBook名を取得したいのですが、何か関数は用意されていますでしょうか? 自分自身のBook名を取得したい理由は、VBAコードを記述しているExcel本体のファイル名(Book名)の名前が変更されても、VBAが正常に機能するように、今現在のBook名を取得したいのです。 複数のExcelファイルを、このVBAで操作しているため、 Workbooks("本体のBook名").Activate を用いており、仮にファイル名(本体のBook名)の名前が変更されても、VBAが正常に機能できるように、"本体のBook名"部分を固定ではなく、可変で持てるようにしたいからです。

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • Excel VBA ワークブック閉じる

    ExcelのVBAのコード記述についてなのですが、 ブックを閉じるの動作で、読み取り専用として開いているブックのみを閉じる方法ってあるのでしょうか? 補足ですが、2つブックを開いていて、ブック名も同じ名前で、読み取り専用を名前を付けないように閉じてもう一方のブックが見られる状態にしたいです。

  • VBAで情報取得

    Book1のA列の文字をもとに、 Book2(開いていない)からデータを取得する方法は どのような構文になりますか? <Book1> あああ <Book2> あああ  11111  東京 【やりたい事】 Book1に 11111、東京の情報を取得したい。 関数でいえばVLOOKUPです。 VBAでの方法をご存知の方ご教授お願い致します。

  • ExcelのVBAでフォームだけ表示させる方法

    はじめまして。 UserForm1で、デジタルで時間を表示する(デジタル時計)を作成しています。 Excelのアプリケーションを表示せず、フォームのみ表示させたいので、 Application.Visible = Falseとしたいのですが、この方法だと、他のExcel ファイルを起動する際に、Excelが見えなくなってしまいます。 ■やりたいこと ・Excelファイルが1つも開かれていない場合、Excelを非表示にして  Userform1のみ表示されている状態で起動する ・Userform1のみ表示している状態で、他のBooKを開いた場合、  Excelを表示して開いたBookを表示させる ・他のBooKを開いている状態で、Userform1が記述されているBook  を開いた場合、ExcelもUserform1も表示させる ・他のBookを閉じるて、Userform1が記述されているBookのみになった  場合、Excelを非表示にしてUserfrom1のみ表示されている状態にする 自分自身(Userform1を記述しているBook)のみ起動している時には、 Application.Visible=falseにすれば良いのだと思いますが、どういうロジック を組めば良いかご教授いただければ幸いです。 すみませんが、よろしくお願い致します。 それ以外の時は

  • EXCEL VBAについて

    VBAでCSVファイルをテンプレートのBBOKに読込むコードを 作り、CSVファイルから読込んだBOOK1データを集計する BOOK2を作成しています。 BOOK1・11/21・・・11/21・・・11/22・・・11/23と続きます      A     B     C      D 1  ID     店名   売上    日付 2 1104567   渋谷店  190,809   11/21 3 1102031   新宿店  209,808   11/21 4 1103450   横浜店  108,765   11/21 BOOK2・集計      A    B    C       D       E 1  ID   店名   11/21    11/22     11/23 2 1104567  渋谷店  190,809   203,487 3 1102031  新宿店  209,808   340,876 4 1103450  横浜店  108,765   547,627 ※BOOK1とBOOK2のIDの並び順は一致していません。 上記のBOOK1のデータをBOOK2に読込ませたいと考えています。 VLOOKUPやINDEX関数を使用しようかと考えたのですが、日付毎に ファイル名が違うのと、集計のファイルには外部参照をさせたくないと 考えています。 VBAで作成したいコードはBOOK1からBOOK2の日付のセルにIDを検索条件として日付毎のファイルを読込ませたいです。 フォームで日付を入力し、コピーするBOOK2のセルを指定後、BOOK1を選択するためにダイアログボックスを出したいです。 BOOK2のIDを検索条件としてBOOK1から一致する売上セルを抽出するコードだけでもわかれば何とか作成できそうなのですが、 ご教授いただけませんでしょうか?

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

  • エクセルVBAの質問です。

    エクセルVBAの質問です。 一つ一つコードを試しては動きを確認するという作業を始めたばかりの初心者です。 VBAで他のブックからデータを取得するにあたっては、その参照先のブックの行列は絶対いじってはならないものだと理解しています。でも、行列が変わってしまう可能性があるため、参照先のブックの値を、行列ではなく、たとえば「“4月”かつ“売上”の交わるセルから数値を取得せよ」のように、参照先のブック内の文字列を読みにいって、そこから取得するような考え方は成り立つでしょうか。もし成り立つ場合は、どのように組めるものなのか、考え方を教えていただけませんでしょうか。 何卒よろしくおねがいいたします。

  • EXCEL VBAでブックを開いても遷移したくない

    EXCEL VBAでWorkbooks.Openを使ってブックをオープンしていますが、 Application.ScreenUpdating = False を記述しているにもかかわらず、画面が遷移してしまいます。 どなたかわかる方、ご教授願います。

専門家に質問してみよう