
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
なぜこんな初歩的なVBAのIf文でエラーか発生して使えないのか、全く理解出来ません。誰か助けてくださ
Visual Basic(VBA)
-
ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています
Visual Basic(VBA)
-
日付を重複させずに数えたい
Visual Basic(VBA)
-
4
順列をランダムに発生するプログラム
Visual Basic(VBA)
-
5
検索
Visual Basic(VBA)
-
6
初めてマクロを入力しますが、テキストとおりに入力したのに構文エラーです。修正を教えてください。
Visual Basic(VBA)
-
7
VBAプログラミング
Visual Basic(VBA)
-
8
【VBAエラー】Nextに対するForがありません 対策について
Visual Basic(VBA)
-
9
vbaの計算 if elseと範囲について
Visual Basic(VBA)
-
10
ListBox1をClickしたときのイベント
Visual Basic(VBA)
-
11
VBA コードの意味を教えて下さい。
Visual Basic(VBA)
-
12
vba 最大値 条件分岐
Visual Basic(VBA)
-
13
VBA初心者です。電話番号の数字の前に0を表示させたいです。
Visual Basic(VBA)
-
14
エクセルVBAで教えて頂きたいのですが?
Visual Basic(VBA)
-
15
Excel VBAでAA(BBB) → BBB.AA に置換したい
Visual Basic(VBA)
-
16
VBAの計算について
Visual Basic(VBA)
-
17
該当セルの値を別ブックのシート名と一緒であればコピーしてほしい
Visual Basic(VBA)
-
18
VBA言語プログラミング
Visual Basic(VBA)
-
19
VBAマクロでシートコピーした新シートにコピー元シートとの計算式の入れ方を教えて下さい。
Visual Basic(VBA)
-
20
【マクロ】表への繰り返し転記について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
このカテゴリの人気Q&Aランキング
-
4
ユーザーフォームのラベルに時...
-
5
エクセルのエラーメッセージ「4...
-
6
ユーザーフォームのラベルに時...
-
7
VBA シートのボタン名を変更し...
-
8
列 A に同じ日が2つが必要です。
-
9
検索のユーザーフォームの表示...
-
10
2つ目のコンボボックスが動作...
-
11
別のシートから値を取得するとき
-
12
VBA シート上にドロップダウン...
-
13
ユーザーフォームのラベルに日...
-
14
【Excel VBA】指定行以降をクリ...
-
15
VBAでループ内で使う変数名を可...
-
16
PowerPoint VBA で画像の鮮明度...
-
17
実行時エラー 3265「要求された...
-
18
ExcelVBAを使って、値...
-
19
Excel マクロ VBA プロシー...
-
20
特定のPCだけ動作しないVBAマク...
おすすめ情報
公式facebook
公式twitter
皆様、情報が足りず申し訳ございません。
画像をつけました。
実際にはA列からM列まで入力されておりまして、
膨大といいましても2万行くらいかと思っております。
見出し行について画像に入っておりませんが、
実際は見出し行が入っております。
実際のデータは別のエクセルデータになるのですが、
シート1にペーストした時に、シート2に摘出されるようにしたいと
思っております。
貼り付ける前は別のエクセルデータになりますので、
自分でコピーしてきて貼り付けることを想定しております。
Qchan1962さんのVBAをsheet1に入れまして、コピー元からペーストしてみると何も起こりませんので、実行を押してみた所、新規ブックが立ち上がったのですが、エラーが出まして、「ActiveX コンポーネントはオブジェクトを作成できません。」と出てしまいました。理由がわからないのですが、
エクセルのバージョンなど関係あるのでしょうか。
当方、Macでエクセルバージョンは16.16.27となります。
ご指導よろしくお願いいたします。