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

お世話になります。

エクセルでデータを貼り付けしたときに、
A列とB列の完全一致データを行ごと(AからMまで)別のシートに摘出したいと思っております。
また一致したデータは削除せずに全て摘出したいと考えております。

膨大なデータ数ですので処理に時間はかかると思っておりますが、
VBAで自動で処理できる方法をご教示頂けないでしょうか。

ご指導を宜しくお願いいたします。

質問者からの補足コメント

  • 皆様、情報が足りず申し訳ございません。

    画像をつけました。
    実際にはA列からM列まで入力されておりまして、
    膨大といいましても2万行くらいかと思っております。

    見出し行について画像に入っておりませんが、
    実際は見出し行が入っております。

    「エクセル 2つの列にある値の完全一致を抜」の補足画像1
      補足日時:2022/12/15 14:33
  • 実際のデータは別のエクセルデータになるのですが、
    シート1にペーストした時に、シート2に摘出されるようにしたいと
    思っております。

      補足日時:2022/12/15 14:38
  • 貼り付ける前は別のエクセルデータになりますので、
    自分でコピーしてきて貼り付けることを想定しております。

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/12/15 14:42
  • うーん・・・

    Qchan1962さんのVBAをsheet1に入れまして、コピー元からペーストしてみると何も起こりませんので、実行を押してみた所、新規ブックが立ち上がったのですが、エラーが出まして、「ActiveX コンポーネントはオブジェクトを作成できません。」と出てしまいました。理由がわからないのですが、
    エクセルのバージョンなど関係あるのでしょうか。

    当方、Macでエクセルバージョンは16.16.27となります。

    ご指導よろしくお願いいたします。

    No.8の回答に寄せられた補足コメントです。 補足日時:2022/12/15 20:58

A 回答 (15件中1~10件)

・貼り付ける前はどのような所にあるデータなのでしょうか?


・『A列とB列の完全一致データ』とはA列の値とB列の値が同じ場合との解釈で宜しいのでしょうか?
・『膨大な』とは100万行とか?(Excelの最大行数は、1,048,576 行)
それとも1~5万行程度?
この回答への補足あり
    • good
    • 0

レイアウト等の確認です。


1.添付図のようなレイアウトであってますか。
(1行目が見出しで、データは2行目から)
2.添付図の場合は、3行と5行が摘出対象となる。
3.膨大なデータということですが、およそ何行ありますか。
「エクセル 2つの列にある値の完全一致を抜」の回答画像2
    • good
    • 0
この回答へのお礼

有難うございます。補足説明を追加いたしましたので、今一度のご指導を宜しくお願いいたします。

お礼日時:2022/12/15 14:53

No.1です。



>『A列とB列の完全一致データ』とはA列の値とB列の値が同じ場合との解釈

についたしますがA:Bの比較する組み合わせ語句?は、単一でしょうか複数行ありますでしょうか?
    • good
    • 0
この回答へのお礼

有難うございます。補足説明を追加いたしましたので、今一度のご指導を宜しくお願いいたします。

お礼日時:2022/12/15 14:53

No.3 です。



>についたしますが

追加しますの間違いでした。

あと

>膨大なデータ数ですので処理に時間はかかると思っておりますが

何か作業をやってみて時間がかかるので改善案と言う事でしょうか?
それともまだやってなく手の憶測ですか?
まぁデータ数次第ですがPowerQueryって機能もあるようですしね。
⇒元のデータがどこにあるのかにもよりそう。
    • good
    • 0
この回答へのお礼

有難うございます。いつも重複をチェックするのですが、並び替えの上下目視で合わせています。=EXACTで上下の判定のみなのですが、効率的なやり方ではないので、改善したいと思っております。
補足説明を追加いたしましたので、今一度のご指導を宜しくお願いいたします。

お礼日時:2022/12/15 14:53

こんにちは



こんな感じでしょうか?
※ 不明点は勝手に想定。

