
No.13ベストアンサー
- 回答日時:
お返事が遅れてしまい申し訳ございません。
改良有難うございます!
実行したところ、
希望通りの結果になり大変感激しております。
皆様にベストアンサーをつけたいのですが、
最終的な観点からtatsumaru77様に致しました。
最後までお付き合い頂きまして、
大変感謝しております。
有難うございました!
No.15
- 回答日時:
No14様
ご指摘、ありがとうございました。
Order1 はOrder2の誤りでした。
A列とB列が共に等しいものを抽出するので、ソートの対象となります。
質問者様へ
下記URLに修正版をアップしました。
https://ideone.com/VCavZE
No13でアップしたマクロは破棄してください。
No.12
- 回答日時:
No11です。
>データをペーストしてみたのですが、
>何も変わらず、摘出が行われていない状態でしたので、
>マクロの実行を行ったところ、
はい。ペーストした後に、登録したマクロ「重複データ抽出」を実行します。
>コンパイル エラーです。:
>名前付き引数は、すでに指定されています。
コピペに誤りがあったとしか、考えられません。
Option Explicit
Public Sub 重複データ抽出()
~
End Sub
の範囲を正しくコピペしているか、確認してください。
又、
sh3.Range("A1:M" & maxrow1 - 1).Sort key1:=sh3.Range("A1"), Order1:=xlAscending, key2:=sh3.Range("B1"), Order1:=xlAscending, Header:=xlNo
は、1行の文です。1行に収まっているか確認してください。
No.11
- 回答日時:
Macがないので、Macで検証していません。
Sheet1から重複データを抽出し、Sheet2に格納します。
作業用のシートとして、シート名:作業用
を使用します。作業用シートを作成しておいてください。
Scripting.dictionaryを使用しないので、たぶん動作すると思います。
実行時間は当方の環境で、2万件で約4秒でした。
標準モジュールに登録してください。
Option Explicit
Public Sub 重複データ抽出()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim maxrow1 As Long
Dim row3 As Long
Dim row31 As Long
Dim row2 As Long
Dim key As String
Dim old_key As String
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
Set sh3 = Worksheets("作業用")
sh2.Cells.ClearContents
sh3.Cells.ClearContents
maxrow1 = sh1.Cells(Rows.Count, "A").End(xlUp).Row
sh2.Cells(1, 1).Resize(1, 13).Value = sh1.Cells(1, 1).Resize(1, 13).Value
sh3.Cells(1, 1).Resize(maxrow1 - 1, 13) = sh1.Cells(2, 1).Resize(maxrow1 - 1, 13).Value
sh3.Range("A1:M" & maxrow1 - 1).Sort key1:=sh3.Range("A1"), Order1:=xlAscending, key2:=sh3.Range("B1"), Order1:=xlAscending, Header:=xlNo
old_key = ""
row2 = 2
For row3 = 1 To maxrow1 - 1
key = sh3.Cells(row3, 1).Value & "|" & sh3.Cells(row3, 2).Value
If key = old_key Then
If row31 <> 0 Then
sh2.Cells(row2, 1).Resize(1, 13).Value = sh3.Cells(row31, 1).Resize(1, 13).Value
row31 = 0
row2 = row2 + 1
End If
sh2.Cells(row2, 1).Resize(1, 13).Value = sh3.Cells(row3, 1).Resize(1, 13).Value
row2 = row2 + 1
Else
row31 = row3
End If
old_key = key
Next
MsgBox ("完了")
End Sub
有難うございます。
Sheet1、Sheet2、作業用の3つを作成して
照準モジュールにご指導頂いた文を追加後に、
データをペーストしてみたのですが、
何も変わらず、摘出が行われていない状態でしたので、
マクロの実行を行ったところ、
ーーー
コンパイル エラーです。:
名前付き引数は、すでに指定されています。
ーーー
と出まして、Public Sub 重複データ抽出()という箇所が
黄色くなっておりました。
かなりの素人で申し訳ないのですが、
今一度、実行するまでに何か悪かったのか教えていただけますでしょうか?
No.10
- 回答日時:
一応
処理時間は分かりません・・未検証
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
有難うございます。
マクロに追加して実行してみたところ、
ペーストしたデータのまま摘出されている感じで、
新規ブックが立ち上がるのみとなっております。
みなさまの環境では、
稼働している状態なのに、
何が悪いのか全く見当がつきません。
工程のどこか悪いか検討つきますでしょうか?
No.9
- 回答日時:
#8です
Macエクセルですか・・・
残念です
CreateObject("Scripting.dictionary")が使えません
StrCompも使えるか分かりません
一応、 https://qiita.com/r_keir/items/6f03a753bbd32dc8c …
で対策し添削する必要があるようです
ローカル環境にMacエクセルが無い為、代替え手法が上手くいくか、
処理速度などの確認も出来ない為、これ以上の回答は出来そうもありません
No.8
- 回答日時:
こんばんは
出力の位置関係はどうします?ソートしますか(元データ順)・・
それとも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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 更新前と更新後の差分をVBAを使って抜き出したい 5 2023/06/01 14:35
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Visual Basic(VBA) ListView重複データ削除 2 2022/08/05 18:12
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Visual Basic(VBA) エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ 5 2022/11/06 21:34
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでの行数を揃える方法
-
追加クエリで重複データなしで...
-
JDBCを使ってdate型へのINSERT...
-
Excel VBAのユーザーフォームで...
-
【VB】セルが空になるまで処理...
-
ACCESS VBAでSeekメソッドの処...
-
csvデータ不要列の削除をbatフ...
-
C#にVBにあるビジュアル データ...
-
エクセルデータをAccessに取り...
-
【ExcelVBA】範囲選択の方法に...
-
EXCELで外部データの取り込みが...
-
エクセルで去年のデータを今年...
-
pandasでsqlite3にテーブル作成...
-
アクセス2003 最適化/修復...
-
WEBサイトって何ですか?
-
機械語
-
自作アプリからAPIで他のアプリ...
-
テーブルの更新を簡単にできる...
-
マクロでファイルを読み込み、...
-
MySQLでauto_incrementをつかわ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pandasでsqlite3にテーブル作成...
-
Excel VBAのユーザーフォームで...
-
自作アプリからAPIで他のアプリ...
-
追加クエリで重複データなしで...
-
csvデータ不要列の削除をbatフ...
-
【VB】セルが空になるまで処理...
-
マクロでファイルを読み込み、...
-
JDBCを使ってdate型へのINSERT...
-
アクセス2003 最適化/修復...
-
エクセル 2つの列にある値の完...
-
VBAでの行数を揃える方法
-
テーブルの更新を簡単にできる...
-
【ExcelVBA】範囲選択の方法に...
-
WEBサイトって何ですか?
-
MySQLでauto_incrementをつかわ...
-
ListBoxにAddItemする際、重複...
-
EXCELで外部データの取り込みが...
-
エクセルデータをAccessに取り...
-
機械語
-
ACCESS VBAでSeekメソッドの処...
おすすめ情報
皆様、情報が足りず申し訳ございません。
画像をつけました。
実際にはA列からM列まで入力されておりまして、
膨大といいましても2万行くらいかと思っております。
見出し行について画像に入っておりませんが、
実際は見出し行が入っております。
実際のデータは別のエクセルデータになるのですが、
シート1にペーストした時に、シート2に摘出されるようにしたいと
思っております。
貼り付ける前は別のエクセルデータになりますので、
自分でコピーしてきて貼り付けることを想定しております。
Qchan1962さんのVBAをsheet1に入れまして、コピー元からペーストしてみると何も起こりませんので、実行を押してみた所、新規ブックが立ち上がったのですが、エラーが出まして、「ActiveX コンポーネントはオブジェクトを作成できません。」と出てしまいました。理由がわからないのですが、
エクセルのバージョンなど関係あるのでしょうか。
当方、Macでエクセルバージョンは16.16.27となります。
ご指導よろしくお願いいたします。