Windows 7 上の Office 製品 を Windows XP SP3 互換モードで実行すると InStr 関数及び Replace 関数が戻り値を正しく返さない

現象

Windows 7 上の Microsoft Office アプリケーションを Microsoft Windows XP Service Pack 3 (SP3) 互換モードで実行すると、InStr 関数及び Replace 関数が戻り値を正しく返しません。
この現象は Office 2007 以降のバージョンで発生します。

原因

Office アプリケーションでは、Windows XP SP3 互換モードにおける、すべての機能の正常な動作を想定しておりません。
そのため、Access (MSACCESS.EXE)、Excel (EXCEL.EXE)、PowerPoint (POWERPNT.EXE)、Word (WINWORD.EXE)といった Microsoft Office アプリケーションに対して、Windows XP SP3 互換モードに設定するとこの現象が発生します。

回避策

この現象を回避するには、Office アプリケーション の Windows XP SP3 互換モードを解除します。
ここでは例として、EXCEL.EXE の互換モードを解除します。
  1. Office アプリケーションをインストールしたフォルダーを開きます。既定では以下のフォルダーにインストールされています。
    OSと Office アプリケーションのビット数が同じ場合 :
    Office 2007 の場合 : C:\Program Files\Microsoft Office\Office12
    Office 2010 の場合 : C:\Program Files\Microsoft Office\Office14
    Office 2013 の場合 : C:\Program Files\Microsoft Office\Office15

    OS が 64 ビット版で Office アプリケーションが 32 ビット版の場合 :
    Office 2007 の場合 : C:\Program Files (x86)\Microsoft Office\Office12
    Office 2010 の場合 : C:\Program Files (x86)\Microsoft Office\Office14
    Office 2013 の場合 : C:\Program Files (x86)\Microsoft Office\Office15
    クイック実行 (Click to Run, C2R) 版を使用している場合 :
    Office 2013 の場合 : C:\Program Files\Microsoft Office 15\root\office15

  2. EXCEL.EXE を右クリックして、[プロパティ] をクリックします。
  3. [互換性] タブの [互換モードでこのプログラムを実行する] チェック ボックスをオフにして、[OK] をクリックします。



詳細

問題の再現手順
  1. EXCEL.EXE に Windows XP SP3 互換モードを設定します。
  2. Excel を起動し、新規ブックを作成します。
  3. [Alt] + [F11] キーを押下し Visual Basic Editor を開きます。
  4. [表示] の [イミディエイト ウィンドウ] メニューをクリックして、イミディエイト ウィンドウを表示します。
  5. イミディエイト ウィンドウに以下のコードを入力して実行します。
? InStr(1,"%abc%", "abc" ,vbTextCompare)
? Replace("abcdefg","c","1",1,,vbTextCompare)

結果
InStr(1,"%abc%", "abc" ,vbTextCompare) は返り値として 2 が返されることが期待されますが、実際には 0 が返されます。
また、Replace("abcdefg","c","1",1,,vbTextCompare) は返り値として "ab1defg" が返されることが期待されますが、実際には "1bcdefg" が返されます。

関連情報

2301154   Windows 7 上の Access 2007 または Access 2010 を Windows XP SP3 互換モードで実行すると InStr 関数が戻り値を正しく返さない
プロパティ

文書番号:3038118 - 最終更新日: 2016/09/29 - リビジョン: 1

フィードバック