2016-03-29 20 views
0

私はModule1のパラメータを持つVba Function手続きを持っています。私は今Excel 2010:別のセル範囲のセルでFUNCTIONプロシージャを実行する方法

Option Explicit 
Public CI_Max, CI_Min, CI_Avg, II_Max, II_Min, II_Avg, cellvalue As String 
Public Tmp(6) As Variant 

Function String_Evaluation(Input As String, output As String, rownumber As Range) As Variant 

// Find Min Max and Average works fine 
Tmp(0) = CI_Max 
Tmp(1) = CI_Min 
Tmp(2) = CI_Avg 
Tmp(3) = II_Max 
Tmp(4) = II_Min 
Tmp(5) = II_Avg 
String_Evaluation = Tmp 

End Function 

enter image description here

問題:私は(6)結果としてアップデート6つのセル値

Cell AU3: =String_Evaluation(F3,J3,V3) 
Cell AU4: =String_Evaluation(F4,J4,V4) 
Cell AU5: =String_Evaluation(F5,J5,V5) 
So on 

Module1が配列を返すセルからそれを呼び出しています自動化したい: セル内の変化W1:AT344セルAU3〜AU5内の関数をリターンしなければならないそれは可能ですか? enter image description here

ありがとうございます。

答えて

1
Private Sub Worksheet_Change(ByVal Target As Range) 

If Intersect(Target, Range("W1:AT344")) Is Nothing Then 

    Exit Sub 

Else 
    Dim FirstRow As Long, LastRow As Long 
    FirstRow = Target.Row 
    LastRow = Target.Row + Target.Rows.Count - 1 


    For FirstRow to LastRow 
    Range(AU"& FirstRow, "AZ" & FirstRow).Value = String_Evaluation("F" & FirstRow,"J" & FirstRow,"V" & FirstRow) 
    ... 
    FirstRow = FirstRow + 1 
    Next 

End If 


End Sub 

ここで行われていることを理解してください。もしあなたがそれを1対1でコピーするなら、それは動かないかもしれません。しかし、その背後にある方法は明らかでなければならない。ワークシートが変更されるたびに、変更された行の1つがデータに含まれているかどうかを確認する必要があります。次に、変更された行を更新します。とにかく、もう一度コードを更新してみてください。

+0

Function String_Evaluation(segmstr As Range, outputstr As Range, ByVal rownumber As Range) As Variant ........ End Function 

String_Evaluation(F3、J3、V3)の配列を返すように。私はセル(...)を使用することはできません。値 – shiv

+0

私はそれを編集します –

+0

したがって、string_Evaluation配列を返し、あなたは配列の値でセルを埋めるしたいですか? –

1

@Doktor OSwaldo:ありがとう私のコードを更新しました。

モジュール1:

「関数のパラメータの型を「文字列から範囲」に変更しました。ワークシート

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim FirstRow As Long, LastRow As Long 
    If Intersect(Target, Range("W3:AT344")) Is Nothing Then 

     Exit Sub 

    Else 

     LastRow = Range("AU344").Row 

     For FirstRow = 3 To LastRow 

      Range(Cells(FirstRow, 47), Cells(FirstRow, 52)) = _ 
      String_Evaluation(Range("F" & FirstRow), Range("J" & FirstRow), Range("V" & FirstRow)) 

     Next 

    End If 
End Sub 
関連する問題