- ベストアンサー
VBAでエクセルのバージョンを取得するには
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
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 と条件分岐させてもいいかもしれませんね。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 遅くなりました。 >>「ダイレクティブス If」 というものがありますね > >それって何でしょうか? >検索をかけても見つけられませんでした 読みが違っていましたね。ずっと、ダイレクティブと読んでいました。 「ディレクティブ」でした。 #If...Then...#Else Directives ヘルプで、「directive」 と入れれば出てきます。 使い方は、バージョンによって、エラーが出る場合に、これを使います。 VBAは、コードを、一旦コンパイルしますから、その時に、バージョンによってコマンドなどがないと、「コマンドが見当たらない」ということで、プロシージャ全体をエラーで拒否してしまいます。そういう場合、この"Directive If" を使って、バージョンによって分岐させるわけですね。特に、Excel 97 と共用させるコードなどにはたまに用いられます。でも、実際に、そのバージョンで通るか通らないかは、私のレベルでは、それぞれのバージョンでやってみないと分からないです。
お礼
なるほど・・・。 わかりました。 有難うございます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 私は、当分、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 辺りは効かないかなって思います。まったく自信はないです。
お礼
隣の人のVISTA エクセル2007で、Application.Rows.Count を試してみました。 残念ながら互換モードで開いた2000で作成したBOOKでは 65536 と出ました。 なお、右クリックがきかなかった件、不思議なことにいつのまにか直っていました。べつに何にもしてないのですが・・・。変ですね。 有難うございました。
補足
>「ダイレクティブス If」 というものがありますね それって何でしょうか? 検索をかけても見つけられませんでした。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 やり方はいろいろあるでしょうね。 Sub test() Dim ret As Variant ret = Application.Version If Val(ret) > 11 Then MsgBox "2007だと思われます" Else MsgBox "2007以下だと思われます" End If End Sub
お礼
有難うございました。 これで分岐できました。 いつもお世話様です。 別件ですが、エクセル2007でワークシート上で右クリックが出来ない原因、対処法、おわかりになったらご教示くださいませ。
- hana-hana3
- ベストアンサー率31% (4940/15541)
MsgBox Application.Version
お礼
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名"部分を固定ではなく、可変で持てるようにしたいからです。
- ベストアンサー
- Visual Basic
- 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つブックを開いていて、ブック名も同じ名前で、読み取り専用を名前を付けないように閉じてもう一方のブックが見られる状態にしたいです。
- ベストアンサー
- Visual Basic
- 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にすれば良いのだと思いますが、どういうロジック を組めば良いかご教授いただければ幸いです。 すみませんが、よろしくお願い致します。 それ以外の時は
- ベストアンサー
- Visual Basic
- 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)で指定できないので困っています。
- ベストアンサー
- Visual Basic
- エクセルVBAの質問です。
エクセルVBAの質問です。 一つ一つコードを試しては動きを確認するという作業を始めたばかりの初心者です。 VBAで他のブックからデータを取得するにあたっては、その参照先のブックの行列は絶対いじってはならないものだと理解しています。でも、行列が変わってしまう可能性があるため、参照先のブックの値を、行列ではなく、たとえば「“4月”かつ“売上”の交わるセルから数値を取得せよ」のように、参照先のブック内の文字列を読みにいって、そこから取得するような考え方は成り立つでしょうか。もし成り立つ場合は、どのように組めるものなのか、考え方を教えていただけませんでしょうか。 何卒よろしくおねがいいたします。
- ベストアンサー
- Visual Basic
- EXCEL VBAでブックを開いても遷移したくない
EXCEL VBAでWorkbooks.Openを使ってブックをオープンしていますが、 Application.ScreenUpdating = False を記述しているにもかかわらず、画面が遷移してしまいます。 どなたかわかる方、ご教授願います。
- 締切済み
- その他MS Office製品
お礼
> Sheets(1).Rows.Count'行数のカウント すばらしいアイデアだと感心しました。 しかし、やってみると・・・・。 エクセル2000で作成したBOOKをエクセル2007で開いても行数は増えませんので「2007以前」と判定されてしまいました。 BOOKのバージョンではなく、アプリケーションのバージョンを調べたかったのです。
補足
行数のカウントでの判別方法が面白かったので、このようにしてみました。 これで無事判定できました。 ありがとうございます。 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