2012-01-24 27 views
0

誰かがおそらく単純な解決策で助けてくれたら、私は感謝します。以下は、User Defined Functionのための短いコードがExcelにあります。
SUMIFS計算で計算する列(大きなスプレッドシート内)の名前を付けています。同じ名前の列を持ち、変数WRITEOFF1WRITEOFFを別のユーザー定義関数で使用するにはどうすればよいですか?同じVBAプロジェクトとモジュール内のサブルーチンで列の名前を設定しようとしましたが、その後、サブルーチンを呼び出すことを試みたが、私は別の関数に名前を渡すことはできませんように見えます。ユーザ定義関数(Excel)でのサブルーチンと値の呼び出し

誰かが解決策を支援することはできますか?事前に

多くの感謝を。


Public Function WRITEOFF(rev_date As Variant) As Variant 

    Application.Volatile (True) 

    Set Order_Type = Sheets("KRONOS").Range("$D:$D") 
    Set Final_Price = Sheets("KRONOS").Range("$H:$H") 
    Set PaidAlt = Sheets("KRONOS").Range("$I:$I") 
    Set Excl_Rev = Sheets("KRONOS").Range("$K:$K") 
    Set PAmount1 = Sheets("KRONOS").Range("$O:$O") 
    Set First_PD = Sheets("KRONOS").Range("$Q:$Q") 
    Set PMethod1 = Sheets("KRONOS").Range("$R:$R") 
    Set PAmount2 = Sheets("KRONOS").Range("$T:$T") 
    Set PayDate2 = Sheets("KRONOS").Range("$V:$V") 
    Set PMethod2 = Sheets("KRONOS").Range("$W:$W") 
    Set PAmount3 = Sheets("KRONOS").Range("$Y:$Y") 
    Set PayDate3 = Sheets("KRONOS").Range("$AA:$AA") 
    Set PMethod3 = Sheets("KRONOS").Range("$AB:$AB") 
    Set PAmount4 = Sheets("KRONOS").Range("$AD:$AD") 
    Set PayDate4 = Sheets("KRONOS").Range("$AF:$AF") 
    Set PMethod4 = Sheets("KRONOS").Range("$AG:$AG") 
    Set Vstatus = Sheets("KRONOS").Range("$DL:$DL") 
    Set Team = Sheets("KRONOS").Range("$DO:$DO") 


     WRITEOFF1 = Application.WorksheetFunction.SumIfs(_ 
      PAmount1 _ 
      , Team, "<>9" _ 
      , Vstatus, "<>rejected", Vstatus, "<>unverified" _ 
      , First_PD, rev_date _ 
      , PMethod1, "Write Off") 

     WRITEOFF2 = Application.WorksheetFunction.SumIfs(_ 
      PAmount2 _ 
      , Team, "<>9" _ 
      , Vstatus, "<>rejected", Vstatus, "<>unverified" _ 
      , PayDate2, rev_date _ 
      , PMethod2, "Write Off") 

     WRITEOFF3 = Application.WorksheetFunction.SumIfs(_ 
      PAmount3 _ 
      , Team, "<>9" _ 
      , Vstatus, "<>rejected", Vstatus, "<>unverified" _ 
      , PayDate3, rev_date _ 
      , PMethod3, "Write Off") 

     WRITEOFF4 = Application.WorksheetFunction.SumIfs(_ 
      PAmount4 _ 
      , Team, "<>9" _ 
      , Vstatus, "<>rejected", Vstatus, "<>unverified" _ 
      , PayDate4, rev_date _ 
      , PMethod4, "Write Off") 

      WRITEOFF = WRITEOFF1 + WRITEOFF2 + WRITEOFF3 + WRITEOFF4 
End Function 
+0

はどうなりますか?エラーメッセージが表示されますか? – Justin

+0

こんにちはJmax、関数は機能し、この関数で範囲名を使用し、別の関数でWRITEOFF1とWRITEOFF2の値を使用します。すべてのコードを再入力するのではなく、範囲名と2つの値を呼び出すことができるかどうかを調べることになります。それは可能ですか? – Fred

+0

あなたが探しているものをあまり理解していません。名前の範囲名を別のUDFに渡したいですか?なぜ名前をパラメータとして追加して、式を入力するときに名前を入力するだけですか?それはあなたが探しているものですか? – Jon49

答えて

0

あなたはc名前付き範囲としてこれらの機能を保持しますが、それらをワークシート上で直接操作できる範囲として公開します。

式リボンの範囲、名前の管理、新しい名前付きインサート:VBAで

Name Manager

は、あなたのようにそれらを参照してください。

ワークシート上で
x = Application.WorksheetFunction.Sum(Order_Type) 

、あなたも参照することができますセル内でそれらに:

=(Sum(Order_Type))または=VLOOKUP("Steve",Order_Type,2,False)など

名前付き範囲を使用しない場合は、公共などの変数を設定し、その後、関数内で、範囲を割り当てるためにサブルーチンを呼び出す:あなたはこれを実行しようとすると、

Public Order_Type As Range 
Public Final_Price As Range 

Function MyFunction() 

'Call procedure to set the public variables 
SetPublicVars 

'Perform your function 
MyFunction = Application.WorksheetFunction.Sum(Order_Type) 

End Function 

Private Sub SetPublicVars() 

Set Order_Type = Sheets(1).Range("D:D") 
Set Final_Price = Sheets(1).Range("H:H") 


End Sub 
関連する問題