アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるシートにあるデータを別のシートにまとめようとしています。
具体的には、元シートの電話番号をキーに差分シートの電話番号を検索し、ヒットした行の各データを元シートの所定の行に転記するというものです。
元シート・差分シートともに構成は同じです。元シートのC列以外は歯抜けがあることがありますが、キーとなるC列には歯抜けが無く、この列の最後尾をテーブルのEndとして利用することが可能です。

元シート:
C列→ユーザ名
E列→電話番号
G列→項目1
H列→項目2

差分シート:
C列→ユーザ名
E列→電話番号
G列→項目1
H列→項目2

要するにVLOOKUPのような事を行いたいのですが、続きがありまして・・・
"差分シートにある電話番号が元シートに存在しない場合"、検索に引っかからなかったからといって無視せず、その情報もあわせて取り込みたいのです。
取り込み先の列は上記のVLOOKUPに準じます。
ダイアログを開いてファイルを選択させるまではわかるのですが、その後の手順がどうにもさっぱりで・・・

添付ファイルにやりたいことを書いてみました。どなたか手順をご教示いただけませんでしょうか。

「XL2003:別ブックを検索してデータを」の質問画像

A 回答 (2件)

質問には、表題に「VBAで処理したい」ことをはっきり書くこと。


(マクロ実行後を見て始めてそれが判る。VLOOKUPなど出して関数の質問かと誤解する)
ーー
添付画像は、読者・回答者がテストで使えるよう、質問の中にデータを書いておいてほしい。回答の時再入力しないといけないのは、かなわない。
ーー
この質問も、回答者に全てのコードを書いてくれという、丸投げに近いな。
ーーー
これは両データをソートして、マッチングのアルゴリズムでやる問題だが、質問者には説明を要するので、初歩的な蚊mmが得やすいやり方でやってみた。
例データ 以下ーは空白セル(画面で左詰されないようにこの回答だけに入れた)
必要最小限の項目データにしている。多数でテストしてみてください。
Sheet1
ユーザー名-電話番号
a-1
b-2
c-3
Sheet2
ユーザー名-電話番号-項目
c     -4-x
b     -2-y
d     -5-z
e     -6-w
ーー
コード ひょ順モジュールに
Sub test01()
Dim sh1 As Worksheet, sh2 As Worksheet, sh3 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
Set sh3 = Worksheets("Sheet3")
'--
d1 = sh1.Range("a65536").End(xlUp).Row
d2 = sh2.Range("a65536").End(xlUp).Row
'MsgBox d1
'MsgBox d2
k = 2
'---
For i = 2 To d1
sh3.Cells(k, "A") = sh1.Cells(i, "A")
sh3.Cells(k, "C") = sh1.Cells(i, "C")
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
sh2.Cells(j, "J") = "Y"
Else
sh3.Cells(k, "A") = sh2.Cells(j, "A")
sh3.Cells(k, "C") = sh2.Cells(j, "C")
sh3.Cells(k, "E") = sh2.Cells(j, "E")
k = k + 1
sh2.Cells(j, "J") = "Y"
End If
Else
End If
End If
Next j
Next i
'---
For j = 2 To d2
If sh2.Cells(j, "J") = "Y" Then
Else
sh3.Cells(k, "A") = sh2.Cells(j, "A")
sh3.Cells(k, "C") = sh2.Cells(j, "C")
sh3.Cells(k, "A") = sh2.Cells(j, "A")
sh3.Cells(k, "E") = sh2.Cells(j, "E")
k = k + 1
End If
Next j
End Sub
項目の代入は、手を抜いて、最小限にしてあるので、補ってください。
ーーー
Sheet3
ユーザー名-電話番号-項目
a-1-
b-2-
c-3-
c-4-x
d-5-z
e-6-w
    • good
    • 0
この回答へのお礼

御礼が遅れました。
いろいろご指摘、およびサンプルスクリプトありがとうございました。
いただいたものをいじって、現在ブック間でのデータ移動に成功してます。
○投げhご指摘のとおりでお恥ずかしい限り、もっと精進してこちらで回答できるくらいまで勉強します。
ありがとうございました。

お礼日時:2009/10/08 19:20

差分シートを順に頭から処理していくとして



前処理:元シートの最終行+1を取得して追加行とする
     その他、元シート.差分シートへの参照を設定
1)処理中の差分シートのキー(ユーザ名で良いのかな?)が元シートに
 あるかどうかをチェック。
 すでにある場合は、以下をパスして次の行へ
2)未登録の場合は、元シートの追加行へ新しいデータをコピー
 追加行のインデックスを+1

以上のループを差分シートのデータが終わるまで繰り返す。

後処理:必要に応じて名簿をソートするなどして、元シートを保存するなど。
    • good
    • 0
この回答へのお礼

ありがとうございました。
いろんな切り口があるかとは思いましたが、この方法でまず電話番号を拾ってしまってから最後に関連項目を拾う形式のほうがすっきりしていますね。
週末に試してみたいと思います。

お礼日時:2009/10/08 19:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!