2017-03-08 7 views
1

見つかったときに式をセルに入力する検索を作成しようとしています。 問題が 数式の中に相対参照をロックする

Set SrchRng = Range("F6:F30") 

For Each cel In SrchRng 

    'SL Events 
     If cel.Value = "SL" Then 


     I = "=RC[-9]-R6C4" 
     ''''I want it to be along these lines 
     ''''I = "=RC[-9]-$R$C[-9]"      or 
     ''''I = "=RC[-9]-($Cel.Offset(, -9).Value)" 


       cel.Offset(0, 7).Value = I 

     End If 
(VBAの F4又は $外部を使用するのと同じ)検索が見出されること行を参照する式を作成しようとする( OffSet?)および式内側にロックされています私はマクロの別の部分に自動塗りつぶしを使用しているので、2番目のセルをロックする必要があります。

これはできますか?

+3

使用の同じ行を意味しますロックの '$'の '' A1 ''モードでのみ適用されます。 'R1C1'モードでは、' R1C1'、 'R [1] C1'、' R1C [1] '、' R [1] C [1] 'のように見えます。 '['& ']'は相対参照を示しますが、存在しない場合は絶対参照(またはロックされた参照)です。 – Enigmativity

+0

そして、式は '.Formula'または' .FormulaR1C1'プロパティを使ってセルに割り当てられるべきです。式の '.Value'プロパティを使うのは良い考えではありません。 – YowE3K

+0

私は '[]'がそれを相対参照にすることを理解しており、それがなければ絶対参照になります。 ワークシート内でその式をプルダウンするためにオートフィルを使用するときに、後で相対参照をロックするソリューションが必要です。 –

答えて

1

=RC[-9]-R6C4R1C1参照スタイルを使用しています。

このスタイルでは、行と列の両方に数値を使用します(つまり、R?C?)。セル参照は、数式を含むセルに関連して表されます。

絶対参照は列の行のRCの右側に数字(R6C4$D$6に等しい)によって宣言されています。正数のため\右下のセルを決定しながら

相対参照は、角括弧内の数字によって宣言され、負の数は、数式を含むセルに列を\行の左\上記細胞を示します行\列(C[-9]は、数式を含むセルの左側に9列を示します)。相対参照のもう1つの形式は、RまたはCが数式なしで表示され、式を含むセルの同じ行\列を参照することを意味します。式=RC[-9]-R6C4(すなわち=D6-$D$6)のそれを確保する上から

第二の細胞は、常にちょうどこの行を交換する必要が見つかったセルcelの同じ行を指す:

この回線に
I = "=RC[-9]-R6C4" 

I = "=RC[-9]-R" & cel.Row & "C4" 

したがって行の修正を行うと必ずセルcel

+0

完璧な答え!私は同じ問題を解決する他の多くの方法があると確信していますが、これは私の以前のコードに簡単に適用することができました。もう一度ありがとう。 –

0

オートフィルをさらに使用するためにセルをロックするには、A1参照スタイルを使用する必要があります。

リマインダー(コメントによると)の場合、$を使用して、R1C1スタイルを使用して数式内の何かをロックすることはできません。

Sub Test_Excel_Noob() 
Dim SrchRng As Range 
Dim CelRg As Range 

    Set SrchRng = ThisWorkbook.Sheets("Feuil1").Range("F6:F30") 

    For Each CelRg In SrchRng.Cells 
     'SL Events 
     If CelRg.Value <> "SL" Then 
     Else 
      '''Equivalent of "=RC[-9]-$R$C[-9]" 
      '''which is incorrect as you can't use $ in R1C1 style 
      CelRg.Offset(0, 7).Formula = _ 
       "=" & CelRg.Offset(0, -2).Address(0, 0) & _ 
       "-" & CelRg.Offset(0, -2).Address(1, 1) 
     End If 
    Next CelRg 
End Sub 
関連する問題