2016-08-12 10 views
2

私は2つの配列と1つの配列にあったものと3つ目の配列に入れられたものとを比較したスプレッドシートでほぼ完成しました。VBAの長いセルの配列を印刷し、下付き文字を範囲外のエラーから外す

配列の値をブックのセルに配置したいのですが、配列にデバッガの値が表示されていても添え字が範囲外になります。ここで

は、アレイを印刷するためのループです:

If (Not MissingLoans) = -1 Then 
    ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1) = "No Missing Loans Found on Roll-Up" 

Else 
    For i = 1 To (UBound(MissingLoans())) Step 1 
     *** ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1).Value = MissingLoans(i) 

     PrintCell = PrintCell + 1 
    Next 
End If 

私は私の範囲エラーのうちを与えている行でアスタリスクを置くが、MissingLoans(I)が値を示しています。実際、Missingloans(1)は配列内の唯一の値です。

+1

失敗した場合の 'PrintCell'の値は何ですか? –

+0

11.セルA11から始まり、途中で作業中です –

+0

「入力と結果」という名前のワークシートのように見えます。 –

答えて

0

配列に値が1つしかない場合、配列は0から始まり、Missingloans(0)でアクセスする必要があります。

シートに直接配列を割り当て、この

For i = LBound(MissingLoans()) To (UBound(MissingLoans())) Step 1 
    ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1).Value = MissingLoans(i) 
    PrintCell = PrintCell + 1 
Next 
+0

データは1から始まる配列に入れられます。これをOption Base 1に変更し、Lboundを使用しました。まだエラーが発生しています。 –

+0

ループが '1'で始まり、' Ubound' == 0であれば、ループは実行されないので、配列束縛*はこのエラーの原因にはなりません。私のお金はワークシート名に載っています。 –

0

よりもむしろ、配列をループしてみてください:

Else 
    Dim myRange as Range 
    Set myRange = ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1) 

    '## Assumes Option Base 0, if Option Base 1, remove the +1 
    myRange.Resize(Ubound(MissingLoans)+1).Value = Application.Transpose(MissingLoans) 

    Next 
End If 

このコードInputs and Resultsという名前のワークシートが存在しない場合にも、エラーを発生させる必要がありますThisWorkbookで、あなたのサブスクリプトが範囲外であることが私には疑わしいです。

注:私はちょうどOption Base 0を使用します。これはデフォルトであり、ロングショットで最も一般的です。ちょうどそれで生きることを学ぶ。配列0、1では塗りつぶしを開始します。しかし、Option Base 0を1から埋めると主張するなら、配列ループまたはReDim Preserveを繰り返す必要がありますどちらも、上記のように直接配列>範囲の割り当てで簡単にできることを無意識に複雑にしていると思います。

関連する問題