[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データの入った複数シートを、計算式の入った別のブックに一括コピーをする方法』(じゅん)
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
マクロは初心者なのですが、コードの内容を考えながらサイズ、シート名等を変更して試してみます。
(じゅん) 2015/07/03(金) 09:59
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.