2016-07-01 7 views
1

私は、マクロを使用して高度なフィルタを実行するのに役立つブックに「名前」を作成しました。ここで式は次のとおりです。Excel-定義された名前として使用される数式をロックする方法は?

=OFFSET('Property Data'!$A$6,,,COUNTA('Property Data'!$A$5:$N$69),14) 

これは、私はあなたが行を削除することができます、ブックに書かれた「削除」機能を持っていることを除いて正常に動作します...行6は、この式を削除すると、行6を含みます「名前」の変更:

=OFFSET('Property Data'!#REF!,,,COUNTA('Property Data'!$A$5:$N$69),14) 

これは明らかに、高度なフィルタのためのマクロ遺跡、したがって、ユーザーはデータベース内の既存のエントリを編集することはできません。

だから私は何をする必要があるか、私はそれを参照するセルが削除されているとそれだけで6

新しい行を使用していますというエラーをスローしないように、この式をロックする方法を見つけることです

括弧「{}」を使ってこのようなことが起こりましたが、どういう仕組みか分かりません。何かご意見は?

+0

_any_行は削除できますか?たとえば、行1が決して削除されない場合は、現在使用されていない行オフセットパラメータ –

+0

を使用して、Row1からOffsetをオフセットして行6からオフセットするように変更するか、間接 –

答えて

1

あなたはそれが行削除によって変更されていない、あなたの名前式AOを変更する必要があります。

二つの方法:

  1. アンカー、それを削除することはありません行例えば、行1が削除されることはありません場合に使用する

    =OFFSET('Property Data'!$A$1,5,,COUNTA('Property Data'!$A$5:$N$69),1) 
    
  2. 使用INDIRECTは、範囲を指定する

    =OFFSET(INDIRECT("'Property Data'!$A$6"),,,COUNTA('Property Data'!$A$5:$N$69),14) 
    

これらの(および元の)行の削除は、'Property Data'!$A$5:$N$69部分にも影響する場合があります。これが望ましくない場合は、それを指定するのにINDIRECTを使用してください。

0

誰かが行を削除するたびに式を再割り当てします。

deleted rowを検出する。

Private Sub Worksheet_Activate() 
    glOldRows = Me.UsedRange.Rows.Count 
End Sub 

Private Sub Worksheet_Change(ByVal Target As Range) 

     If Me.UsedRange.Rows.Count < glOldRows Then 
      MsgBox “Row deleted” 
     End If 

    glOldRows = Me.UsedRange.Rows.Count 

End Sub 

ここで、MsgBox行を再割り当てする必要があります。

ThisWorkbook.Names("FilterData").RefersTo = "=OFFSET('Property Data'!$A$6,,,COUNTA('Property Data'!$A$5:$N$69),14)" 

だから、最終結果はこのようになります。

は、この情報がお役に立てば幸いです。

乾杯

+0

を使用して範囲参照を作成します。細胞。 Name Manager> New ...>を選択しました。次に、数式を参照ボックスに右に進めました。私はここにいないかもしれませんが、実際に私が与えた名前はFilterDataです... FilterData = "= OFFSET( 'Property Data'!$ A $ 6 ,,, COUNTA( 'Property'!$ A $ 5: $ N $ 69)、14) "? –

+0

名前で何もしたことはありませんでしたが、これを試してみてください: Dim nm as Name Set nm = ThisWorkbook.Names( "FilterData")nm.RefersTo = "OFFSET .."私はちょうど今推測している –

+0

それは1つですね、私は私の答えを編集します –

関連する問題