スポンサーリンク
※少し改良した記事を追加しました。
はじめに:シートを安全に切り離したい
今回の記事で、メインとして紹介したいのは、Excelブックの中にあるシートを安全に切り離す方法だ。
たとえばExcelブックに10個のシートが含まれてるけど、その中で特定の1個のシートだけを抜き出して使いたいという場面は多い。
そういうとき、
=シート01!A1 + シート03!B1 + シート05!D1
みたいに他のシートとの繋がりがある計算式が入っていたりすると、その計算式を外しておかないとシート中の数値とかが変わったりエラーになってしまうことがある。
それを確実に防いで安全にシートを切り離す方法は、多くの人が知らないはずだし、実際マクロをちょっと使わないと難しい。
今回の記事では、それをお手軽にやる方法を紹介するので、これを取り入れれば日常のExcelの作業効率を大幅に向上できるだろう。
リンクを解除するマクロ
まず、Excelにおけるリンク解除の話から。
上記の記事でも触れたのだが、Excelで、他のブックを参照するリンクがある計算式というものは厄介で、標準機能だけでは外しきれないことが多い。
そこで、次に示すようなマクロを個人用マクロブックに入れておき、リンク解除においては使用することが望まれると思う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Sub breakLinks() ‘リンクを解除 Dim wb As Workbook Dim vntLink As Variant Dim i As Integer Call appSet ‘描画省略、手動計算設定など Set wb = ActiveWorkbook vntLink = wb.LinkSources(xlLinkTypeExcelLinks) ‘ブックの中にあるリンク If IsArray(vntLink) Then For i = 1 To UBound(vntLink) wb.BreakLink vntLink(i), xlLinkTypeExcelLinks ‘リンク解除 Next i End If Call appReset ‘描画などの設定を元に戻す End Sub Sub appSet() ‘マクロ処理中に、描画など余計なものを省略して高速化 With Application .ScreenUpdating = False ‘描画を省略 .Calculation = xlCalculationManual ‘手動計算 .DisplayAlerts = False ‘警告を省略。 ‘.EnableEvents = False ‘DisplayAlertsよりこちらを設定した方が良い? End With End Sub Sub appReset() ‘描画などの設定を通常通りにリセット With Application .ScreenUpdating = True ‘描画する .Calculation = xlCalculationAutomatic ‘自動計算 .DisplayAlerts = True ‘警告を行う End With End Sub |
途中にある「appSet」「appReset」というやつについては、こちらを参照。
そんでメインとなるのは「Sub breakLinks()」ってやつですけど、ぶっちゃけこのマクロ自体はまんま他所からのパクリである。
そんなものを臆面もなく書いているが、それというのも私は、この「Sub breakLinks()」を単体で使うことがあまりないからだ。
リンクを解除した上で、シートを切り離すマクロ
私はこのリンク切断マクロを、次に示すbreakLinksAndSheetCopyというマクロにくっつけて頻繁に使用している。
1 2 3 4 5 |
Sub breakLinksAndSheetCopy() ‘リンクを解除してシートコピー ActiveWindow.SelectedSheets.Copy ‘選択されたシートをコピー Call breakLinks‘リンクを解除 End Sub |
ちょっと解説すると、
最初に「ActiveWindow」というのが出てくるが、ユーザが複数シートを同時にShiftボタンとかで選択している場合に、それらを指定するには「ActiveWindow.SelectedSheets」としなければならない。
単一のシートなら「ActiveSheet」とシートを指定するのでいいのだけれど、複数シートだと「ActiveWindow」とまずウインドウを指定しないといけないのが紛らわしいところ。
そんでそれらユーザが選択した複数シートを、新しいブックに切り離した上で、breakLinksでリンクを切断するってだけの短いマクロが、上記の「breakLinksAndSheetCopy」だ。
別の記事でも取り上げたけど、Excelのブックを上書き保存不可能な状態にして編集するっていうのは、多くの作業において有効な手段となる。
そしてこの「breakLinksAndSheetCopy」マクロにより、例えば集計シートとマスタシートがあったとき、マスタシートの方だけを安全に切り離して別ブックとして扱うことが出来る。
その別ブックを煮ようが焼こうが、元のブックに何の影響も心配しなくて良い。
冒頭で述べた、Excelブックの中にあるシートを安全に切り離す方法ってやつだ。
このマクロも、是非とも個人用マクロブックに追加しておくと良い。
私はこの「breakLinksAndSheetCopy」マクロを1日に10回くらいは使っている。これをすれば、Excelファイルの扱いの安全度が格段に上がるからね。
スポンサーリンク