2012-04-17 17 views
2

Excelシート上の選択したデータを配列に転送して新しいスプレッドシートにデータを出力するコードを記述しています。しかし、selectArr(i - 1)をスクロールすると値が表示されても、 "Subscript Out of Range"エラーが表示されます。ここに私のコードは次のとおりです。値が定義されていても添え字が範囲外である

Sub Marascuilo() 
    Dim numRows As Integer 'Number of rows selected 
    numRows = Selection.Rows.Count 
    Dim selectArr() As Double 'Array containing numbers from selected cells 
    selectArr = loadArr(numRows) 'Load values into array 
    For i = 2 To UBound(selectArr) - LBound(selectArr) + 2 
     Sheets("Sheet 4").Cells(i, 2).Value = selectArr(i - 1) 
    Next 
End Sub 

'This function loads the values from the selected cells into selectArr. 
Function loadArr(numRows) As Double() 
    Dim ResultArray() As Double 
    r = 1 
    For Each v In Selection 
     ReDim Preserve ResultArray(1 To r) 
     If v <> "" Then 
      ResultArray(r) = v.Value 
      r = r + 1 
     End If 
    Next 
    loadArr = ResultArray 
End Function 

すべてのアイデアは、私はこの問題を解決する方法として?

ありがとうございます!

ジェイ

+2

問題は、シート(「シート4」)ではなく、selectArr(i-1)で確認できますか?セル(i、2)? –

+0

オペレーションの順序がわからない場合は、おそらくこれが必要です... 'i = 2 To(UBound(selectArr) - LBound(selectArr)+ 2)' – xQbert

+2

私はToddと同意します。 'Sheets(" Sheet 4 ")は' Sheets( "Sheet4") 'でなければならないと感じています:) –

答えて

1

代わりにシート(「シート4」)を使用しての、あなたはシートのコードネームを使用して検討するかもしれません。プロジェクトエクスプローラウィンドウを見ると、すべてのシートに名前とコードネームがあります。これは次のようになります

Sheet1 (Sheet1) 
Sheet2 (Sheet2) 

最初のコードネームはUIから変更できません。括弧内のものがタブ名です。プロジェクトエクスプローラでシートを選択し、F4キーを押してプロパティダイアログを開きます。 (Name)プロパティ(名前が不十分なプロパティ)に移動し、意味のあるものに変更します。私はすべてのシートのCodeNamesを変更し、wsh接頭辞を使用します。ログのシートには

のコードネームがあります
wshLog 

私のコードにはwshLogを使用できますが、いくつかの利点があります。 1つは、ユーザーがUIでシートの名前を変更すると、コードが引き続き機能することです。 2番目はwshlog(すべて小文字)と入力することができ、VBEはwshLogに変更して、私はそれを正しく綴る視覚的な手がかりを得ます。最後に、私のコードはより読みやすく、ex wshFinalReportとSheets( "Sheet1")です。

関連する問題