データ リンクを使用すると一部のExcelファイルの速度が落ちる
問題
ExcelファイルにExcelデータリンクが含まれており (21. 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がExcel2007以降でバグを修正する必要があります。これまで Microsoft は、この修正プログラムを提供するほどビジネスへの影響が大きいとは考えていませんでした。 貴社にMicrosoft Officeサポートの連絡先があり、この問題についてMicrosoftに連絡して修正プログラムを要請なさりたい場合は、Microsoftケース番号113012810172527を使用してください。
説明
一部の.xlsxブックには、Excelのバグと問題のあるコードのデザインが原因で、多数(数万)のセルのスタイルが含まれています。また、不要に多くのセル スタイルを生成する可能性がある報告ツールも要因になります。