[[20150702171311]] 『データの入った複数シートを、計算式の入った別の』(じゅん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データの入った複数シートを、計算式の入った別のブックに一括コピーをする方法』(じゅん)

Book1にデータが96*50個入ったシートが3枚あります。
シートA,B,Cとします。
ファイル名は変わりますがシート名は固定です。

Book2には計算式が入ったシートが2枚あります。
シートD,Eとします。
こちらもシート名は固定です。

シートDには「=A!A1/C!A1」(シートAの数値÷同じ位置のシートCの数値)
シートEには「=B!A1/C!A1」(シートBの数値÷同じ位置のシートCの数値)
という計算式が入っています。

現在は、A〜Eのシートを作り、A〜Cのデータを消して雛形となるブックを作っています。
使用する時はまずBook1のシートAのデータを全て選択、コピーして雛形のシートAにコピー、次にシートBのデータを全て選択、コピーして雛形のシートBにコピー、・・・と繰り返しています。

面倒ですし、貼り付け位置がずれたり、シートAにシートBのデータを貼り付けてしまったりといったミスも起こるので、何とかもっと簡単にデータをコピーしたいのです。

ためしにシートD,EのみのBookに、Book1からシートA,B,Cをコピーしてみたのですが、更新をしても自動では計算してくれませんでした。
(セルを選択して、Enterを押したりするとそのウェルだけは計算されたのですが…)

また、シートA,B,CのあるBook1に雛形のシートからシートD,Eをコピーすると、元のシートとリンクしてしまい、リンクを解除すると数式が消えてしまいました。

リンク元の変更をすると、計算はできましたが、データが多いためか時間がかかってしばらく停止してしまうような感じです。

何か良い方法がありましたら教えていただきたいのです。
よろしくお願いします。

< 使用 Excel:unknown、使用 OS:unknown >


 マクロを使えば、

 >面倒ですし、貼り付け位置がずれたり、シートAにシートBのデータを貼り付けてしまったりといったミス

 は、解決すると思いますが、マクロは嫌ですか?

(マナ) 2015/07/02(木) 19:49


マクロの場合の一例です。

前提:

 ・各シートの状態が、例えば以下のようなものを想定しています。
 ・なので、実際にあわせて、コード修正は必要です。
 ・データは、8行×12列の形式
 ・シートA,B.Cでは、C3セルから10行ごとに50ブロックのデータがある。
 ・シートD,Eでは、E5セルから13行ごとに50ブロックの結果を表示する。

準備:

 ・マクロブックにひな形のシートD,Eを用意する。計算式は不要。
 ・マクロブックの標準モジュールに下記のコードをコピペ。
 ・シート名も、実際のものに修正が必要。

マクロの内容:

 ・計算したいデータブックを選択
 ・データブック(シートA,B,C)を開く
 ・データブックにシートD,Eをコピー
 ・シートA,BのデータをシートD,Eにコピペ(値)
 ・シートCのデータをシートD,Eにコピペ(除算)
 ・シートD,Eには、計算式なしで、結果のみ表示

コード:

 Sub test()
    Dim dataBook As String
    Dim wsA As Worksheet, wsB As Worksheet, wsC As Worksheet
    Dim wsD As Worksheet, wsE As Worksheet
    Dim i As Long

    dataBook = Application.GetOpenFilename("Microsoft Excelブック,*.xlsx")

    If dataBook = "False" Then Exit Sub

    With Workbooks.Open(dataBook)
        Set wsA = .Worksheets("SheetA")
        Set wsB = .Worksheets("SheetB")
        Set wsC = .Worksheets("SheetC")
        ThisWorkbook.Worksheets("SheetD").Copy after:=wsC
        Set wsD = ActiveSheet
        ThisWorkbook.Worksheets("SheetE").Copy after:=wsD
        Set wsE = ActiveSheet
    End With

    For i = 0 To 49
        wsA.Range("C3").Resize(8, 12).Offset(i * 10).Copy
        wsD.Range("E5").Offset(i * 13).PasteSpecial xlPasteValues
        wsB.Range("C3").Resize(8, 12).Offset(i * 10).Copy
        wsE.Range("E5").Offset(i * 13).PasteSpecial xlPasteValues
        wsC.Range("C3").Resize(8, 12).Offset(i * 10).Copy
        wsD.Range("E5").Offset(i * 13).PasteSpecial xlPasteValues, xlDivide
        wsE.Range("E5").Offset(i * 13).PasteSpecial xlPasteValues, xlDivide
    Next

    Application.CutCopyMode = False

 End Sub

(マナ) 2015/07/02(木) 22:04


ありがとうございます。
実際のデータは横96×縦50です。

マクロは初心者なのですが、コードの内容を考えながらサイズ、シート名等を変更して試してみます。

(じゅん) 2015/07/03(金) 09:59


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.