あるシートにあるデータを別のシートにまとめようとしています。
具体的には、元シートの電話番号をキーに差分シートの電話番号を検索し、ヒットした行の各データを元シートの所定の行に転記するというものです。
元シート・差分シートともに構成は同じです。元シートのC列以外は歯抜けがあることがありますが、キーとなるC列には歯抜けが無く、この列の最後尾をテーブルのEndとして利用することが可能です。
元シート:
C列→ユーザ名
E列→電話番号
G列→項目1
H列→項目2
差分シート:
C列→ユーザ名
E列→電話番号
G列→項目1
H列→項目2
要するにVLOOKUPのような事を行いたいのですが、続きがありまして・・・
"差分シートにある電話番号が元シートに存在しない場合"、検索に引っかからなかったからといって無視せず、その情報もあわせて取り込みたいのです。
取り込み先の列は上記のVLOOKUPに準じます。
ダイアログを開いてファイルを選択させるまではわかるのですが、その後の手順がどうにもさっぱりで・・・
添付ファイルにやりたいことを書いてみました。どなたか手順をご教示いただけませんでしょうか。
No.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
御礼が遅れました。
いろいろご指摘、およびサンプルスクリプトありがとうございました。
いただいたものをいじって、現在ブック間でのデータ移動に成功してます。
○投げhご指摘のとおりでお恥ずかしい限り、もっと精進してこちらで回答できるくらいまで勉強します。
ありがとうございました。
No.1
- 回答日時:
差分シートを順に頭から処理していくとして
前処理:元シートの最終行+1を取得して追加行とする
その他、元シート.差分シートへの参照を設定
1)処理中の差分シートのキー(ユーザ名で良いのかな?)が元シートに
あるかどうかをチェック。
すでにある場合は、以下をパスして次の行へ
2)未登録の場合は、元シートの追加行へ新しいデータをコピー
追加行のインデックスを+1
以上のループを差分シートのデータが終わるまで繰り返す。
後処理:必要に応じて名簿をソートするなどして、元シートを保存するなど。
ありがとうございました。
いろんな切り口があるかとは思いましたが、この方法でまず電話番号を拾ってしまってから最後に関連項目を拾う形式のほうがすっきりしていますね。
週末に試してみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Excel(エクセル) Excel_マクロ_複数のシートのVLOOKUPで表示された#N/A以外に色付けをしたいです 1 2023/02/16 22:37
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Excel(エクセル) エクセルシートのデータを1列飛ばしで別ブックのシートに貼り付けるマクロが知りたい 2 2023/06/05 22:37
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで各列の"+"と"o"の合計数を...
-
VBA listBoxから
-
IEの通知バー制御ができなくなった
-
【VBA】マクロの入ったファイル...
-
VBA 複数条件の分岐処理の上手...
-
VBA初心者 Ctrl+での操作、ボタ...
-
VBA 何かしら文字が入っていたら
-
エクセルのマクロについて教え...
-
VBAに詳しい方教えてください。
-
ExcelVBA シート名を複数セルか...
-
ユーザーフォームに別シートか...
-
エクセルのマクロについて教え...
-
CADシステムに図面番号を入力し...
-
【ExcelVBA】インデックスが有...
-
Outlookの「受信日時」「件名」...
-
Excelについて
-
Excel VBA 定義されたプロージ...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ExcelのVBAコードについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのコードを教えてください
-
【ExcelVBA】インデックスが有...
-
ExcelVBA シート名を複数セルか...
-
エクセルvbaについて
-
エクセルのマクロについて教え...
-
【VBA】マクロの入ったファイル...
-
VBA UserFormからの転記で
-
エクセルVBAの配列について
-
Excelで「Ctrl+c」、「Ctrl+v...
-
VBAコードについて教えてくださ...
-
ExcelのVBAコードについて教え...
-
Excel マクロについての相談
-
VBAで質問があります
-
VBAコードについて
-
【ExcelVBA】VBA実行でダイアロ...
-
Excel関数またはVBAでの質問に...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
Outlookの「受信日時」「件名」...
おすすめ情報