2016-09-18 26 views
0

-vba配列に代入することはできませんか?あなたは、通常のバリアントではないようaarfを宣言する必要がは、私はエラーを次のコードを実装して取得しようとしている

型の不一致

Public Function calc(ByVal value As Integer, ByVal num As Integer) As Variant() 

Dim arr(5) As Variant 
Dim x As Double 

If value >= num Then 
    x = value - Application.RoundDown(value/num, 0) * num 
    arr(0) = x 
    arr(1) = num - arr(0) 
    arr(2) = Application.RoundUp(value/num, 0) 
    arr(3) = 1 
    arr(4) = Application.RoundDown(value/num, 0) 
    arr(5) = 1 
Else 
    x = num - Application.RoundDown(num/value, 0) * value 
    arr(0) = x 
    arr(1) = value - arr(0) 
    arr(2) = Application.RoundUp(num/value, 0) 
    arr(3) = 1 
    arr(4) = Application.RoundDown(num/value, 0) 
    arr(5) = 1 
    calc = arr 
End If 

End Function 


Sub cellsfunc() 

With Application 
    .DisplayAlerts = False 
    .EnableEvents = False 
    .ScreenUpdating = False 
End With 

Dim lastrow As Integer 
Dim counter As Integer 

Dim arrf(5) As Variant 

lastrow = Cells(Rows.Count, 2).End(xlUp).Row 
For counter = 2 To lastrow Step 2 
    arrf = calc(Cells(4, counter), Cells(4, counter + 1)) 
Next counter 

With Application 
    .DisplayAlerts = True 
    .EnableEvents = True 
    .ScreenUpdating = True 
End With 

End Sub 

すべてのヘルパーに先駆けおかげ

+0

あなたがそうでなければ、ライン 'のx =値にエラーが発生します、' num'が0の条件を追加する必要があります - Application.RoundDown(値/ 0、0)* num'に設定してください。 –

+1

を参照して、エラーがどこにあるかを確認してください。一般的なオプションでクラスモジュールでブレークを選択してください。http://www.cpearson.com/excel/BreakInClassModule.aspx – Slai

答えて

0

- 私はDim arrf() As Variant代わりのDim arrf(5) As Variantを入力した場合、私はエラーが出ることに注意してくださいアレイ。 VBAはあなたのためにそれを変換します。

Dim arrf As Variant

0

あなたの関数では問題calc()あります:

Public Function calc(ByVal value As Integer, ByVal num As Integer) As Variant() 

    Dim arr(5) As Variant 
    Dim x As Double 
    If value >= num Then 
    x = value - Application.RoundDown(value/num, 0) * num 
    arr(0) = x 
    arr(1) = num - arr(0) 
    arr(2) = Application.RoundUp(value/num, 0) 
    arr(3) = 1 
    arr(4) = Application.RoundDown(value/num, 0) 
    arr(5) = 1 
    Else 
    x = num - Application.RoundDown(num/value, 0) * value 
    arr(0) = x 
    arr(1) = value - arr(0) 
    arr(2) = Application.RoundUp(num/value, 0) 
    arr(3) = 1 
    arr(4) = Application.RoundDown(num/value, 0) 
    arr(5) = 1 
    End If 
    calc = arr ' <------- THIS 
End Function 
0

:それはおそらく、このする必要があり、それはelseを通過するとき、それは唯一の値を返し、ないif

は、 arrfは、固定サイズ配列として宣言されています。

Dim arrf(5) As Variant 

配列を返す関数は、固定サイズの配列を返すことはできません。動的配列のみを返すことができます。あなただけの動的配列として宣言する必要があります:

Dim arrf() As Variant 
関連する問題