データ リンクを使用すると一部のExcelファイルの速度が落ちる
問題
ExcelファイルにExcelデータリンクが含まれており (Excel データ リンクを参照I)、セルスタイルが多すぎる場合は、スクロールの速度が非常に遅くなり、Excelが反応していないように見えます。
この問題は、Excelファイルに3000以上のセル スタイルが含まれている場合に発生する可能性があります。イミディエイト ウィンドウで以下のVBAコマンドを使用すると、セルのスタイル数をチェックできます。
print Activeworkbook.Styles.Count
これをチェックする手順を以下に詳述します。
- Alt+F11を押してVBAエディターを開きます。
- イミディエイト ウィンドウに進みます。表示されない場合は、表示、→イミディエイト ウィンドウ をクリックすると表示できます。
- 以下のコマンドを入力し、Enterを押します。
print Activeworkbook.Styles.Count
解決策:該当するブックをクリーンアップ
-
Office 2013以降では、ブック間でワークシートをコピーすると、既定で未使用のセルのスタイルが蓄積されません。
- ブックのシートをすべて選択します。SHIFTを長押ししたまま、最初と最後のワークシートをクリックします
- 選択肢を右クリックします:[ [移動またはコピー] … → [ブック:] (新しいブック)、コピーの作成にチェックを入れる→、OK
- 新しいブックを新しい名前で保存します
Office 2007および2010では、ワークシートを新しいブックにコピーすると、未使用のセルのスタイルがすべてコピーされます。これを防ぐには、以下の修正プログラムを最初にアクティブ化してください。
Officeのバージョンが完全に更新されている場合、この修正プログラムはおそらくすでにインストールされています。ただし、Microsoftの提供するFix itソリューションを使用するか、以下のMicrosoftの記事で説明されているようにレジストリでこの修正を有効にする必要があります。
- Microsoft Office 2007:KB2553085
- Microsoft Office 2010:KB2598127(2012年4月のOffice 2010更新で公表)
修正プログラムをアクティブにしてもうまくいかない場合は、上記の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を使用してください。
説明
一部の.xlsxブックには、Excelのバグと問題のあるコードのデザインが原因で、多数(数万)のセルのスタイルが含まれています。また、不要に多くのセル スタイルを生成する可能性がある報告ツールも要因になります。