質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

3回答

11446閲覧

データ突き合わせ 不一致を別ブックに抽出

yoshin1192

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2018/06/24 14:01

前提・実現したいこと

同じフォーマットで、2種類のエクセルファイルがあるのですが、
こちらを突き合わせを行い、重複していない行を、
別のブックに抽出を行いたいです。

素人なので、質問の内容が伝わりにくいかもしれませんが、
よろしくお願いいたします。

データ1に
イメージ説明

データ2の内容を突き合わせ
イメージ説明
不一致を別ブックに抽出
イメージ説明

皆様、よろしくお願いいたします。

試したこと

様々なサイトをみましたが、同じようなものがありませんでした

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

様々なサイトをみましたが、同じようなものがありませんでした

探せばあると思いますが、
ぱっと思いついたところで。。。
多分こういうやり方はどこにも書いてないので、
参考にならないかも知れませんが、
Excelを自動で操作するとこんな感じということで。
逆に言うとこの手順でやれば、手動でやっても出来るということですが。。。

VBA

1Sub test() 2 Dim rngList As Range '元となる一覧のセル範囲 3 Dim rngNew As Range '抽出したデータのセル範囲 4 Dim rngOld As Range '与えられたデータのセル範囲 5 Dim rngResult As Range '結果表示のセル範囲 6 Dim i As Long '抽出したデータ数 7 8 Set rngList = Workbooks("データ2").Worksheets(1).Range("A1").CurrentRegion 9 Set rngNew = rngList(rngList.Rows.Count + 1, 1) 10 With Workbooks("データ1").Worksheets(1).Range("A1").CurrentRegion 11 Set rngOld = Intersect(.Cells, .Offset(1)) 12 End With 13 Set rngResult = ThisWorkbook.Worksheets(3).Range("A1") 14 15 rngOld.Copy rngNew 16 rngNew.CurrentRegion.RemoveDuplicates Header:=xlYes 17 i = rngNew.Row 18 19 '元と行数が増えたか数えてみる 20 With rngList 21 i = .CurrentRegion.Rows.Count - .Rows.Count 22 End With 23 24 '増えていたら転記 25 If i > 0 Then 26 With rngResult 27 rngList.Rows(1).Copy .Range("A1") 28 rngNew.Resize(i).Cut .Range("A2") 29 End With 30 End If 31 32 'ブックへの編集が無かったことにする 33 rngNew.Worksheet.Parent.Saved = True 34End Sub

投稿2018/06/25 00:01

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベタですが、ループで一つずつ突き合わせてみました。
配列にいれて処理してますので、速度的にも問題ないかな。

vba

1Sub Test() 2 Dim data1(), data2(), Output(), r As Long, c As Long, r2 As Long, r3 As Long 3 Dim d1 4 data1 = Worksheets("Sheet1").Range("A1").CurrentRegion.Value 5 data2 = Worksheets("Sheet2").Range("A1").CurrentRegion.Value 6 ReDim Output(1 To UBound(data1), 1 To UBound(data1, 2)) 7 8 For c = 1 To UBound(data1, 2) 9 Output(1, c) = data1(1, c) 10 r3 = 1 11 For r = 2 To UBound(data1) 12 d1 = data1(r, c) 13 For r2 = 2 To UBound(data2) 14 If d1 = data2(r2, c) Then 15 d1 = Null 16 Exit For 17 End If 18 Next 19 If Not IsNull(d1) Then 20 r3 = r3 + 1 21 Output(r3, c) = d1 22 End If 23 Next 24 Next 25 Worksheets("Sheet3").Range("A1:D3").Value = Output 26End Sub

データ1 が Sheet1、データ2 が Sheet2、出力先が Sheet3 としてますので、
実際のワークブック、シートに変更してください。

投稿2018/06/24 23:31

編集2018/06/25 00:26
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

同じような質問があったので参考まで
VBAを使い、表よりデータを抽出して重複を削除したい

投稿2018/06/24 14:23

efcode

総合スコア422

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshin1192

2018/06/24 14:36

ありがとうございます。 ただ、各行の内容を突き合わせし、別ブックに抽出したいので、 こちら、機会がありましたら参考にさせていただきます。 ご助言、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問