ナレッジベース KB0156

データをthink-cellデータシートに貼り付けられない、または形式が失われている

状況

Excelワークブック(.xlsx)にデータがあり、コピーしてthink-cellグラフの内部データシートに貼り付けたいのですが、データを貼り付けると以下のいずれかの問題が発生します。

  • 以下のメッセージが表示されます:Microsoft Excelはこのデータを貼り付けられません
  • 空のセルのみが貼り付けられます。
  • 日付または数値の形式が失われます(例:「1/1/2012」が「40909」になる、「$3.5」が「3.5」になる)。
  • 貼り付けた後、パーセンテージの値が適正に表示されません。100%のグラフで、グラフのレイアウトが変わる可能性があります。
  • [トップでデータシートの塗りつぶしを使用] オプションをオンにしても、セルの色がグラフに表示されません。

このような問題はthink-cellのExcelデータ リンクを使用した際にも発生する可能性があります。

問題1

上記の問題は、.xlsx ワークブックに65490以上のセルのスタイルが含まれている場合に発生する可能性があります。イミディエイト ウィンドウで以下のVBAコマンドを使用すると、セルのスタイル数をチェックできます。
print Activeworkbook.Styles.Count

これをチェックする手順を以下に詳述します。

  1. Alt+F11を押してVBAエディターを開きます。
  2. [イミディエイト ウィンドウ]に進みます。表示されない場合は、[表示][イミディエイト ウィンドウ] をクリックすると表示できます。
  3. 次のコマンドを入力して [Enter]キーを押します
    print Activeworkbook.Styles.Count

