2017-04-20 39 views
0

「対象」ブックの一番上のセルが一致しているときに、ブックから別のブックに値をコピーして貼り付けようとしていますワークシートの名前。Excel VBAワークシート名とセル値を一致させ、セルの範囲をコピーして貼り付ける方法

しかし、ほとんどの場合、エラー1004が発生しています。何か案は?

Sub Cycle() 

Dim ws As Worksheet 
Dim y As Integer 

For Each ws In ThisWorkbook.Sheets 
      ActiveSheet.Name = Worksheets("Target").Cells(1, y) 
      Worksheets("Target").Range(Cells(2, y), Cells(24, y)).Copy 
      Selection.Copy 
      ActiveSheet.Range("e3").Paste 
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
      :=False, Transpose:=False 

      y = y + 1 


     Next ws 

End Sub 
+0

Excelは列0を持たないので、 'y'が0のとき' Cells(1、y) 'は機能しません。' y'を1に初期化してもクラッシュしませんが、あなたのコードはあなたがすると思っていると思っていると思う) – YowE3K

+0

仕事では機能しません。コピーして同じターゲットシートに貼り付けるだけですが、実際にはターゲットの異なる列に値を入れたい複数のワークシートにコピーされるシート – user7892858

答えて

0

私は正確に何をしたい理解しますが、この試してみる場合ではないと確信しています:それはそれを行うための最善の方法ではありません

Sub Cycle() 

Dim ws As Worksheet 
Dim wsTarg As Worksheet: Set wsTarg = Worksheets("Target") 
Dim y As Integer 

For Each ws In ThisWorkbook.Sheets 
    y = 1 
    While (wsTarg.Cells(1, y) <> vbNullString) 
     If ws.Name = wsTarg.Cells(1, y) Then 
      wsTarg.Range(wsTarg.Cells(3, y), wsTarg.Cells(25, y)).Value = _ 
       ws.Range(ws.Cells(1, 1), ws.Cells(23, 1)).Value 
     End If 
     y = y + 1 
    Wend 
Next ws 
End Sub 

を(我々は検証の列を避けるために最適化することができること既にコピーされており、ターゲットスプレッドシートを検証しません)、すべてのワークシートを検索し、ターゲットシートの最初の行にあるすべてのセルと比較します。シートの名前がセル名とまったく同じ場合、セル3〜25の最初の列(セル1〜23)がセル3〜25の対象シートにコピーされます。

これが役立ちます。

+0

親愛なるブルーノ、すばやい返信をいただきありがとうございます。コピーされたセルはワークシートに貼り付けられていません。セルがコピーされ、同じ「ターゲット」シートに貼り付けられました。私は、最終的に "Target"シートを使って、同じファイルに約50枚のシートを置いています。それを修正する方法を教えていただけますか? – user7892858

+0

ああ、今私は理解していた。あなたはちょうどopositeをしたいです。 "Target"シートから他のシートにコピー! この行を逆にするだけです。 'ws.Range(ws.Cells(1,1)、ws.Cells(23,1))。値= wsTarg.Range(wsTarg.Cells(3、y) )、wsTarg.Cells(25、y))。Value'プロセスを逆転したので、すべてのコードを逆にする方が良いかもしれません。それは速くなるでしょう。大規模でこれを行う必要がある場合はお知らせください。私たちはそれを改善することができます。 :) –

関連する問題