VBAでExcel判定(5.0~2021、MS365&bit数も)

Application.VersionApplication.Buildからぺぺっと判別します。
Application.Versionはこんな感じ。13がMac用なのかな??

ExcelApplication.Version
5.05
957
978
20009
200210
200311
200712
201014
201315
201616
201916
202116

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関連要素をまとめていますので、よければ一覧記事もご覧ください。

4件のコメント

  1. こんな感じでバージョンを取得しています
    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

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)