2017-01-19 2 views
1

を下にドラッグしたときに私は、私はシンプルなものを眺めていると思う作品UDFを作成します。 =INDEX($A$1:$A$5,AGGREGATE(15,6,ROW($B$1:$B$5)/($B$1:$B$5=1),ROW(1:1)))
ScottCraner's comment in this answerを参照してください私は、次のUDFを作成した</p> <p>私の考えは、以下よりセットアップが簡単ですExcelの関数を作成することです...

実際にその機能)のために:

Public Function findUnique(ByVal indexRange As Range, matchRange As Range, matchVal As Long) 
' Trying to create a dynamic function of: 
' =INDEX($A$1:$A$5,AGGREGATE(15,6,ROW($B$1:$B$5)/($B$1:$B$5=1),ROW(1:1))) 

findUnique = Evaluate("=Index(" & indexRange.Address & ",AGGREGATE(15,6,Row(" & matchRange.Address & _ 
    ")/(" & matchRange.Address & "=" & matchVal & "),Row(" & ActiveCell.Row & ":" & ActiveCell.Row & ")))") 

End Function 

そして、それほとんど作品。ただし、最初の行からドラッグすると、データは更新されません。私は、正しいデータを表示するために取得するには、「リトリガー」にセルに関数をクリックする必要があります。

enter image description here

(列Dは、式で、正しく入力しました)。

しかし、セルを再入力せずに自動的に更新する方法を教えてください。

私はまた、第四変数追加しようとしました:私が持っている(また、どのように私は、ActiveCell.Row避けるん =findUnique($A$1:$A$5,$B$1:$B$5,1,ROW())しかし、それだけで#VALUEエラーに

を返します。

Public Function findUnique(ByVal indexRange As Range, matchRange As Range, matchVal As Long, curRow as Long) 

findUnique = Evaluate("=Index(" & indexRange.address & ",AGGREGATE(15,6,Row(" & matchRange.address & _ 
    ")/(" & matchRange.address & "=" & matchVal & "),Row(" & curRow & ":" & curRow & ")))") 

End Function 

と同様に入力をActive何も使用しないように私の頭に穴を開けました...)

ありがとうございました!

+0

を試してみてください - あなたはそれがあなたをdingingことだ表示されます。しかし、まだ解決策を見つけていない。 – OldUgly

+0

@OldUgly私はそれを知っていた!私はそれが理由だと思ったが、なぜ 'Row()'を使うとエラーになるのか理解できない。 – BruceWayne

答えて

2

このSO answerから、あなたは `のDebug.Print ActiveCell.Row`場合は、以下の...

With Application.Caller 
    CallerRow = .Row 
End With 
findUnique = Evaluate("=Index(" & indexRange.Address & ",AGGREGATE(15,6,Row(" & matchRange.Address & _ 
    ")/(" & matchRange.Address & "=" & matchVal & "),Row(" & CallerRow & ":" & CallerRow & ")))") 
+0

ああ、はい!私はもっ​​と読む[ここ](http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx)、すぐに、私は '.Caller'が数式を「呼び出す」というセルを指していると思いますか?それは素晴らしいことです! – BruceWayne

関連する問題