こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

XL2003(VBA):ブックを指定して開き、元のブックの情報と見比べながら元のブックにまとめる

元のブックの情報と別のブックの情報をマージし、元のブックに上書きする方法を模索しています。

------以下、前置き--------

前回の質問内容:
http://oshiete1.goo.ne.jp/qa5346942.html
にて、シート間でデータを見ながらマージすることはできるようになりました。ありがとうございます。

以下はブック間ではなく、同ブック内の隣のシート間でやりとりする作業をマクロにしたものです。

1枚目のシートにある情報:
ABCDE
ユーザー名電話番号
B川B太0120-002
A山A郎0120-001A市在住
C岡C介0120-003

2枚目のシートにある情報:
ABCDE
ユーザー名 電話番号項目
F崎F二0120-006
G田G夫0120-007G県GG村
H村H子0120-008
C岡C介0120-003CC村
B川B太0120-002東京都B市



出力結果(1枚目のシート):
ABCDE
B川B太0120-002東京都B市
A山A郎0120-001A市在住
C岡C介0120-003CC村
F崎F二0120-006
G田G夫0120-007G県GG村
H村H子0120-008

で、皆様の助けを得て以下のマクロを書くまではできました。

Sub test01()

Columns("H:CZ").Select
Selection.ColumnWidth = 0


Dim sh1 As Worksheet, sh2 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
'--
d1 = sh1.Range("a65536").End(xlUp).Row
d2 = sh2.Range("a65536").End(xlUp).Row

k = 2
'---
For i = 2 To d1
sh1.Cells(k, "A") = sh1.Cells(i, "A")
sh1.Cells(k, "C") = sh1.Cells(i, "C")
sh1.Cells(k, "E") = sh1.Cells(i, "E")
k = k + 1
For j = 2 To d2

If sh2.Cells(j, "J") = "" Then
If sh2.Cells(j, "A") = sh1.Cells(i, "A") Then
If sh2.Cells(j, "C") = sh1.Cells(i, "C") Then

sh1.Cells(k - 1, "E") = sh2.Cells(j, "E")
sh2.Cells(j, "J") = "Y1"
Else
sh1.Cells(k, "A") = sh2.Cells(j, "A")
sh1.Cells(k, "C") = sh2.Cells(j, "C")
sh1.Cells(k, "E") = sh2.Cells(j, "E")
k = k + 1
End If
Else
End If
End If
Next j
Next i
'---
For j = 2 To d2
If sh2.Cells(j, "J") = "Y1" Then
Else
sh1.Cells(k, "A") = sh2.Cells(j, "A")
sh1.Cells(k, "C") = sh2.Cells(j, "C")
sh1.Cells(k, "E") = sh2.Cells(j, "E")
k = k + 1
End If
Next j

End Sub

------前置き終わり--------

今回やりたいのは、これを同ブック内の隣同士のシートではなく、別ブックのシートから情報を拾ってきたいのです。
つまり、
元ブック(このシート上部にマクロ実行ボタンを置きます)の現在のシートにある情報:
ABCDE
ユーザー名電話番号
B川B太0120-002
A山A郎0120-001A市在住
C岡C介0120-003
マクロ実行時にダイアログで指定するブック(シートは最初の1枚だけです)にある情報:
ABCDE
ユーザー名 電話番号項目
F崎F二0120-006
G田G夫0120-007G県GG村
H村H子0120-008
C岡C介0120-003CC村
B川B太0120-002東京都B市


出力結果(元ブックの元シート):
ABCDE
B川B太0120-002東京都B市
A山A郎0120-001A市在住
C岡C介0120-003CC村
F崎F二0120-006
G田G夫0120-007G県GG村
H村H子0120-008


ダイアログを表示させてファイルを選択するのは分かるのですが、その後ファイル同士を読みながら作業を進めるにはどうすればよいでしょうか・・・?
また丸投げですみませんが、なにとぞご教示頂ければと思います。

投稿日時 - 2009-11-05 04:06:30

QNo.5423052

すぐに回答ほしいです

質問者が選んだベストアンサー

勉強のためにも直接の回答ではないです。

名前を指定してブックを開く
http://officetanaka.net/excel/vba/file/file02.htm


>Dim sh1 As Worksheet, sh2 As Worksheet
>Set sh1 = Worksheets("Sheet1")
>Set sh2 = Worksheets("Sheet2")

Set sh1 = Workbooks("Book1.xls").Worksheets("Sheet1") 'Book1のSheet1
Set sh2 = Workbooks("Book2.xls").Worksheets("Sheet2") 'Book2のSheet2

とかで出来そうな感じですが、Bookを開いた際の変数を利用してみて下さい。

投稿日時 - 2009-11-05 06:10:03

お礼

お礼が遅れました。
結局、ブック間を往復しながらのデータのやりとりはやめて、必要なシートを1つのブックに集めてしまってから作業をする方法で解決しました。
ご意見ありがとうございます。シート間でのやりとりができるのであればこれをブック間に拡張するのはもう目の前だと思いますので、もう少し精進します・・・。

投稿日時 - 2009-11-13 02:11:08

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問