ナレッジ ベース KB0156

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

状況

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

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

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

問題1

上記の問題は、.xlsxブックに3000以上のセルのスタイルが含まれている場合に発生する可能性があります。イミディエイト ウィンドウで以下の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

    Remove_Styles() を使うと、未使用のユーザー設定のセルのスタイルのみがブックから削除されます。上記のマクロに類似していますが、実行には非常に長い時間がかかる可能性があります。マクロはMicrosoft Officeサポートによって提供されています。

    Option Explicit
    Dim st_array() As String
    Dim i_x As Long
    Sub Remove_Styles()
    Dim stname As String
    Dim ustname As String
    Dim uc As Range
    Dim retval As Boolean
    Dim ust As Style
    Dim sh As Worksheet
    i_x = 0
    For Each sh In ActiveWorkbook.Worksheets
        For Each uc In sh.UsedRange
            stname = uc.Style.Name
            retval = Check_Array(stname)
            If retval = False Then
            ReDim Preserve st_array(i_x)
            st_array(i_x) = stname
            i_x = i_x + 1
            End If
        Next uc
    Next sh
    For Each ust In ActiveWorkbook.Styles
        If ust.BuiltIn = False Then
            ustname = ust.Name
            retval = Delete_Styles(ustname)
            On Error Resume Next
            If retval = True Then ust.Delete
            On Error GoTo 0
        End If
    Next ust
    End Sub
    Function Delete_Styles(stylename As String) As Boolean
    Delete_Styles = True
    Dim i_y As Long
    For i_y = 0 To i_x - 1
        If st_array(i_y) = stylename Then Delete_Styles = False
    Next i_y
    End Function
    Function Check_Array(stylename As String) As Boolean
    Check_Array = False
    Dim i_y As Long
    For i_y = 0 To i_x - 1
        If st_array(i_y) = stylename Then Check_Array = True
    Next i_y
    End Function

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

説明1

データをthink-cellデータシートに貼り付けた際、またはExcelデータ リンク(Biff8/.xlsファイル形式)を介して転送する際に使用するファイル形式は、最高3000のセルスタイルのみをサポートしています。より多くのセル スタイルを含む.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ケース番号for Excel 2013, 114021711190574を使用してください。

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

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