2017-06-09 17 views
1

私はVBAで構築した関数を使用するのに苦労しています。私は関数内で参照するシートを別のシートで使用しようとしますが、循環参照エラーが発生します。誰でも私を助けてくれますか? VBAでコードを書くのは初めてです。エラーが面白いかどうか理解してください。 VBA関数の記述に関するアドバイスのエラー循環参照VBA関数から

Function Dividend(row As String, col As Date) As Variant 
Dim Table As Range 
Dim Blgdata() As Variant 
Dim v As Integer 
Dim h As Integer, var As Date 

v = 666 
h = 27 

Sheets(3).Activate 
Set Table = Range(Cells(179, 1), Cells(844, 27)) 
Debug.Print Table.Address 
ReDim Blgdata(1 To v, 1 To h) 
Blgdata = Table 




Dim i As Integer, j As Integer 


'For i = 1 To 666 
    ' For j = 1 To 26 
    '  Debug.Print Blgdata(i, j) 
    '  If Blgdata(i, j + 1) = 0 Then 
    ' Exit For 
     ' 
     ' End If 

    'Next j 
'Next i 


For i = 1 To v Step 7 
    If Blgdata(i, 1) = row Then 
            For j = 3 To h 

            var = Blgdata(i + 1, j) 
            'Debug.Print var 

            If (var = col) Then 
            Dividend = Blgdata(i + 4, j) 
            Exit For 
            End If 

            If j = h Then 
            Dividend = "-" 
            Exit For 
            End If 

            If Blgdata(i, j + 1) = 0 Then 
            Exit For 
            End If 

            Next j 


    End If 

Next i 

End Function 
+0

どのコード行でエラーが発生していますか?そして、上記のコードはワークシートまたはモジュール(シートの場合はどちらですか)ですか? –

+0

シグネチャには関係ありませんが、 '行として文字列、col As Date'が表示されるだけでは、正しく表示されません。実際にはそれは完全に混乱しています - 将来、あなたは "WTF ?!"というコードを見ています。今から数ヶ月後に行/列は、行/列のインデックスを参照する「Long」整数であると合理的に予想される。 –

+0

[Rubberduck](http://rubberduckvba.com/indentation)(免責事項:私はそのオープンソースプロジェクトを管理しています)などのツールを使用して、適切なインデントを手助けすることができます。 –

答えて

0

私の最初の作品は、あなたの機能あなたがそれを書いた一つの仕事以上のことをする機会を与えることであろう。たとえば、あなたの代わりに

sheets(3).Activate 

アクティブシートを使用するか、それより優れた機能を使用して、動作させる範囲の機能を渡すことができます。あなたは、異なるサイズの範囲を通過できるように、Vと時間変数と

同じことは、おそらく

h = inputrange.columns.count() 

関数を使用します。

これは私が実際にあなたの循環参照エラーを再現できないかテストすることができないということは、私が持っていない特定のワークシートでのみ動作するように書かれているからです。アドバイスの汎用的な作品として

、(1が反復解法を必要とする問題と同じように)あなたが実際に循環参照をしたい場合は、 enable iterative calculationチェックボックスをチェックすることができ、それが循環参照を許可します。

幸運、

エドガー。