- ベストアンサー
複数のキーを参照して、別ブックに転記する方法
- VBAを使用して、マスターブックから複数のブックへのデータ転記を自動化する方法について教えてください。
- 逆に、複数のブックからマスターブックへのデータ転記も同じ方法で自動化する方法を教えてください。
- KeyIDと項目名を参照して、マスターブックと各ブックのセルの内容を一致させる方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 多分、相当時間が掛かります。 Sub test() Dim mBk As Workbook Dim tBk As Workbook Dim mSh As Worksheet Dim tSh As Worksheet Dim v As Variant Dim vv As Variant Dim mKeyC As Long Dim tKeyC As Long Dim mLrow As Long Dim tLrow As Long Dim tCol As Long Dim i As Long Dim j As Long Dim k As Long Dim x() Dim y() Dim z As Variant '処理対象ブックは開いておくとする Set mBk = Workbooks("マスターブック.xlsx") vv = Array("ブック1.xlsx", "ブック2.xlsx") '処理対象シートは1番目のシートとする Set mSh = mBk.Worksheets(1) mKeyC = Application.Match("KeyID", mSh.Rows(1), 0) mLrow = mSh.Range("A1").CurrentRegion.Rows.Count Application.ScreenUpdating = False For Each v In vv Set tBk = Workbooks(v) Set tSh = tBk.Worksheets(1) tKeyC = Application.Match("KeyID", tSh.Rows(1), 0) tLrow = tSh.Range("A1").CurrentRegion.Rows.Count tCol = tSh.Range("A1").CurrentRegion.Columns.Count For i = 1 To tCol If i <> tKeyC Then ReDim Preserve x(j) ReDim Preserve y(j) x(j) = i y(j) = Application.Match(tSh.Cells(1, i), mSh.Rows(1), 0) j = j + 1 End If Next With tSh For i = 2 To tLrow z = Application.Match( _ .Cells(i, tKeyC), mSh.Cells(1, mKeyC).Resize(mLrow), 0) If Not IsError(z) Then For j = 0 To UBound(x) If .Cells(i, x(j)) <> mSh.Cells(z, y(j)) Then .Cells(i, x(j)).Interior.Color = 65535 .Cells(i, x(j)) = mSh.Cells(z, y(j)) End If Next Else .Cells(i, tKeyC).Interior.Color = 14404237 End If Next End With j = 0 Erase x: Erase y Next Application.ScreenUpdating = True End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
多分方向性が間違っていると思う。 データべースソフトにはファイル結合の仕組みがある。それを前提にファイルをわざと分割している。ふつう使うときは結合を指示して使う。 最低でもMSAccess(データベースソフト、さらにはACCESSのVBAやプログラム)でも使う方法を勉強し(スクールにでも通って勉強して)考えるべき問題ではないか。使う道具を間違えるとコードが複雑になるばかりで、応用も聞かない。 ーー こんな無料のコーナーに質問を挙げて、コピペして、ちょこっと済まそうというのはおかしい。 有料になろうが、業者に頼んで、確実なものを作ってもらうべき課題ではないか。 ーー 質問表現も、作業的に1歩1歩例を挙げて、説明した方がよいのでは。どのファイルの項目を見てどこへ持ってくるのか。 ごたごたしてよくわからない。KeyID などなに?説明不足では?社内用語では。
お礼
ありがとうございます。通常はACCESSでやるものなのですね。業務に追われ目の前のものを終わらせることばかり考えてました。データベースについて調べてみたいと思います。
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは ブック1、ブック2の、住所・作業予定・作業実績・名前列等のセルが空欄 の場合にマスターブックからデータを転記するのですか? それとも毎回全データについて、マスターブックから転記するのですか? また、複数のブックからマスターブックに転記する場合、同じKeyIDの行が 複数ブックに存在するケースは無いのですか? 有るとしたらどのブックのデータを転記するのですか?
補足
ご質問ありがとうございます。 マスターブックからブック1、ブック2に転記する際には、マスターが常に正解として転記したいので、空欄であってもそうでなくてもそのまま転記したいです。 また、複数ブックからマスターブックに転記する場合、同じKeyIDが複数ブックに存在する可能性はありますが、基本的には各ブックごとに項目が異なるので、同じKeyIDかつ同じ項目になることはありません。 すいません、最初の説明が間違っていたのですが、例えば、ブック1の項目は住所と作業予定、ブック2の項目は名前と作業実績、という具合にKeyIDだけが同じになる予定です。 でも確かに不安なので、転記する際に、転記前の記載から変更があった場合は、セルを黄色く塗りつぶしするという作業を加えていただけると、目で確認できていいかなと思います。データ量が多くなった場合、かなり遅くなってしまうでしょうか。 説明がうまくできておらず申し訳ありません。 どうぞよろしくお願いいたしす。
お礼
ありがとうございます!こちらで思い通りのものが出来上がりそうです。マクロを回してる間に別のことができるので、残業時間も減らせそうです。つたない説明にも関わらず、お知恵をお貸しいただき、本当にありがとうございました。