ExcelマクロVBAサンプル集
数式内の不要なシート名を削除する(HasFormula)

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
最終更新日:2014-11-14

数式内の不要なシート名を削除する(HasFormula)


複数のシートにまたがる数式を入力していると、自身のシート名!が数式についてしまいます、
この自身のシート名!は不要であり、式を見づらくしてしまいます、
この不要なシート名を、マクロVBAで一括削除します。


ブックの全シート、全セルを対象として、
数式の中から、自身のシート名!を削除するマクロVBAになります。

Sub sample()
  Dim ws As Worksheet
  Dim rng As Range
  For Each ws In Worksheets
    For Each rng In ws.UsedRange
      If rng.HasFormula Then
        rng.Formula = Replace(rng.Formula, ws.Name & "!", "")
      End If
    Next
  Next
End Sub


全シート処理の
For Each ws In Worksheets


ここは、このサイトを訪れる人には問題ないと思います。

全セルの処理
For Each rng In ws.UsedRange
書き方はいろいろありますが、これが一番簡単かつ無駄が無いでしょう。

数式の判定
If rng.HasFormula Then
Rangeオブジェクト.HasFormula
数式が設定されている場合は
Trueが返されますので、これで判定しています。

自身のシート名!を削除する部分
rng.Formula = Replace(rng.Formula, ws.Name & "!", "")
Rangeオブジェクト.Formula
これは数式のプロパティですが、この他に
FormulaLocal
FormulaR1C1
等々があります。
どれを使用しても構いませんが、
必ず、左辺と右辺で同じものを使用してください。
当たり前ではありますが、結構ミスしやすい部分になります。

コードは短いですが、さくっと使えると結構便利だと思います。



同じテーマ「マクロVBAサンプル集」の記事

罫線を簡単に引く(Borders,BorderAround)

エクセルでは、罫線を引く事が多いです。この罫線は、以外に処理時間もかかりますし、やり方によっては、VBAの行数も多くなります。とにかく、簡単に罫線を引く方法です。以下の表を作成する場合です。罫線を引く順番等、いろいろありますが、とにかく短いコードにしてみます。
マクロVBAの開始時と終了時に指定しておくべきApplicationのプロパティ
マクロVBAの開始時および終了時に指定した方が良いApplicationのプロパティの開設です。特に重要なもの、マクロVBAの処理速度に関係するものを紹介します。Applicationのプロパティの詳細については以下をご覧ください。
オートフィルター(AutoFilter)
エクセルでは、定番機能のフィルターです。「Sheet1」のA列でフィルターし、「Sheet2」へコピーします。ごく基本的なフィルターです。フィルターのセル範囲指定は、いろいろな指定が可能です。「連続セル範囲の選択 」も参考にして下さい。
日付のオートフィルタ(AutoFilter)
とても便利なオートフィルターですが、日付となると、結構大変です。以下の表で説明します。普通は、こんなように指定します。Operator:=xlFilterValues は2007以降で追加された機能です。
印刷ダイアログを使用する(xlDialogPrint)
入力しやすいように、セルに色をつけている事が多いと思いますが、印刷時には、ちょっとじゃまな場合もあります。インク(トナー)も無駄ですしね。印刷時に色指定を解除して印刷する方法になります。Application.Dialogs(xlDialogPrint).Show 印刷タイアログを表示します。
名前定義の一覧(Name)
名前定義は使い方によっては、とても便利な機能ですが、数が多いと管理が大変になります。名前定義の一覧を取得し、シートに書き出すマクロです。Cells(i,1)=nm.Name 名前定義の名前です。Cells(i,2)="'"_nm.Value 名前定義の参照範囲です。
シートを名前順に並べ替える
シートを名前順に並べ替える方法になります。配列を使っていますが、配列が難しい場合は、シートに書き出して処理すれば良いでしょう、並べ替えもシート上なら簡単です。上記では、シート名を文字列として処理しています。
数式内の不要なシート名を削除する(HasFormula)
数式の参照しているセルを取得する
セルに入っている数式の参照しているセルを取得するには、RangeのPrecedentsプロパティを使いますが、このプロパティは他のシートの参照には対応していません。また、セルの参照先を取得するプロパティには、Dependentsプロパティがあります。
増殖した条件付き書式を整理統合する
コピペによって条件付き書式は際限なく増加していきます、あまり増えすぎると、Excelの動作が遅くなる場合もありますし、条件や書式を変更したい時にも困ることになります。このような場合は、条件付き書式を消して再設定するしかなくなります、これを解決するVBAを考えてみました。
条件付き書式で変更された書式を取得する
条件付き書式が設定されている場合当然ですが見た目は本来そのセルに設定されている書式ではなく条件付き書式の条件によって設定されている書式になります。VBAでこの条件付き書式によって設定された書式を取得します。これが取得できるようになったのはExcel2010からですのでこのページで紹介するVBAコードはExcel2010以降でのみ有効なものです。


新着記事NEW ・・・新着記事一覧を見る

Byte配列と文字コード関数について|VBA技術解説(8月20日)
PowerQueryの強力な機能をVBAから利用する方法|VBA技術解説(8月4日)
練習問題31(セル結合を解除して値を埋める)|VBA練習問題(7月30日)
練習問題30(マトリックス→リスト形式)|VBA練習問題(7月25日)
Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説(7月22日)
コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説(7月20日)
CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.ひらがな⇔カタカナの変換|エクセル基本操作
10.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説



  • >
  • >
  • >
  • 数式内の不要なシート名を削除する(HasFormula)

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
    本文下部へ