2016-06-29 4 views
1

Excelワークブックのセクションを〜3500の他のワークブックにコピーする必要があります。ワークブックの数が多いため、マクロを作成してそれぞれに実行することは、あまり可能ではありません。Excelワークブックの一部を開いていないまま他のワークブックにコピー/ペーストする

マクロ(または他のコードを実際に書く)を使ってそのピースをコピーし、開いていなくても他のブックに貼り付ける方法はありますか?

+0

ファイルを開かずにファイルにコピー/貼り付けすることはできません。常識はあなたにそれを伝えるべきです。あなたは**ファイルを開かずに貼り付け**ますか? –

+0

コピーするワークブックの部分がわかっていて、まったく同じ場所だとすれば、別のプログラムで開き、コピーして保存することが考えられます。もちろん、各ワークブックを開き、必要なコードを貼り付け、3500回、またはフォルダ内の各ワークブックを閉じるループを書くことができます。 – timthebomb

+0

'マクロを書く(本当に他のコードを書いて)、そのピースをコピーして他のワークブックに貼り付けることができますか?それはあなたのデータの設定に依存します。それが(フィールドと行を持つ)データベースのように配置されている場合、私はそれが可能だと思います。要するに、はい。 – L42

答えて

0

トマト、 残念ながら、@Ken Whiteと@ L42の両方が指摘しているように、ファイルを編集するには、少なくともあるレベルでファイルを開く(メモリにロードする)必要があります。悪い点は、xmlやバイナリのデータを直接操作する(アドバイスされていない)場合を除き、Excelを使用して.xlsxファイルを開く必要があることです。これには時間がかかります。

これはもちろん、手動で行う必要はありません。例えば:

Sub DataToOtherWorkbooks() 
    Dim StrFile As String 
    Dim SourceRange As Range 
    Rng = "A1:A2" 
    Set SourceRange = Range(Rng) 

    StrFile = Dir("C:\ExcelWorkBooks\*.xlsx") 
    Do While Len(StrFile) > 0 
     Debug.Print StrFile 
     Application.ScreenUpdating = False 
     Set TargetWb = Workbooks.Open("C:\ExcelWorkBooks\" & StrFile) 
     TargetWb.Worksheets("Sheet1").Range(Rng).Value(11) = SourceRange.Value(11) 
     TargetWb.Save 
     TargetWb.Close SaveChanges:=False 
     StrFile = Dir 
    Loop 
End Sub 

の.xlsx拡張子を持つフォルダExcelWorkBooks内のすべてのファイルを通じて上記のコードがループとは、あなたの元のブックの指定された範囲内にあるデータとそれらを埋めます。

ただし、前述のとおり、これには時間がかかります。 100台のワークブック(ラップトップから)で実行したとき、ワークブックごとに平均で0.54秒かかりました。あなたのケースでは、3,500のワークブックで約31分を見ています。厳密には軽いスピードではありませんが、確かに手で行うよりも優れています。これがあなたに役立つことを願っています。さらなる質問があるかどうか尋ねてください。

サプリメント

トマトは、あなたのコメントに反応して、あなたの範囲内のセルのマージやマージされていない性質を含むフォーマットを転送するためにあなたが使用します。

TargetWb.Worksheets("Sheet1").Range(Rng).Value(11) = SourceRange.Value(11) 

を私はしました変更を反映するために元のコードを更新しました。これはあなたのためにそれを世話するが、私に知らせてください。

+0

これはうまくいった!ただし、ソースブックのセルの一部がマージされていたか、または別の整列がありました。これを他の人にもコピーできますか?おかげで –

+0

@ミスティックトマト、私はあなたのコメントに応じて私の答えを補完しました。あなたは何か問題があれば、ただ聞いてください。 –

+0

それは完全に働いた、助けをありがとう –

関連する問題