あるセルとあるセルの計算式が同じかどうかの
チェックをしたいのですが行数が膨大で、ひとつ関数で作成しそれを各行コピーするよう
なイメージを考えていますが、そのような関数ありますか?
計算結果の比較ではなく、計算式そのものの比較です。宜しくお願いいたします。
標準関数だけで実現する方法が思いつかなかったので、代替案として、下記のユーザー関数(VBA)を標準モジュールに登録する方法を回答します。
ユーザー関数を追加する手順は「Excelでユーザー定義のワークシート関数を追加する」を参考にしてください。
Function getFormula(obj As Range) As String getFormula = obj.Formula End Function
セルA1とB1の式を比較したいのであれば、比較結果を入れるセルに下記の式を記述してください。
=IF(getFormula(A1)=getFormula(B1),"同じ","違う")
VBAのFormulaを使い
標準モジュールに関数を自作します。
Option Explicit Public Function CompareFormula(ByVal range1 As Range, ByVal range2 As Range) As Boolean If range1.Formula = range2.Formula Then CompareFormula = True Else CompareFormula = False End If End Function
ワークシートのセルには、作成した関数を記述します。
例
=CompareFormula(A1,A2) '引数に、比較するセルを指定します。数式が同じならTrue,異なればFalseを返します
その他、
[ツール]-[オプション]-[表示]タブより[ウィンドウオプション]の[数式]をチェックオンにすると、シート上の数式がすべて目視できます。
Formulaについてはこちらを参考
関数でExcelの数式を取得するために4.0マクロ関数を使います。
比較するセルをA列とB列、結果をC列とした場合。
1 C1を選択して、メニューの[挿入]→[名前]→[定義]で、名前を「数式1」
参照範囲を「=GET.CELL(6,A1)&LEFT(NOW(),0)」としてOK。
2 C1を選択して、メニューの[挿入]→[名前]→[定義]で、名前を「数式2」
参照範囲を「=GET.CELL(6,B1)&LEFT(NOW(),0)」としてOK。
3 C1の数式を
=IF(数式1=数式2,"TRUE","FALSE")
として、下にコピーすればA列とB列の数式が同じかどうかをC列に表示します。
標準のEXCEL関数のみで実現するのは難しそうなので、マクロです。
Public Function ExactFomula(rngX As Range, rngY As Range) As Boolean ExactFomula = (rngX.Formula = rngY.Formula) End Function
ツール→マクロ→VisualBasicでVBEのウィンドウが立ち上がるので
使いたいbook名のところで右クリック→挿入→標準モジュールを選択すれば
Module1というのが追加されますので、そこに上記のコードをコピーすればOKです。
そしてセルの方で
=ExactFomula(A1,B1)
のようにして使って下さい。
例えばA列とB列を比較するのであれば、C1セルに=if(A1=B1,"○","×")
と入力して、あとはオートフィルで下へコピーしていけばよいです。
C列に○/×判定が表示されることになります。
コメント(2件)
参照セルの相対位置が同じであれば、Range の FormulaR1C1 の方が比較しやすいかと思います。
これを使うとブックを開くたびにメッセージが出たりとわずらわしいですから。