2017-10-11 16 views
1

1枚のシートから2枚目の最後の行に単純なテーブルをコピーしようとしました。 元々、両方のシートが異なる構造をしているので、配列を試しました(列は同じ順序ではないので、貼り付けてもできませんでした)。しかし、私はいつもエラー1004を受け取ります。 今、両方のテーブルが同じ構造になっていて、今は単純に&のペーストをコピーすることができますが、私はまだ同じエラーが発生しています。 これはこれまで私が持っていたものです。私はそれが非常に簡単なことだと知っていますが、私はどこが間違っているのか分かりません。範囲に[VBA]を貼り付ける方法 - エラー1004

Sub testy() 
Dim rowsIn, rowsOut As Long 

With Worksheets("Sheet1") 
    rowsIn = .Cells.SpecialCells(xlLastCell).Row 
    .Range(.Cells(4, 1), .Cells(rowsIn, 3)).Copy 
End With 
With Worksheets("Sheet2") 
    rowsOut = .Cells.SpecialCells(xlLastCell).Row 
    .Range(.Cells(rowsOut + 1, 3)).PasteSpecial xlPasteValues 
End With 
End Sub 

EDIT:ティム・ウィリアムズの提案どおりに解決しました。しかし、私はもともと意図したように、これを配列でどうやって行うことができるのか不思議です。 Sheet1のデータにSheet2とは異なる順序の列があると仮定して、一時的な配列を使用して列を並べて貼り付けることができました。私は配列をうまく埋めることができましたが、配列の内容をSheet2に取得する方法を理解することはできません。配列を(ひどく非効率的に)配置するために使用したコードを追加しました。

Sub testy2ElectricBoogaloo() 
Dim arr() As Variant 
Dim rowsIn, rowsOut, i As Long 
    With Worksheets("Sheet1") 
     rowsIn = .Cells.SpecialCells(xlLastCell).Row 
     ReDim arr(1 To rowsIn - 3, 1 To 5) 
'Array populated with a loop because columns are not in the same order, don't know if this is the most efficient method 
     For i = 1 To UBound(arr) 
      arr(i, 1) = "Constant1" 'data collected from other source 
      arr(i, 2) = "Constant2" 'data collected from other source 
      arr(i, 3) = .Cells(i + 3, 2).Value 
      arr(i, 4) = .Cells(i + 3, 1).Value 
      arr(i, 5) = .Cells(i + 3, 3).Value 
     Next i 
    End With 

End Sub 

答えて

3

これは有効ではありません:

あなたが使用することができ
.Range(.Cells(rowsOut + 1, 3)).PasteSpecial xlPasteValues 

.Cells(rowsOut + 1, 3).PasteSpecial xlPasteValues 

あなたががコピー/ペーストを使用せずにこれを行うことができます。

Sub testy() 

    Dim rowsIn, rowsOut As Long, rng As Range 

    With Worksheets("Sheet1") 
     rowsIn = .Cells.SpecialCells(xlLastCell).Row 
     Set rng = .Range(.Cells(4, 1), .Cells(rowsIn, 3)) 
    End With 

    With Worksheets("Sheet2") 
     rowsOut = .Cells.SpecialCells(xlLastCell).Row 
     .Cells(rowsOut + 1, 3)).Resize(rng.Rows.Count, _ 
             rng.Columns.Count).Value = rng.Value 
    End With 

End Sub 

EDIT: arr例を使用して代わりにかなり類似しています:

With Worksheets("Sheet2") 
     rowsOut = .Cells.SpecialCells(xlLastCell).Row 
     .Cells(rowsOut + 1, 3)).Resize(UBound(arr, 1), _ 
             UBound(arr, 2)).Value = arr 
    End With 
+0

ありがとう、それは間違いなく私が必要としたものでした。速やかな返答をいただきありがとうございます - 私は今、基本的なことを知らないためにOfficeをアンインストールするように進めます。 –

+0

あまり基本的ではありません;-) –

+0

クローズドQで質問し続けると申し訳ありませんが、レンジではなく配列からデータを取得したい場合はどうしたらいいですか? –

関連する問題