Sub Q_13270809()
Dim ws As Worksheet
Set ws = ActiveSheet
With Worksheets.Add(after:=ws)
ws.Range("A:M").Copy .Range("B1")
.Range("B1").CurrentRegion.Columns(1).Offset(, -1).FormulaLocal = "=IF(B1=C1,"""",1)"
If Application.Max(.Columns(1)) > 0 Then _
.Columns(1).SpecialCells(xlCellTypeFormulas, xlNumbers).EntireRow.Delete
.Columns(1).Delete
End With
End Sub
    • good
    • 2
この回答へのお礼

有難うございます。補足説明を追加いたしましたので、今一度のご指導を宜しくお願いいたします。

お礼日時:2022/12/15 14:50

No5です。



10000行でテストしたけれど、1秒もかからないですよ。
(マシンの性能も影響すると思いますが・・・)
    • good
    • 0
この回答へのお礼

有難うございます。これからご指示の通りに試してみようと思います。

お礼日時:2022/12/15 19:43

補足要求です。


①見出しは1行目で、データは2行目からでしょうか。
②シート1のシート名は何でしょうか。(Sheet1で良いですか)
③シート2のシート名は何でしょうか。(Sheet2で良いですか)
    • good
    • 0
この回答へのお礼

有難うございます。

見出しは1行目で、データは2行目からになります。
シート名はSheet1とShee2でよいと考えております。

お礼日時:2022/12/15 19:42

こんばんは


出力の位置関係はどうします?ソートしますか(元データ順)・・
それとも2つ目が出てきた順で良いですか・・
ソートする 例見出しは考慮していません 新規ブックで操作されます
処理速度はデモデータが無いので未確認

Sub Example01()
ActiveSheet.Copy
Dim dic As Object
Set dic = CreateObject("Scripting.dictionary")
Dim arData As Variant
Dim ary()
Dim i As Long, j As Long
Dim v As String
Dim Rng As Range
arData = Range(Cells(1, "A"), Cells(Rows.Count, "M").End(xlUp)).Value
For i = 1 To UBound(arData)
v = arData(i, 1) & arData(i, 2)
If Not dic.Exists(v) Then
dic.Add v, 0
Else
If dic.Item(v) = 0 Then
ReDim Preserve ary(j)
ary(j) = v
j = j + 1
End If
dic.Item(v) = dic.Item(v) + 1
End If
Next
Set dic = Nothing
Dim k, dupData()
Dim n As Long, x As Long
For j = 0 To UBound(ary)
For i = 1 To UBound(arData)
v = arData(i, 1) & arData(i, 2)
If StrComp(v, ary(j)) = 0 Then
For x = 1 To UBound(arData, 2)
ReDim Preserve dupData(UBound(arData, 2), n)
dupData(0, n) = i
dupData(x, n) = arData(i, x)
Next
n = n + 1
End If
Next i
Next
Range("A1").CurrentRegion.ClearContents
Range("A1").Resize(UBound(dupData, 2) + 1, UBound(dupData, 1) + 1).Value = WorksheetFunction.Transpose(dupData)
Range("A1").CurrentRegion.Sort Key1:=Range("A1"), Order1:=xlAscending
Columns(1).Delete
End Sub
この回答への補足あり
    • good
    • 1
この回答へのお礼

有難うございます!
摘出後にA列を基準にソートができれば尚よいと考えております。

これから試してみようと思います!

お礼日時:2022/12/15 19:47

#8です


Macエクセルですか・・・
残念です
CreateObject("Scripting.dictionary")が使えません
StrCompも使えるか分かりません
一応、 https://qiita.com/r_keir/items/6f03a753bbd32dc8c …
で対策し添削する必要があるようです

ローカル環境にMacエクセルが無い為、代替え手法が上手くいくか、
処理速度などの確認も出来ない為、これ以上の回答は出来そうもありません
    • good
    • 0

一応


処理時間は分かりません・・未検証

Sub Example02()
Application.ScreenUpdating = False
ActiveSheet.Copy
Dim arData As Variant
Dim i As Long
Dim v()
Dim Rng As Range
arData = Range(Cells(1, "A"), Cells(Rows.Count, "M").End(xlUp)).Value
ReDim v(1 To UBound(arData))
For i = 1 To UBound(arData)
v(i) = arData(i, 1) & arData(i, 2)
Next
Cells(1, "N").Resize(UBound(v)) = WorksheetFunction.Transpose(v)
For i = 1 To UBound(v)
If Application.CountIf(Range(Cells(1, "N"), Cells(Rows.Count, "N").End(xlUp)), v(i)) <= 1 Then
If Rng Is Nothing Then
Set Rng = Cells(i, 1)
Else
Set Rng = Union(Rng, Cells(i, 1))
End If
End If
Next
Rng.EntireRow.Delete
Columns("N:N").Delete
Range("A1").CurrentRegion.Sort Key1:=Range("A1"), Order1:=xlAscending
Set Rng = Nothing
Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

有難うございます。

マクロに追加して実行してみたところ、
ペーストしたデータのまま摘出されている感じで、
新規ブックが立ち上がるのみとなっております。

みなさまの環境では、
稼働している状態なのに、
何が悪いのか全く見当がつきません。

工程のどこか悪いか検討つきますでしょうか?

お礼日時:2022/12/16 15:31

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