2016-11-03 18 views
-1

特定の範囲のデータを複数のワークシートにコピーし、そのデータを新しいワークブックに貼り付けるスクリプトを探しています。私の基本的な知識では、ワークブック内の単一のワークシートでこれを行うことができますが、複数ではできません。 Wkst AからS1000、次いで細胞A7:Excel VBコードでワークブック内の複数の範囲をコピーし、新しいワークブックに貼り付けます

例は、細胞A7コピーのWkst B.

からS1000は、2つの新しいワークシートのWkst AとB

に、新しいブックにそれらの細胞を貼り付け私は新しいワークブックを保存したくないし、毎回作成される新しいワークブックでなければならない。

提案がありますか?ここで

+0

あなたは何を試してみましたか?この質問はさまざまな形で求められているので、特にSOの周りを検索してください。あなたが見つけたもの、成功したもの、失敗したもの、またはあなたが持っているコードで特定の質問を表示してください。 – BruceWayne

+0

私は現在使用しています: ワークシート( "シート名を")範囲( "A7:S1000")。。コピー 設定newWB = Workbooks.Add newWB 設定ニュース= newWB.Sheets( "シート1") ニュースを。範囲: "A3"。PasteSpecial Paste:= xlPasteValues、Operation:= xlNone newS.Range( "A3")PasteSpecialペースト:= xlPasteFormats、操作:= xlNone、_ SkipBlanks:= False、Transpose:= False 最後に 私はコピーの配列を実行しようとしましたが、複数の範囲で機能するようにはできません。私はまた、保存されている新しいwbやあらかじめ参照されているwbを参照していないものは見つけられませんでした。 – JonnySweatpants

+0

(そのコードをOPに親切に編集し、コードタグ( '{}')を使用してフォーマットすることはできますか?ありがとう!) – BruceWayne

答えて

0

はオプションです、あなただけのDuplicateToNewWBプロシージャにあなたの範囲を渡します

Public Function WorksheetExists(wbSource As Workbook, strWorksheet As String) As Boolean 

    Dim intIndex As Integer 

    On Error GoTo eHandle 
    intIndex = Worksheets(strWorksheet).Index 
    WorksheetExists = True 
    Exit Function 
eHandle: 
    WorksheetExists = False 
End Function 


Public Sub DuplicateToNewWB(rngSource As Range) 

    Dim wbTarget As Workbook 'The new workbook 
    Dim rngItem As Range  'Used to loop the passed source range 
    Dim wsSource As Worksheet 'The source worksheet in existing workbook to read 
    Dim wsTarget As Worksheet 'The worksheet in the new workbook to write 

    Set wbTarget = Workbooks.Add 
    For Each rngItem In rngSource 

     'Assign the source worksheet to that of the current range being copied 
     Set wsSource = rngItem.Parent 

     'Assign the target worksheet 
     If WorksheetExists(wbSource:=wbTarget, strWorksheet:=wsSource.Name) Then 
      Set wsTarget = wbTarget.Worksheets(wsSource.Name) 
     Else 
      Set wsTarget = wbTarget.Worksheets.Add 
      wsTarget.Name = wsSource.Name 
     End If 

     'Copy the value 
     wsTarget.Range(rngItem.Address) = rngItem 
    Next 

    'Cleanup 
    Set rngItem = Nothing 
    Set wsSource = Nothing 
    Set wsTarget = Nothing 
    Set wbTarget = Nothing 
End Sub 
関連する問題