Excel で VBA の WorkSheets.Copy メソッドを使ってシートコピーを行うとセルの書式が引き継がれない場合がある

Office 2003 のサポートは終了しました

マイクロソフトでは、2014 年 4 月 8 日に Office 2003 のサポートを終了しました。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

現象
Microsoft Office Excel 2003、Microsoft Office Excel 2007、Microsoft Office Excel 2010、または Microsoft Excel 2013 において VBA の WorkSheets.Copy メソッドでシートコピーを行うとセルの書式が複製されたシートに引き継がれない場合があります。
原因
この現象はマクロが実行されるとき、Excelのロケールが一時的に英語となることに起因して発生します。設定された書式が日本語ロケールの場合は、Excel内部の固有書式と一致します。しかし、マクロを実行して Excel のロケールが英語となると、書式が英語の固有書式でないため、新たに書式番号が生成されてコピーされた文書は新しい書式として扱われ、書式が引き継がれません。
回避策
この問題を回避するには以下のいずれかの方法を実行します。
  • セルの書式を指定するとき、ユーザー定義で、#,##0;[赤](#,##0) という書式を指定する。
  • マクロを使わずに、[編集] メニューの [シートの移動またはコピー] 機能を利用してシートをコピーする。
状況
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
詳細

問題の再現手順

  1. 新規 Excel ブックを開きます。
  2. 1 枚目のシートのセル A1 の値を -1000 にします。
  3. 1 枚目のシートのセル A1 の書式を、以下の設定にします。

    分類 : 数値
    小数点以下の桁数 : 0
    桁区切り,を使用する : Yes
    負の数の表示形式 : 赤色の (1,234)
  4. VBA より、ActiveWorkBook.WorkSheets.Copy メソッドを実行します。

結果

Book1 のコピーである Book2 が作成され、Book2 の 1 枚目のシートのセル A1 の書式は、以下のようになります。

分類 : 通貨
小数点以下の桁数 : 0
記号:なし
負の数の表示形式 : -1234
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:956331 - 最終更新日: 10/28/2014 21:12:00 - リビジョン: 4.0

Microsoft Excel 2013, Microsoft Excel 2010, Microsoft Office Excel 2007, Microsoft Office Excel 2003

  • kbharmony kbtshoot kbexpertiseinter kbexpertisebeginner KB956331
フィードバック