この知恵ノートを「知恵コレクション」に追加しました。
追加した知恵ノートはMy知恵袋の「知恵コレクション」ページで確認できます。
「知恵コレクション」に登録済みです。
再登録しました。
追加に失敗しました。
ノートに戻り、もう一度やり直してください。
すでに1,000件のノートが登録されています。
新しく追加したい場合は、My知恵袋の「知恵コレクション」ページで登録されているノートを削除してください。
追加できませんでした。
ノートは削除されました。
知恵コレに追加する:10人
エクセル ~重いファイルを軽くする~
ライター:ziksu_zooさん(最終更新日時:2013/10/23)投稿日:2012/4/28 アドバイス受付中!
- ナイス!:
9
- 閲覧数:84551
- 付箋(アドバイス)指数普通
エクセルファイルが重くなる原因は様々です。軽くするには、何によって重いのかをまずは突き止める必要が有ります。
また、一般的に重いと言う場合には、
- ファイルサイズが大きい
- 動きが遅い
の二通りがあります。ここでは前者について取り上げます。
後者についてはまたいずれ。
書式
書式のせいかどうかを確認するのは、一旦シート全体の書式をクリアし、別名で保存してみるのが手っ取り早い方法です。
ただしフィルタで非表示になってる行がある場合は先に解除してください。
手順
①全シートの全範囲を選択
②編集→クリア→書式
(2007以降、ホーム→クリアアイコン→書式のクリア)
③名前をつけて保存
これで大幅にサイズダウンした場合は、不要な範囲にまで書式が設定されています。無駄な書式設定はクリアしましょう。
シートが多くてフィルタの確認が面倒な場合は、下記マクロにて。
フィルタ解除のマクロ
- Sub 全シートのフィルタ解除()
Dim mySh As Worksheet
For Each mySh In Worksheets
mySh.AutoFilterMode = False
Next
End Sub
データ量
書式同様、一旦シート全体の数式と値をクリアし、別名で保存してみるのが手っ取り早い方法です。
フィルタで非表示になってる行があれば解除してから実施してください。
手順
①全シートの全範囲を選択
②DELETEキー
③名前をつけて保存
これで大幅にサイズダウンした場合は、データ量(それに伴う計算式)が多過ぎるという事になります。抜本的な解決策は、データを作業ファイルから減らすしか有りません。データはデータとして別管理し、必要な部分だけを抜粋して使うという事です。
注意
- データを切り離したからと言って、切り離したデータファイルに安易にリンクするのはお勧めしません。計算式が外部ファイルの広範囲を参照している場合、それだけで外部ファイルより重くなる場合が有ります。
見えない図形
図形が怪しいかどうかを確認するには、まずは試しに、一つ図形を作ってみてください。直線でもなんでも構いません。その時に左上の名前ボックスに図形の名前が表示されますが、その後ろにつく番号に注目を。番号は図形の種類に関わらず連番でつけられます。つまり、その番号がとんでもなく大きい場合は、図形が蓄積されている可能性が大です。
しかしながら、図形の盲点は、行削除や列削除では消えないという事です。見た目上は見えなくなり、消えたように感じるのですが、枠線や画面隅に同化し、しっかりと存在しています。点になり、一箇所に大集結している場合も有ります。
そういったファイルから、別ファイルに貼り付けを繰り返していると、地縛霊のような図形が、知らず知らずにどんどん蓄積されていくのは言うまでも有りません。
見えない図形の有無を調べるには、下記手順で、全図形を選択して確認します。
手順
-
①F5キー→セル選択→オブジェクトにチェック→OKをクリック
※これで全ての図形が選択される
②見えない図形でも、選択されているマークだけは表示されるので、 どこに有るかの確認が可能
③選択された全ての図形が不要なら、そのままDELETEで削除
※見えない図形のみ消すなら、図形選択で見えない図形のみ選択し直してから削除する
ただし、この作業はシート毎に確認する必要が有ります。
これはマクロを使うともっと簡単になります。
アクティブブックの図形の総数と、見えない図形の数をリストにする
- Sub 図形リスト()
Dim BkName As String
Dim mySh As Worksheet
Dim myShp As Shape
Dim i As Integer
Dim j As Long
Dim myList() As Variant
BkName = ActiveWorkbook.Name
ReDim myList(1 To Worksheets.Count, 1 To 3)
i = 0
For Each mySh In Worksheets
i = i + 1
myList(i, 1) = mySh.Name
myList(i, 2) = mySh.Shapes.Count
j = 0
For Each myShp In mySh.Shapes
With myShp
If .Height + .Width = 0 Or _
.Top + .Height = 0 Or _
.Left + .Width = 0 Then
j = j + 1
End If
End With
Next
myList(i, 3) = j
Next
With Workbooks.Add
With .ActiveSheet.Range("A1")
.Value = BkName
.Offset(1).Resize(, 3).Value = _
Array("シート名", "図形総数", "見えない図形")
.Offset(2).Resize(UBound(myList), 3).Value = myList
End With
End With
End Sub
アクティブブックの見えない図形を全て削除する
- Sub 見えない図形削除()
Dim mySh As Worksheet
Dim myShp As Shape
Dim i As Long
i = 0
For Each mySh In Worksheets
For Each myShp In mySh.Shapes
With myShp
If .Height + .Width = 0 Or _
.Top + .Height = 0 Or _
.Left + .Width = 0 Then
i = i + 1
.Delete
End If
End With
Next
Next
If i Then
MsgBox ActiveWorkbook.Name & _
"から見えない図形を" & i & "個削除しました"
Else
MsgBox "見えない図形は有りません"
End If
End Sub
画像
特に写真を貼り付けている場合、写真の解像度が高すぎるとこれまた重くなります。そもそもエクセル上の画像に、そこまでの解像度が本当に必要なのか、そこらへんを吟味した上で、不要ならば、図の圧縮をするか、コピーしてJPEG等で貼り付け直し、元の画像は削除する等してみて下さい。
ピボットテーブルの設定
同じブック内のデータを元にピボットテーブルを作成しているなら、下記設定をしてみて下さい。ファイルサイズが間違いなく軽くなります。
手順
- ①ピボットテーブルを選択し右クリック
②オプションをクリック
③「表のレイアウトと共にデータを保存する」のチェックを外す
④OKをクリック
⑤名前をつけて保存
これにより何か不都合が出たら、元の設定に戻せば良いだけですから、お手軽ですよね?私は積極的にお勧めします。
ただし、このチェックを外すと、ファイルを開いて、一番最初にピボットテーブルを編集しようとする時だけ「データの更新」をする必要が有ります。それが面倒なら、オプションの「開くときに更新する」にチェックを入れておいてもいいでしょう。
この欄は、そうすると何故軽くなるのかを、うだうだ書いているだけなので、注意して下さい(笑)
-
ピボットテーブルを作成すると、まずは元データのコピーが作成され、それが、ブック内メモリに保存されます(キャッシュ)。もちろんそれは目に見える訳ではありません。 マイクロソフトサポートによると「隠しコピー」と翻訳されています。
つまり、ピボットテーブルは、元データから直接出来上がっているのではなく、その隠しコピーを元に出来上がっているのです。
「元データ → 隠しコピー → ピボット」というイメージです。
元データのコピーをブック内に保存するんですから、当然その分重くなる訳です。裏を返せば、その保存をしなければ軽くなるという事です。そして保存しない場合に、最初だけ更新が必要なのは、隠しコピー領域にデータをセットする必要が有るからです。
無効な名前付き範囲
名前付き範囲自体は、うまく活用すると非常に便利な機能です。しかし、ファイルが重くなる正体の一つに、無効になっている名前付き範囲の存在が挙げられるのもまた事実です。
まずはそれら無効な名前が有るならば、掃除しましょう。
手順
- ①Ctrlキー+F3キー
「名前の定義」ダイアログを表示
②無効な名前は選択して削除
③名前を付けて保存
①でダイアログを開いた時に、ずらりと名前が並んでいたら、ほとんど無効な名前と思っていいでしょう。エクセルはシートのコピーを繰り返すと、そのファイル上で定義されていた名前全てが一緒にコピーされて行きます。それを繰り返すうちに、いつの間にか名前が蓄積され、このような事になります。
これを一つずつ選択して削除していけばいいのですが、中には当然ですが正常に機能しているものも存在します。自分が定義した名前や「Print_Eria」等がそれに当たります。
また数が多いと、手作業で削除するのは非常に面倒なので、やはりマクロを使うのが簡単です。
無効の可能性が高い名前を一括削除する
- Sub 名前削除()
Dim myName As Name
Dim myWb As Workbook
Set myWb = ActiveWorkbook
On Error Resume Next
For Each myName In myWb.Names
With myName
.Visible = True
If InStr(1, .RefersTo, "REF") _
+ InStr(1, .RefersTo, "N/A") _
+ InStr(1, .RefersTo, "\") _
+ (InStr(1, .RefersTo, "$") = 0) Then .Delete
End With
Next
On Error GoTo 0
Set myWb = Nothing
End Sub
実はこれでも食い下がって消えない名前が残る事が有ります。これらは、Ctrlキー+F3キーでダイアログを表示し、一つずつ選択して手作業で消して下さい。
さて、これらでそれなりにファイルは軽くなると思います。
一度、お試しあれ!
アドバイス(このノートのライターへのメッセージ)を送る
このノートはどうでしたか? いいと思ったことや、こうしたらもっとよくなるといったメッセージを送りましょう! ノートの内容やライターについて質問がある場合は、Q&Aから質問してみましょう
アドバイスを送るには、
Yahoo! JAPAN IDでのログインおよび
Yahoo!知恵袋の利用登録が必要です。
このノートに関するQ&A
このノートに関するQ&Aは、まだありません。