ナレッジベース KB0156

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

状況

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

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

このような問題は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プロセスを開始する方法
    • 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プロセスを開始する方法
    • 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修正プログラムをインストールしてください。

シェア