2011-11-13 12 views
0

ワークシートにセル参照を(CTRL + SHIFT + ENTERの配列を介して)割り当てる関数が必要です。問題は、参照されたセルが空でなければ、配列のセルのすべての部分に#VALUE ERRORを返さないと正常に動作するということです。これは私がそこで、基本的セル参照を割り当てるVBA関数

Function GeneratePackingList(PackageTable As Range) 
Dim bRow As Byte, bCol as Byte 
Dim asResult() 
ReDim asResult(1 To 25, 1 To 11) 

With PackageTable 
    For bRow = 1 To .Rows.Count 
     For bCol = 1 To 11 
      Select Case bCol 
       'Rearranging the columns order 
       Case 1 To 6: Set asResult(bRow, bCol) = .Cells(bRow, bCol + 1) 
       Case 7:   Set asResult(bRow, bCol) = .Cells(bRow, 1) 
       Case 8 To 11: Set asResult(bRow, bCol) = .Cells(bRow, bCol) 
      End Select 
     Next bCol 
    Next bRow 
End With 
GeneratePackingList = asResult 
End Function 

を使用PackageTableから、それらの細胞の一つが空の場合、私は#VALUEエラーを取得し、すべてが失われている機能です。私は変数の宣言(バリアント、範囲、またはそれ以外)を変更する必要がありますか?関数を介してセル参照を割り当てる他のより効率的な方法はありますか?

答えて

2

を使用すると、arResultRangeの配列になります。これは不必要ではなく、あなたの問題を引き起こしています。私は `asResult`がVariant配列である、と私はそれは私にエラーを与える> 255の長さで細胞を表示することができない、` Set`を使用していない場合は、単にSet

  Select Case bCol 
       'Rearranging the columns order 
       Case 1 To 6:  asResult(bRow, bCol) = .Cells(bRow, bCol + 1) 
       Case 7:   asResult(bRow, bCol) = .Cells(bRow, 1) 
       Case 8 To 11: asResult(bRow, bCol) = .Cells(bRow, bCol) 
      End Select 
+0

を削除します。 Variantを使って貼り付けた値ではなく、元のセルへの参照にする必要があります。 – AutoClave

+0

配列に255より長い文字列値を返すことはできません。 'Set'の有無にかかわらず。 –

+0

文字列の配列は255個以上の文字を保持できるようです – AutoClave