2011-12-20 11 views
1

c27から各セルのAddColumnofData関数を実行する必要があります。隣接するすべての空でないセルは右に移動する必要がありますが、実行時エラー424オブジェクトが必要です感謝。セル範囲をループする

Set col = Range("$C$27", Range("$C$27").End(xlToRight)) 

For Each c In col 
    AddColumnofData (c) 
Next c 
+0

'AddColumnofData'は何をするのですか?私たちはあなたの機能の速度を最適化できるかもしれませんか? – brettdj

答えて

3

あなたはAddColumnofData

として定義されている
Sub AddColumnofData(c As Range) 
    ... 
End Sub 
それへのお電話は

AddColumnofData c 

にする必要がある

​​へ

ジェシーのアドバイス(つまりは、ブラケットを取り外している)あなたの変数は、義務ではないが、良いアドバイスです。 [col]にも適用されます。それをmanditoryにするには、モジュールの先頭にOption Explicitを追加します。

+2

別のサブ – JMax

0

あなたがC宣言する場合:

Dim c as Range 

を次に、あなたが持っているものに動作するはずです。

前提に
1

範囲オブジェクトを関数に渡す前に宣言または設定できます。関数に正しい値を渡していることを証明するには、これを試してください。

Dim r As Range '-- if you don't declare it as a range type you get a variant type as default 
Dim c As Range '-- this is used to store the single cell in the For Each loop 

Set r = Range("A1:D1") '-- substitute your range as per your example 

For Each c In r '-- you could also use r.cells 

    MsgBox c.Value '-- pass to your function instead of a call to the Message Box 

Next 

あなたレンジ「r」は、代わ​​りにします。Debug.Printに渡す真剣に大きい場合、これは、アクティブなワークシートのD1にセルA1の値を含む4つの一連のメッセージボックスを生成します。

+0

を呼び出すときにカッコを使用する方法(または使用しない)については、[チップピアソンのこのリンク(http://www.cpearson.com/excel/byrefbyval.aspx)]も参照してください。関数?利点は、最初に範囲内のセルに対していくつかの検証を行うことができ、セル値などを連結することができるということです。範囲の代わりに文字列として値を渡すこともできます。そのため、関数は範囲オブジェクトの代わりに文字列関数を扱うことができます。 – Eric

関連する問題