2016-05-20 8 views
-1

ループの実行に問題があります。Excel 2013のループ

私はCCのタブの列Aの値のリストを持つSource1スプレッドシートを持っています。各番号は、Source2スプレッドシートの[テンプレート]タブのセルB1に個別にコピーされます。 セルB1は、情報の統合(主に索引付けされた情報)をトリガし、それをテンプレートに表示します。これは、多数の背景データを集約した画像です。私はA1:K71をコピーし、これをSource1スプレッドシートのOutputタブに貼り付けます。

CCのタブの列Aでリストを処理し、Source2スプレッドシートの各出力を自動的に出力タブに追加したいとします。

私はコピー/ペーストの作業をしていますが、ループに問題があります。

Selection.Copy 
Windows("Source2.xlsx").Activate 
Range("B1").Select 
ActiveSheet.Paste 
Range("A1:K71").Select 
Application.CutCopyMode = False 
Selection.Copy 
Windows("Source1.xlsm").Activate 
Sheets("Ouput").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ 
    SkipBlanks:=False, Transpose:=False 
    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell 
+0

ループは何ですか?私はループが見えません。あなたの問題を解決するためにあなたの問題を解決するためのあなたの試みを示してください。 –

答えて

0

@Andrew、あなたの質問を読んで再読した後、私はどんな種類のループも必要ではないと思います。上記のマクロレコーダーの結果は、これを解決する方法に関する情報を提供します。私は、CCのラベルが付けられたシートの列Aに配置された値を持つSource1ブックを作成することでこれをテストしました。また、「出力」というラベルの付いたシートを追加しました。次に、Templateというラベルの付いた2枚目のワークブックを開きました。ここで私は、私はあなたが上記の記述されていると考えた結果生成するために使用されるサブプロシージャさ:

Sub AndrewProject() 
' COMMENT: Declare variables used throughout this procedure 
     Dim InitialVals As Range 
     Dim OutputVals As Range 
     Dim FinalResults As Range 
     Dim FinalOutput As Range 
     Dim cell As Variant 

' COMMENT: Set the range objects so they are easier to manipulate 
     Set InitialVals = Workbooks("Source1").Worksheets("CC's").Range("A2:A72") 
     Set OutputVals = Workbooks("Source2").Worksheets("Template").Range("B2:B72") 
     Set FinalResults = Workbooks("Source2").Worksheets("Template").Range("A2:K72") 
     Set FinalOutput = Workbooks("Source1").Worksheets("Output").Range("A2:K72") 

' COMMENT: This line copies the values in Source1 Workbook and pastes them into Source2 Workbook 
     InitialVals.Copy 
     OutputVals.PasteSpecial xlPasteValues 
' COMMENT: Additional code goes here to create the desired output. To simplify things, I put a 
' function in Source2, column K that concatenates the string "Output" with InitialVals copied 
' from Source1. To emulate your Source2 Template, I placed random values between 1 and 1000 in 
' Cells A2:A72 and C2:J72. 

' COMMENT: Copy the FinalResults from Source2 "Template" tab into the Source1 "Output" tab 
     FinalResults.Copy 
     FinalOutput.PasteSpecial xlPasteAll 
End Sub 
+0

こんにちはアンディ、これを見てくれてありがとう。私はあなたが示唆したように試みましたが、私の説明は間違っていると思います。 – Andrew

+0

こんにちはAndy、これを見ていただきありがとうございます。私はあなたが示唆したように試みましたが、私の説明は間違っていると思います。あなたの提案は、私がコピーをしてSource1のCCのリスト全体を両方のスプレッドシートに貼り付ける結果となります。私の目的のために、Source1 CCのタブには数値のリストがあります。リストは20〜1000行の間で指定できます。 Source2は、Source1の値がセルB1に格納されるテンプレートです。次に、テンプレートに情報を入力し、コピーしてSource1の[出力]タブに貼り付けます。 – Andrew

+0

私は、各テンプレートのコピーを前のテンプレートの最後に追加する必要があります。私が書いた小さなスクリプトは、私が必要なものを行うことを可能にしますが、一度に1つのエントリだけです。私がしなければならないいくつかのボリュームを考えれば、それは私が現在持っているより自動化されている必要があります。 – Andrew

0

OK @Andrewが...これが私の最後の試みに持っています。私はこれがあなたの質問に答えると信じている。

Sub AutomateIt() 
' Declare your variables 
    Dim cell   As Range 
    Dim Src1CC  As Range 
    Dim Src2Template As Range 
    Dim Src2Calcs As Range 
    Dim Src1Output As Range 
    Dim NextRow  As Long 
    Dim count  As Integer 

' Set the ranges so they can be manipulated 
    Set Src1CC = Workbooks("Source1").Worksheets("CC").Range("A1") 
    Set Src2Template = Workbooks("Source2").Worksheets("Template").Range("B1") 
    Set Src2Calcs = Workbooks("Source2").Worksheets("Template").Range("A1:K72") 
    Set Src1Output = Workbooks("Source1").Worksheets("Output").Range("A1:K72") 
    Src2Template.ClearContents 
    count = 0 

' Loop through all the cells and calculate stuff 
    For Each cell In Src1CC.Range(Src1CC, Src1CC.End(xlDown)) 
     'Determine the next empty row (plus a space for readability) 
     NextRow = Cells(Rows.count, 1).End(xlUp).Row + 2 

     'Send a copy of the Src1CC cell value to the Src2Template 
     cell.Copy Src2Template 

     'Re-calculate A1:K72 based on cell value 
     Src2Calcs.Calculate 

     'Copy Src2Calcs results and paste to Source1 Output 
     Src2Calcs.Copy 
     Src1Output.PasteSpecial xlPasteValues 

     count = count + 1 
     MsgBox "You have pasted " & count & " results." 

     'Change Src1Output Range so that the next paste is the next blank row 
     'plus one additional row for readability. 
     Set Src1Output = Workbooks("Source1").Worksheets("Output").Range(Cells(NextRow, 1), Cells(NextRow, 11)) 
    Next cell 
End Sub 
+0

こんにちはAndy、あなたの忍耐のために多くのおかげです。私はそれはあなたのコードではなく、理解が不足しているために調整されていると思う。セル(NextRow、11)) 次のセルは、使用可能な次の空の行を検索しますが、必要なのは空白行です(Src1Output = Workbooks( "test"))。添付されたコピーは – Andrew

+0

の後に置かれる次のセルは次に使用可能な空行を探しますが、テンプレートの最後の行の後に配置する必要があります。これは65行の定数です。あなたのコマンドはテンプレート内で空の行を見つけたので、それは転倒します。繰り返しますが、これは私の話題に関する知識の欠如です。 – Andrew

+0

まあ...うまくいけば、私はあなたに頭のスタートを与えました。私はもはやこのプロジェクトに時間を費やすことはできませんが、マクロレコーダーを参考にすれば、目標を達成するための主な目的、特性、方法を学ぶことができます。あなたの記述は私があなたが90%そこにいると信じるようになり、ちょっとした時間と忍耐をもって解決します。 – Andy

関連する問題