前提・実現したいこと
同じフォーマットで、2種類のエクセルファイルがあるのですが、
こちらを突き合わせを行い、重複していない行を、
別のブックに抽出を行いたいです。
素人なので、質問の内容が伝わりにくいかもしれませんが、
よろしくお願いいたします。
皆様、よろしくお願いいたします。
試したこと
様々なサイトをみましたが、同じようなものがありませんでした
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア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総合スコア33715
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
同じような質問があったので参考まで
VBAを使い、表よりデータを抽出して重複を削除したい
投稿2018/06/24 14:23
総合スコア422
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。