2016-11-17 10 views
0

データベース(テーブル)があり、複数の特定の列を別のワークシート(sheet3)にコピーする必要があります。さらに、各列は特定の列sheet3に貼り付ける必要があります。これを達成するために、2つのアライメントを作成しました。arrShtにはコピーする列のヘッダーが含まれ、Arrcolには列を参照する数字が含まれています。範囲内のループと参照配列の要素がマクロを凌ぐ

次に、両方の配列の各要素をループして列を見つけ、コピーして貼り付けようとします。次のように私の試みが行く:

Sub copia() 

Dim f As Range 
Dim arrSht, Arrcol As Variant, j As Long 

arrSht = Array("a","b","c") 
Arrcol = Array(5, 6, 8) 

For j = LBound(arrSht) To UBound(arrSht)  

Set f = Sheet1.Cells.Find(arrSht(j), searchorder:=xlByRows, LookAt:=xlPart) 

If Not f Is Nothing Then 
Sheet1.Range(f, Sheet1.Cells(Rows.Count, f.Column).End(xlUp)).Copy _ 
      Sheet3.Range(Sheet3.Cells(2, Arrcol(j))) 
Else 
MsgBox arrSht(j) & "Header not found!" 
End If 
Next j 
end sub 

明確にするために、ループの最初の繰り返しは、そのヘッダ「A」(arrShtの最初の要素)であるとfに保管範囲を見つける必要があります。次に、fが対応する列をコピーします。そして最後に、私は、コードを実行すると、私はエラーを取得するSheet3列5(Arrcolのすなわち最初の要素)

に貼り付け:Sheet1.Range(f, Sheet1.Cells(Rows.Count, f.Column).End(xlUp)).Copy _ Sheet3.Range(Sheet3.Cells(2, Arrcol(j)))に対応する行に「オブジェクトのメソッド 『範囲』 『_Worksheetは』失敗しました」。だから、私はおそらく間違った方法で配列の要素を参照しているか、間違ったループを書くだけです。

ご協力いただきありがとうございます。このコードで

+0

わからないけど、 'Sheet1.Range(F、Sheet1.Cells(Rows.Count、Fに変更してみてください.Cols(2、Arrcol(j)) ' – SJR

答えて

0

は...

Sheet3.Range(Sheet3.Cells(2, Arrcol(j))) 

... Sheet3.Cells(2, Arrcol(j))Rangeを返しています。それをパラメータとしてSheet3.Rangeに渡します。

あなただけの、約1セルを気に.Rangeコールをスキップしてちょうど.Cellsを使用しているので:

Sheet3.Cells(2, Arrcol(j)) 
関連する問題