私はちょっとこのタスクに固執しています。私は、2つの異なるワークブックから処理する2つのデータ範囲を取得し、それらを2つのVariantに入れるマクロを持っています。ローカルウィンドウで、データ1(バリアント1〜79)とその他のデータ2(バリアント1〜10)をデバッグして検査することができます。これは私が今、私は新しい配列、名前を付けDim newData as Variant
にDATA1から、関連する要素をコピーしたいDATA1エラー1004 WorksheetFunctionからインデックスプロパティを取得することができません
With wbExterno.Sheets(1)
data1 = .Range(tmpStr + ":" & ToolboxMod.Number2Char(lastCol) & lastRow).Value
End With
を取得する方法です。私はこれについてSOすでにcheckedinをしましたし、これは、私はそれはworksheetfunctionからIndexプロパティを取得できませんエラー1004を発生させ
Dim filterCount As Integer
counter = 0
filterCount = 1
' Para cada elemento en el array...
For i = 1 To UBound(data1)
'Comparar el campo fecha...
tmpTest = data1(i, 1)
' ...con la fecha del ejercicio
If (comparacionActual.FechaEjercicio = tmpTest) Then
'MsgBox "iguales!"
'se crea un array filtrado con los elementos pertinentes
filter1(filterCount) = Application.WorksheetFunction.Index(data1, 0, i)
PlusOne filterCount 'this is a custom function that increments in 1
End If
Next
' se informa el resultado del filtrado
MsgBox "Copied: " & filterCount & " rows."
を得たものです。私はここで間違って何をしていますか?代わりに入力をdata1にフィルタリングする必要がありますか?そんなに簡単?もっと早く?
EDIT:私は、同じデータを持つワークシートでの方法(無VBA)を試みたし、それが唯一のスペイン語で翻訳されたメソッド名(=インデックス()で働いていたが、= Indice(ある) )。それ以外は、それは働いた。しかし、range1とvariantとしてdata1を設定しようとしましたが、うまくいきませんでした。 また、私は、ブレークポイントでチェックし、DATA1は、変異体/バリアント(78)と各要素(DATA1(I))は
EDIT 2各行を含有する(1〜8)は、この変形例である:アフター
With wbInterno.Sheets(1)
data1 = .Range(tmpStr + ":" & ToolboxMod.Number2Char(lastCol) & lastRow).Value
filter1 = wbMe.Worksheets.Add.Range(tmpStr + ":" & ToolboxMod.Number2Char(lastCol) & lastRow).Value
End With
'... some other stuff
' Field by field
For j = LBound(data1, 2) To UBound(data1, 2)
'MsgBox "check" & data1(i, j)
filter1(filterCount, j) = data1(i, j)
Next
をそして、それは実際に私は新しい配列に必要な行、フィールドごとに設定します。テストは答えで提案、私はもっと古い学校のアプローチを試してみました。私は質問に未回答のまま残します。おそらくもっと良い方法を見つけることができます。
ソリューション私が最後に使用したコードは、このいずれかです:Remouが指摘したように
' Define array with a range. Initialize destination array with the same size.
data1 = .Range(tmpStr + ":" & ToolboxMod.Number2Char(lastCol) & lastRow).Value
filter1 = wbMe.Sheets("tmp").Range(tmpStr + ":" & ToolboxMod.Number2Char(lastCol) & lastRow).Value
...もう少しこれに関連していないコードと、その後
Dim tmpTest As Variant
Dim filterCount As Integer
filterCount = 1
' integer used for presentation only
conteoRegistros = 0
' for each element in array...
For i = 1 To UBound(data1)
'Compare a certain field...
tmpTest = data1(i, 1)
' ...with some other variable. If so...
If (comparacionActual.FechaEjercicio = tmpTest) Then
'...copy column by column into new
For j = LBound(data1, 2) To UBound(data1, 2)
'MsgBox "check" & data1(i, j)
filter1(filterCount, j) = data1(i, j)
Next
PlusOne filterCount
PlusOne conteoRegistros
End If
Next
変数filter1はどのようにディメンション化されていますか? – Jon49
filter1をVariant()として設定しました。私はそれに次元を与える必要がありますか?範囲は空白だが空白に設定するのと同じように? – Alfabravo
上記のindexの最初の引数は配列(範囲)でなければなりませんが、data1は定義からの値です。 http://msdn.microsoft.com/en-us/library/ff197581.aspxを参照してください。 – Fionnuala