2017-03-20 13 views
1

現在、ワークブックと同じフォルダ内のワークブックをループし、特定のセルのデータをマスターワークブックにコピーします。コードがセルをコピーする場所からセルに変更したい場合は、コード内でこの値を変更する必要があります。VBA:現在のワークブックのセル値に基づいて別のブックからデータをコピー

しかし、他のワークブックからデータを収集するために、このシートを使用する必要がある同僚もいます。 - 私はこれをフレンドリーにする必要があります。 私がしたいことは、コードがマスターワークブックのセル値を読み取らせ、このセル値をコピー元のセルとして使用することです。

例:私はmasterworkbookセルA1に「B3」と入力し、マクロを実行した場合

、マクロがmasterworkbookの最初のセルに、originsheetのB3からデータをコピーします。誰かがこれを達成するためにどのような理想を持っていますか?

か何かのように:場合には、イム不明確

Sub Consolidate() 

    Dim wkbkorigin As Workbook 
    Dim originsheet As Worksheet 
    Dim destsheet As Worksheet 
    Dim ResultRow As Long 
    Dim Fname As String 
    Dim RngDest As Range 


    Set destsheet = ThisWorkbook.Worksheets("Sheet1") 
    Set RngDest = destsheet.Cells(Rows.Count, 1).End(xlUp) _ 
         .Offset(1, 0).EntireRow 
    Fname = Dir(ThisWorkbook.Path & "/*.xlsx") 

    'loop through each file in folder (excluding this one) 
    Do While Fname <> "" And Fname <> ThisWorkbook.Name 

     If Fname <> ThisWorkbook.Name Then 

      Set wkbkorigin = Workbooks.Open(ThisWorkbook.Path & "/" & Fname) 
      Set originsheet = wkbkorigin.Worksheets(1) 

      With RngDest 
       .Cells(1).Value = originsheet.Range(Range("A1").Value).Value 
       .Cells(2).Value = originsheet.Range(Range("A2").Value).Value 
       .Cells(3).Value = originsheet.Range(Range("A3").Value).Value 
       .Cells(4).Value = originsheet.Range(Range("A4").Value).Value 
       .Cells(5).Value = originsheet.Range(Range("A5").Value).Value 
      End With 

      wkbkorigin.Close SaveChanges:=False 'close current file 
      Set RngDest = RngDest.Offset(1, 0) 

     End If 

     Fname = Dir()  'get next file 
    Loop 
End Sub 

と私は何を意味するかの写真:ここ

.Cells(1).Value = originsheet.Range(Range("CellValue from destinationsheet A1").Value).Value 

は、私が使用するコードです enter image description here

+0

コードが機能しない、または予期しないことが起こりますか? – SJR

+1

FYI 'Range'オブジェクトの*すべての使用*の前にワークシートを追加する必要があります。 IE: 'RngDest = destsheet.Cells(destsheet.Rows.Count、1).End(xlUp)'と '.Cells(1).Value = originsheet.Range(originsheet.Range(" A1 ").Value).Value ' – BruceWayne

+0

これは厳密に必要かどうか覚えていませんが、'& "/"& 'を'& "\"& 'に変更する可能性があります。 Excelはインターネットパスを開くことができ、 ''/''と '' \ "'はパス内で互換性があるように見えるので、 '/'として機能するかもしれません。私は絶対に確信していません。 – Jeeped

答えて

0

私は申し訳ありませんが、私はあなたが自分自身を明確にしていないと信じています。しかし、あなたは(私が間違っているなら、私を修正)このような何かを取得しようとすることができる。

destinationsheet.Range("A1") = originsheet.Range(destinationsheet.Range("A1")) 

これは、他のワークシートのセル番地の内容で置換されていても、あなたのマスターブックの値を行います。

+1

ありがとう、これは働いた。私はこれを前に試してみることを思い出しますが、私は何かミスタイプする必要があります。 あなたのコメントの後にもう一度試してみてください:それは完璧にうまくいった:) – VSC

+0

私の答えのために私に親指を与えてください!私はちょうどスタックオーバーフローで署名して、私は評判が必要です! ;) –

+0

私はすでに持っていますが、私は15歳未満のスコアを持っているので、表示されません:( – VSC

関連する問題