2016-11-23 5 views
0

forループを実行していて、バリアント配列型を使用する必要がありますが、エラー13(型不一致)が発生しています。私は第1の値としてkを3、4、5としたい(以下の変数検査に従う)。私はvbaに配列を読み込ませる方法を知らない。私はtsperiodo(i)(j)を使ってみましたが、どちらもうまくいきませんでした。ここでループ内でバリアント配列を使用する(エラー13型の不一致)

バリアント配列である:私はそれを使用する場所

ReDim ocup(1 To numDis, 1 To numSalas) As Variant 

For i = 1 To numDis 
    For j = 1 To numSalas 
     If capacidadeSalas(j) - alunos(i) >= 0 Then 
     ocup(i, j) = 1 
     End If 
    Next 
Next  

ReDim tsPeriodo(1 To numDis) As Variant 

For i = 1 To numDis 
    tsPeriodo(i) = Application.Transpose(Evaluate("=ROW(" & tsInicio(i) & ":" & tsFim(i) & ")")) 
Next 

、ここでは、次のとおりです。

For i = 1 To ocup(numDis, 1) 
    For j = 1 To ocup(1, numSalas) 
     For k = 1 To tsPeriodo(i) 'this is where im getting error 13 
      variable = "x_" & i & "_" & j & "_" & k 
     Next 
    Next 
Next 

variable inspection for the tsperiodo(i)

+0

どのExcelのバージョンを使用していますか?フランス語 ? For i = 1 To ocup(numDis、1) 'とは何ですか? –

+0

私は2016年をポルトガル語で使っています! "ocup"もそれはvariat配列ですが、それは正常に動作しています、私はコードに挿入するためにメインポストを編集します。 – jf8769

+0

'tsInicio(i)'と 'tsFim(i)'がどのようにインスタンス化されるかは決して示されません。 'Evaluate(" = ROW( "&tsInicio(i)&": "&tsFim(i)&") ")'は単に配列ではない数値を返します。 –

答えて

1

あなたが達成しようとしているものを深く理解せず、明らかにtsPeriodoの各要素はバリアント/配列そのものなので、何らかの(非標準の)2D配列になります。あなたのループ内のすべての要素をキャッチするには、これを試すことができます:

Dim k, l 
For Each k In tsPeriodo 
    For Each l In k 
     ' doSomething, i.e. 
     variable = "x_" & i & "_" & j & "_" & l 

    Next 
Next 
+0

それは働いて、ありがとう!バリアント型配列から変数を取得する別の方法がありますか?これは唯一の方法ですか? – jf8769

+0

通常、通常の方法でインデックスを作成することもできますが、ディメンションの数、各要素のサイズなどを知る必要があります。「For Each」では事前知識が少なくて済みます。 –

関連する問題