SUMIFSやCOUNTIFSを組むときなど、
自シートと他シートを行ったり来たりして数式を組むと、

このように「自シート名!」がセル参照式に入ってしまいます。
一度でも他シートを参照してしまうと、
以降は自シートでも参照式が入ってしまう仕様のようですね。
この状態、読みにくくなってしまうだけでなく、
ソートすると式が破損してしまうという罠も生んでしまいますので、
自シート名を""に置換するなどして消す必要が出てしまいます。
今回はこれを選択範囲に実行するマクロを紹介します。
実行すると選択範囲の数式をこんな風↓に修正してくれます。

選択範囲に実行するタイプの便利マクロですので、
Excel起動時に裏で開かれる「個人用マクロブック」などに搭載して使ってください。
クイックアクセスツールバーやショートカットキーへの登録が便利です。
個人用マクロブックの作り方、使い方についてはこちらをどうぞ。
www.limecode.jp
ソースコード
' 自シート参照の削除 Sub 計算式から自シート参照を消去する() On Error Resume Next Call 選択範囲をUsedRangeで切り取って縮小する Call エクセルの自動更新を停止する(True) ' 置換対象の「自シート!」文字列を取得(シングルクォートの有り無しで2種類) Dim 自シート参照シングルクォートあり As String: 自シート参照シングルクォートあり = "'" & ActiveSheet.Name & "'!" Dim 自シート参照 As String: 自シート参照 = ActiveSheet.Name & "!" ' 数式のあるセルをループ Dim 関数セル As Range For Each 関数セル In Selection If 関数セル.HasFormula Then ' 自シート!があれば""に置換 If InStr(関数セル.Formula, 自シート参照シングルクォートあり) Then 関数セル.Formula = Replace(関数セル.Formula, 自シート参照シングルクォートあり, "") End If If InStr(関数セル.Formula, 自シート参照) Then 関数セル.Formula = Replace(関数セル.Formula, 自シート参照, "") End If End If Next Call エクセルの自動更新を開始する End Sub
解説
単に「自シート!」の文字列をセル内から検索して""に置換しているコードです。
シート名に()などが入っていると参照式にシングルクォーテーションが入るので、
まずはそれを検索し、なければシングルクォーテーションの無い版を検索します。
マクロの開始前に
- 描画・イベント・計算の停止
- 行・列・シート全体を選択している場合にUsedRangeでカット
の二つの準備を行っています。
こちらについての詳細は以下の記事をご覧ください。
www.limecode.jp
なお、本マクロはスピル式には対応しておりません。
Formulaプロパティに代入をしているため、
スピル式に実行すると「@」が入ってスピルしなくなってしまいます。
Excel365,2021以降でスピル式に対応したい場合は、
左辺のFormulaをFormula2に書き換えて使用してください。
詳しくはこちらの記事をどうぞ。
準備中