解決策1:該当するワークブックをクリーンアップ

  • ワークシートを新しいワークブックにコピーします。

    Office 2013以降では、ワークブック間でワークシートをコピーすると、既定で未使用のセルのスタイルが蓄積されません。

    • ワークブックのシートをすべて選択します。[SHIFT]を長押しし、最初と最後のワークシートをクリックします
    • 選択肢を右クリックします:[ 移動またはコピーブックへ: (新しいブック)を選択し、コピーの作成にチェックを入れ、OKをクリックします。
    • 新しいワークブックを新しい名前で保存します

    Office 2007および2010では、ワークシートを新しいワークブックにコピーすると、未使用のセルのスタイルがすべてコピーされます。これを防ぐには、まず次のホットフィックスをアクティブ化してください。

    Officeのバージョンが完全に更新されている場合、この修正プログラムはおそらくすでにインストールされています。ただし、Microsoftの提供するFix itソリューションを使用するか、以下のMicrosoftの記事で説明されているようにレジストリでこの修正を有効にする必要があります。

    修正プログラムをアクティブにしてもうまくいかない場合は、上記のMicrosoftの記事の[解決策]セクションに記載されている更新を適用してください。

  • クリーンアップ ツールでワークブックをクリーンアップします。

    KB213904でMicrosoftが推奨しているクリーンアップ ツールを使用してください。XLStylesツールを使用し、[Excelファイルを取得]をクリックし、[すべてのセルのスタイルを「標準」にする]をチェックして[ファイルの処理]をクリックします。クリーンアップ ファイルでExcelが開いたら、新しい名前で保存します。

  • VBAマクロを使用して、ユーザー設定のセルのスタイルをワークブックから削除します。

    Alt + F11でVBAエディターを開きます。ワークブックを選択し、[挿入][モジュール]をクリックします。以下のいずれかのマクロを貼り付け、F5を押して実行します。

    DeleteCustomStyles() を使うと、ユーザー設定のセルのスタイルがすべてブックから削除されます。

    Sub DeleteCustomStyles()
    Dim st As Style
    Dim i, i_cust As Long
    i_cust = 0
    For i = (ActiveWorkbook.Styles.Count) To 1 Step -1
    	With ActiveWorkbook.Styles(i)
    		If .BuiltIn = False Then
    			On Error Resume Next
    			.Locked = False
    			On Error GoTo 0
    			If Not .Locked Then
    				.Delete
    				i_cust = i_cust + 1
    			End If
    		End If
    	End With
    	If (i Mod 100) = 0 Then Debug.Print i
    Next
    MsgBox "Styles deleted: " & i_cust & " styles" & Chr(13) & "Styles left: " & ActiveWorkbook.Styles.Count
    End Sub

最適な解決策は、未使用のセルのスタイルの貼り付けを防ぐことですが、MicrosoftがExcel 2007以降でバグを修正する必要があります。現在までのところ、Microsoftはこの修正を提供するほどビジネスに強い影響があるとは考えていません。貴社にMicrosoft Officeサポートの連絡先があり、この問題についてMicrosoftに連絡して修正プログラムを要請なさりたい場合は、Microsoftケース番号113012810172527, 114021711190574 (Excel 2013)を使用してください。

説明1

データをthink-cellデータシートに貼り付けた際、またはExcelデータ リンク(Biff12/.xlsbファイル形式)を介して転送する際に使用するファイル形式は、最高65490のセル スタイルをサポートしています。より多くのセル スタイルを含む .xlsx ワークブックから think-cell データシートにデータを転送すると、書式設定情報が失われるか、貼り付けができなくなります。

一部の.xlsx ワークブックには、Excelのバグと問題のあるコードのデザインが原因で、多数(数万)のセルのスタイルが含まれています。また、不要に多くのセル スタイルを生成する可能性がある報告ツールも要因になります。 特定の条件下では、セルまたはワークシートをワークブック間でコピーすると、未使用のセルのスタイルがすべてコピーされます。

  • Excel 2007または2010でワークシートを新しいワークブックにコピーする方法:
    [ワークシート] タブを右クリックし、[移動またはコピー...][ブックへ(新しいブック)] を選択し、[コピーの作成]にチェックを入れます。
  • 別個のExcelのプロセスの別のワークブック、またはthink-cellの内部データシートにセル(単一のセルの場合もある)をコピー/貼り付け:
    • 別個のExcelプロセスを開始するには、タスク バーでExcel記号を右クリックし、Microsoft Excel 20をクリックします
    • Excel 2013以降では、ALTキーを押したまま、別個のプロセスを開始します。[新しいExcelのインスタンスを開始しますか?] というメッセージが表示されたら[はい] で確定します。
    • 弊社のデータシートは別個のExcelプロセスのExcelワークシートに基づいているため、think-cellは影響を受けます。

同じExcelプロセス内で新しいワークブックにセルをコピーしても、未使用のセルのスタイルはコピーされません。

問題2

最初は Excel ワークブック (.xlsx) から think-cell チャートの内部データシートにデータをコピー/ペーストすることができるかもしれません。ただし、その後同じデータシートにコピー/貼り付けを試行すると (空のセルであっても)、「Microsoft Excel はデータを貼り付けることができません」というメッセージが表示されます。この場合、上記の「状況」セクションで説明されている他の問題は発生しません。

同じ名前のユーザー設定の表スタイルがソース ファイルとターゲット ファイルの双方に含まれている場合、別個のExcelプロセス間でデータをコピーすると問題が生じます。最初のコピー/貼り付けではユーザー設定の表スタイルもコピーされるため、その後にコピー/貼り付けを行っても失敗します。この問題は think-cell なしでも再現できます。

think-cellを使用しないで再現

  1. 2つのExcelプロセスを開きます。Excelがすでに開いており、Ctrl+Nで新しいワークブックを作成する場合、2番目のブックは同じExcelプロセス内に保存されます。
    • 別個のExcelプロセスを開始するには、タスク バーでExcel記号を右クリックし、Microsoft Excel 20をクリックします
    • Excel 2013以降では、ALTキーを押したまま、別個のプロセスを開始します。[新しいExcelのインスタンスを開始しますか?] というメッセージが表示されたら[はい] で確定します。
  2. 最初のExcelプロセスで開いているワークブックでExcelホームスタイルテーブルとして書式設定新しいテーブル スタイル...OKをクリックします。これにより「Table Style 1」という名前の新しいユーザー設定のテーブル スタイルが挿入されます。
  3. 「Table Style 1」が含まれているワークブックからセルをコピーして2番目のExcelプロセスの別のワークブックに貼り付けます。これは初回はうまくいきます。
  4. 再び、「Table Style 1」が含まれているワークブックからセルをコピーして2番目のExcelプロセスの別のワークブックに貼り付けます。2 回目に失敗すると、Microsoft Excel はデータを貼り付けることができませんというメッセージが表示されます。

解決策2

  • Excel 2007以前のバージョンは、この問題の影響を受けません。
  • Excel 2010では、2015年11月現在でも問題が発生しています。貴社にMicrosoft Officeサポートの連絡先があり、この問題についてMicrosoftに連絡して修正プログラムを要請なさりたい場合は、Microsoftケース番号113012810172527, 114021711190574 (Excel 2013)を使用してください。

    以下の回避策を使用できます。

    • データをテキストとしてthink-cellデータシートに貼り付けます。

      think-cellデータシート貼り付けその他(貼り付けボタンの隣にある小さい三角形のボタン) → 形式を選択して貼り付け...テキストOK

    • think-cellの内部データシートで [すべてのセルの形式をクリア] ボタンをクリックします。これにより、ユーザー設定のテーブルのスタイルがデータシートから削除され、その後、貼り付けコマンドを少なくとも1回は使用できます。
  • MicrosoftはExcel 2013でこの問題を修正しています。2014年6月10日のMicrosoft Office更新からKB2881014をインストールするか、KB2881042修正プログラムをインストールしてください。

共有する