KB0204:データ リンクを使用すると一部のExcelファイルの速度が落ちる
問題
ExcelファイルにExcelデータリンクが含まれており (Excel から要素を作成するを参照I)、セルスタイルが多すぎる場合は、スクロールの速度が非常に遅くなり、Excelが反応していないように見えます。
この問題は、Excelファイルに3000以上のセル スタイルが含まれている場合に発生する可能性があります。[イミディエイト ウィンドウ]で以下のVBAコマンドを使用すると、セルのスタイル数をチェックできます。
print Activeworkbook.Styles.Count もっと読む
これをチェックする手順を以下に詳述します。
- Alt+F11を押してVBAエディターを開きます。
- [Immediate Window] に進みます。表示されない場合は、[View] > [Immediate Window] をクリックすると表示できます。
- 次のコマンドを入力して [Enter]キーを押します
print Activeworkbook.Styles.Count
解決策:該当するブックをクリーンアップ
- ワークシートを新しいブックにコピーします。 もっと読む
Office 2013以降では、ワークブック間でワークシートをコピーすると、既定で未使用のセルのスタイルが蓄積されません。
- ブックのシートをすべて選択します。SHIFTを長押ししたまま、最初と最後のワークシートをクリックします
- 選択肢を右クリックします:[Move or copy…] > [To book: (new book)] を選択し、[Create a copy] にチェックを入れ、[OK] をクリックします
- 新しいワークブックを新しい名前で保存します
- クリーンアップ ツールでブックをクリーンアップします。 もっと読む
KB213904でMicrosoftが推奨しているクリーンアップ ツールを使用してください。XLStylesツールを使用して、[Get Excel File] をクリックし、[Force all cell styles to 'Normal'] にチェックを入れてから、[Process File] をクリックします。クリーンアップ ファイルでExcelが開いたら、新しい名前で保存します。
- VBAマクロを使用して、ユーザー設定のセルのスタイルをブックから削除します。 もっと読む
Alt + F11でVBAエディターを開きます。ワークブックを選択し、[Insert] > [Module] をクリックします。以下のいずれかのマクロを貼り付け、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 SubRemove_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がExcel2007以降でバグを修正する必要があります。これまで Microsoft は、この修正プログラムを提供するほどビジネスへの影響が大きいとは考えていませんでした。 貴社にMicrosoft Officeサポートの連絡先があり、この問題についてMicrosoftに連絡して修正プログラムを要請なさりたい場合は、Microsoftケース番号113012810172527を使用してください。
説明
一部の.xlsxブックには、Excelのバグと問題のあるコードのデザインが原因で、多数(数万)のセルのスタイルが含まれています。また、不要に多くのセル スタイルを生成する可能性がある報告ツールも要因になります。