Contents
Application.VersionとApplication.Buildからぺぺっと判別します。
Application.Versionはこんな感じ。13がMac用なのかな??
Excel | Application.Version |
---|---|
5.0 | 5 |
95 | 7 |
97 | 8 |
2000 | 9 |
2002 | 10 |
2003 | 11 |
2007 | 12 |
2010 | 14 |
2013 | 15 |
2016 | 16 |
2019 | 16 |
2021 | 16 |
Application.Buildはビルド番号が取得できますのでServicePackの有無を判別します。
これはMicrosoftから出てますので、要チェケラ!
Excel 2003:http://support.microsoft.com/kb/821549/ja
Excel 2007:http://support.microsoft.com/kb/928116/en
Excel 2010:http://support.microsoft.com/kb/2121559/ja
Excel 2013:http://support.microsoft.com/kb/2951141/ja
Excel 2016:ServicePack自体がない。あと4229未満がInsidersPreviewっぽい。
C2R版は2019以降に統合されたので後述。
MSI版の最新ビルド番号はこちらから最新の更新プログラムのリンクを踏むと確認できます。
Excel 2019:こちらによるとボリュームライセンス版は10337、製品版は10827以降が正式リリース版っぽい。
Excel 2021:オフラインインストールは14326で配信開始されました。
直前の9/28で2016 C2Rおよび2019が14430になっているので、その直前版って感じか。
32bitと64bitの判別
実はApplication.OperatingSystemでわかります。
このプロパティにアクセスすると、こんな文字列が返ってきます。
Windows (32-bit) NT 6.01
最近のOSだとNT以降がちょっと変(NT :.00)だったりしますけど、64bitのOS×32bitのExcel環境で実行してみるとわかりますが、 このbit数が実はOSではなくExcelのものなんですよね。
なのでこれでOK。
If InStr(1, Application.OperatingSystem, "32-bit", vbBinaryCompare) <> 0 Then
' 32bitです
Else
' 64bitです
End If
Excel2016/2019/2021/Microsoft365の区別
で、Excel2016以降、そもそもバージョン番号一緒なんですけど。
2019年4月現在、
CD-ROMからインストールしたOffice 2016は16.0.4822ですが、
ライセンスのみ購入してインストールしたExcel 2016はC2R版になるのか16.0.11328でした。
2021年10月現在、
ライセンスのみ購入してインストールしたExcel 2021は16.0.14326でした。
これの解決方法がまだわかっていません。
PowerShellを使えばなんとかなるみたいだけど、これは私の仕事環境的にチョイスできない。
Win32_Productクラスを利用する方法も試してみましたが、処理の時間にかなりムラがある上、Excel2016はHitするのにExcel2019を入れた環境ではHitせず…。
いえ、逆に「Hitしなければ2019」と言ってもいいのかもしれないけど、それはいくらなんでも危険過ぎるーどうしようー
2019’12月現在、解決策は見つかってません!誰か助けてよ!
Microsoft365とExcel2021の区別
Excel2021を単体で購入してインストールしたところ、コントロールパネル上は2021なんですが、起動するとMicrosoft365扱いになりました。
ただ、それは直前までMicrosoft365をインストール&ログインしていたからっぽい。
Microsoft365をアンインストールしても、ログイン情報は残っているもよう。
Excel2021をインストールして、Excelを起動(Microsoft365と表示される)→サインアウトして、Excel2021ライセンスを紐付けたアカウントでログインしたらExcel2021と表示されました。
中身は変わらず、Excelにログインしているアカウントで表示を変えているだけ??ずるくないか?
MSアカウントでも、Excel2019以降ただの「Excel」としか表示していないので、ひょっとして2019からこうだった?
OSの判定は?
他にもニッチなIT関連要素をまとめていますので、よければ一覧記事もご覧ください。
こんな感じでバージョンを取得しています
Excel 2024 の判定は未知数ですが…
‘* Excelのバージョン名とサポート期限を取得
‘* Excel 2016 以降は全て 16.0 となってしまう為に必要
‘* SupportExpirationDate は そのバージョンのサポート期限(延長期限含む)
Public Function Get_ExcelVersion(ByRef versionName As String, ByRef SupportExpirationDate As Date) As Integer
versionName = “”
SupportExpirationDate = CDate(“1900-01-01”)
‘* メジャーバージョン番号を取得
Dim mv As Integer
mv = Application.WorksheetFunction.RoundDown(Application.Version, 0) ‘* 小数点以下切捨て
Select Case mv
Case 16 ‘* 2016 or 2019 or 2021 or 2024
On Error Resume Next
‘* Excel 2016 と判断
Call WorksheetFunction.Concat(“”) ‘* 2019で実装された関数を呼び出してみる
If Err.Number 0 Then
mv = 16
versionName = “2016”
SupportExpirationDate = CDate(“2025-10-14”)
GoTo EXIT_FUNCTION
End If
‘* Excel 2019 と判断
Call WorksheetFunction.XMatch(“”, “”) ‘* 2021で実装された関数を呼び出してみる
If Err.Number 0 Then
mv = 17
versionName = “2019”
SupportExpirationDate = CDate(“2025-10-14”)
GoTo EXIT_FUNCTION
End If
‘* Excel 2021 と判断
Call WorksheetFunction.LAMBDA(1, 1 + 2) ‘* 2024で実装された関数を呼び出してみる
If Err.Number 0 Then
mv = 18
versionName = “2021”
SupportExpirationDate = CDate(“2026-10-13”)
GoTo EXIT_FUNCTION
End If
‘* Excel 2024 と判断
mv = 19
versionName = “2024”
SupportExpirationDate = CDate(“2038-12-31”) ‘* 暫定
Case 15
versionName = “2013”
SupportExpirationDate = CDate(“2023-04-11”)
Case 14
versionName = “2010”
SupportExpirationDate = CDate(“2020-10-13”)
Case 12
versionName = “2007”
SupportExpirationDate = CDate(“2017-10-10”)
Case 11
versionName = “2003”
SupportExpirationDate = CDate(“2014-04-08”)
Case 10
versionName = “2002”
SupportExpirationDate = CDate(“2011-07-12”)
Case 9
versionName = “2000”
SupportExpirationDate = CDate(“2009-07-14”)
Case 8
versionName = “97”
SupportExpirationDate = CDate(“2001-12-31”)
Case 7
versionName = “95”
SupportExpirationDate = CDate(“2001-12-31”)
Case Else
mv = -1
End Select
EXIT_FUNCTION:
Get_ExcelVersion = mv
End Function
コメントありがとうございます。
2016以降もちゃんと区別したい人には、とても親切なコードですね!