重複データを抽出したく試していますが、以下で詰まっています。
例えば、
A、B、C列のデータを連結したものを比較対象とし、
複数行あるものから重複データを抽出したいのですが、
「&」で繋げたものを比較すると、違うものとみなされます。
A1、B1、C1を連結したものを111(A1に1、B1に1、C1に1)とし、
A2、B2、C2を連結したものを111(A2に1、B2に1、C2に1)とした場合、
dictionaryを使って、重複データを抽出している途中ですが、
「111」と「111」が違うものとして判断されてしまいますが、
同じだからエラー(既に割り当てられてる)で止まります(結合しなければ、機能します)。
一旦シート上で結合したものを値貼り付けに変えて、それをチェック対象にするしかないでしょうか?
データは数万行あります。
ご存知の方、ご教示お願いします。
<以下コード(コードは自分で考えたものではなく一部流用で、抽出できたら整形します)>
Sub test()
Dim i As Long
Dim j As Long
Dim maxRow As Long
Dim dic As Object
Dim strMat, lngNum
Set dic = CreateObject("scripting.dictionary")
j = 2 'リスト書き出し開始行
With ActiveSheet
maxRow = .Cells(Rows.Count, 2).End(xlUp).Row
For i = 2 To maxRow
strMat = .Cells(i, 2).Value & .Cells(i, 3).Value & .Cells(i, 4).Value←ここ
If dic.Exists(strMat) Then
' 重複してる
.Cells(dic.Item(strMat), 7).Value = strMat
Else
' 重複してない
dic.Add (.Cells(i, 2).Value), j
j = j + 1
End If
Next i
End With
end sub
No.1ベストアンサー
- 回答日時:
strMat = .Cells(i, 2).Value & .Cells(i, 3).Value & .Cells(i, 4).Value
とおいて、この3つのセルを連結した文字列strMatがdicに存在しているかどうかのチェックをしています。
一方で、重複していないときは
dic.Add (.Cells(i, 2).Value), j
で .Cells(i, 2).Value だけキーとして追加されます。
これがおかしいのでは?
A1、B1、C1を連結したものを111(A1に1、B1に1、C1に1)とし、
A2、B2、C2を連結したものを111(A2に1、B2に1、C2に1)とした場合、
で動きを考えると
1ループ目:
dicに「111」は含まれない → dicにA1の「1」が追加される
2ループ目:
dicに「111」は「含まれない」 → dicにA2の「1」を追加しようとするが既に1が登録されている
となるはずです
No.4
- 回答日時:
提示されたマクロを少し変えました。
2行目以降に、以下の項目を出力します。
①G列へ重複している組み合わせ
②H列へ組み合わせの件数
Sub test2()
Dim i As Long
Dim j As Long
Dim maxRow As Long
Dim dic As Object
Dim strMat, lngNum
Dim key As Variant
Set dic = CreateObject("scripting.dictionary")
j = 2 'リスト書き出し開始行
With ActiveSheet
maxRow = .Cells(Rows.Count, 2).End(xlUp).row
For i = 2 To maxRow
strMat = .Cells(i, 2).Value & .Cells(i, 3).Value & .Cells(i, 4).Value
If dic.Exists(strMat) Then
' 重複してる
dic.Item(strMat) = dic.Item(strMat) + 1
Else
' 重複してない
dic.Add strMat, 1
End If
Next i
For Each key In dic.keys
If dic.Item(key) > 1 Then
.Cells(j, "G").Value = key
.Cells(j, "H").Value = dic.Item(key)
j = j + 1
End If
Next
End With
End Sub
No.3
- 回答日時:
こんばんは
基本的には「keyが同じか否か」で判断しているはずです。
>「111」と「111」が違うものとして判断されてしまいますが、~
該当箇所の内容をピックアップして、実際にどうなっているかを確認してみてください。
多分、違うものになっているはずと思います。
例えば、セル値のみかけは同じでも、後ろにスペースが入っているとか、あるいは少数以下がある値を表示上は整数にして表示している場合などの可能性が考えられます。
一方で、ご提示のコードでは、キーの追加に
(タイポかも知れませんけれど・・)
>dic.Add (.Cells(i, 2).Value), j
として、チェックとは関係のないキーを追加していますけれど??
>dic.Add (strMat), j
なのではないでしょうか?
(もしも、ご提示のままならチェックできないのは当然の結果と言えます)
なお、ご質問には関係ありませんけれど・・
ご提示のように単純に連結する方法だと、
A1、B1、C1が順に「11」、「2」、「3」で
A2、B2、C2が順に「1」、「12」、「3」や
「11」、「(空白)」、「23」 となっている場合に
同じものと判断されますが、それはそれで良いということでしょうか?
ご指摘ありがとうございます。
後半のご質問について、現状、個別のセル値は一応パターンが決まっているの個別セルだと重複が機能しないため、結合値が1つのデータという状況です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 重複確認 2 2024/06/30 12:17
- Visual Basic(VBA) VBAコードが作動しません。修正したいのですが何処に原因かあるか教えて下さい。 1 2024/01/08 16:23
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) VBAコードについて 2 2024/03/10 12:41
- Excel(エクセル) エクセルマクロでデータ出力の際の条件がうまく機能しません。 2 2023/09/30 13:01
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) xmlドキュメントから別拡張子で保存したい 4 2023/09/12 11:08
- Visual Basic(VBA) VBA listBoxについて 2 2024/03/26 16:14
このQ&Aを見た人はこんなQ&Aも見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
チョコミントアイス
得意ですか?不得意ですか?できれば理由も教えてください。
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
ちょっと先の未来クイズ第4問
11月ごろに発表される、2024年の「新語・流行語大賞」にノミネートされる言葉を書けるだけ書いてください。
-
好きな「お肉」は?
牛肉、豚肉、鶏肉、ラム肉、クマやシカの狩猟肉……。 いろ〜んな肉が食べられるようになりましたよね。 あなたがこれまで食べて「これはうまい!」とか「なんじゃこりゃ!」と好きになったお肉を教えてください。
-
【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
-
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
IF文、条件分岐の整理方法
Visual Basic(VBA)
-
-
4
VBA 入力箇所指定方法
Visual Basic(VBA)
-
5
VBAなくなるの?
Visual Basic(VBA)
-
6
VBAコードのインデント表示
Visual Basic(VBA)
-
7
VBA コードどこがおかしいですか?
Visual Basic(VBA)
-
8
Excelのマクロについて教えてください。
Visual Basic(VBA)
-
9
VBAでセルの書式を変えずに文字列を置換する方法をご教示ください
Visual Basic(VBA)
-
10
Excel-VBAのmsgBox()の不思議
Visual Basic(VBA)
-
11
VBA 複数条件の分岐処理の上手な方法
Visual Basic(VBA)
-
12
エクセルVBA
Visual Basic(VBA)
-
13
Excel 範囲指定スクショについて Excelで範囲指定してスクリーンショットする機能がありますが
Visual Basic(VBA)
-
14
VBの色を変えるにはどうしたらいいですか?
Visual Basic(VBA)
-
15
Excel VBA 選択範囲の罫線色の変更プロージャの動作速度の改善について
Visual Basic(VBA)
-
16
テキストファイルの1行目のみを削除したい
その他(プログラミング・Web制作)
-
17
これて逆じゃないですか?
C言語・C++・C#
-
18
サブフォルダに格納されているファイルを、ファイル名ごとに条件分岐させたい
Visual Basic(VBA)
-
19
このプログラミング言語のfor分の文法構造を教えてください
その他(プログラミング・Web制作)
-
20
VBAの間違い教えて下さい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのマクロについて教えてく...
-
Excelのマクロについて教えてく...
-
Outlookの「受信日時」「件名」...
-
VBA 別ブックから条件に合うも...
-
【ExcelVBA】5万行以上のデー...
-
Visualbasicの現状について教え...
-
VBAでセルの書式を変えずに文字...
-
Excel 範囲指定スクショについ...
-
[VB.net] ボタン(Flat)のEnable...
-
VBA 2次元配列の出力
-
エクセルでCDOを使ったメール送...
-
【VBA】値を変更しながら連続で...
-
pdfファイルの複数添付 引数の型
-
vbaにてseleniumを使用したedge...
-
VB.net(VB)で、フォームにExcel...
-
エクセルvbaの対象セルに色をつ...
-
Excel VBA 定義されたプロージ...
-
ExcelVBA シート名を複数セルか...
-
【ExcelVBA】インデックスが有...
-
Excelのマクロについて教えてく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】5万行以上のデー...
-
【ExcelVBA】dictionaryの重複...
-
VBAでセルの書式を変えずに文字...
-
[Excel VBA]特定の条件で文字を...
-
【VBA】 結合セルに複数画像と...
-
VBA 別ブックからコピペしたい...
-
エクセルVBAのブックを開く方法...
-
WindowsのOutlook を VBA から...
-
エクセルでCDOを使ったメール送...
-
エクセルvbaの対象セルに色をつ...
-
【ExcelVBA】インデックスが有...
-
Excelのマクロについて教えてく...
-
エクセルVBAで特定のセルの値を...
-
エクセルのVBAコードについて教...
-
【VBA】値を変更しながら連続で...
-
Outlookの「受信日時」「件名」...
-
VBA 2次元配列の出力
-
Excel 範囲指定スクショについ...
-
VBA 別ブックから条件に合うも...
-
Web画面の文字をVB6で取得したい
おすすめ情報