[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『レコードの一部が部分一致するセルだけを抽出』(うみ)
お世話になります。
URLのレコードが数万件(セル)あります。
このレコード(URL)で完全一致するダブリデータは抽出出来るのですが、この内、一部分だけ(例えばドメインの内5文字がマッチするとか)被るものだけも抽出したいのです。
フィルタなどで取り出しはできるのですが一つ一つ対応せざるを得ず、同時に多変量の一部ののデータだけをマッチングさせたいのですが…。
どなたかご存知であれば助かります。
< 使用 Excel:Excel2013、使用 OS:Windows8 >
ドメインのうち連続した5文字が一致ということ?
http://www.sample.jp http://www.exmple.jp これは同一とみなすの?
http://www.sample.jp http://www.sample.jp/abcd/ こっちは?
いずれにしろもう少し使用明確にしないと回答付きにくい? (稲葉) 2015/01/23(金) 08:33
たとえば最初のものと2番目は一致。 で、2番目と3番目も一致。 こんな場合は?
http://www.ABCDEFGHIJK.jp http://www.ABCDEvwxyz.jp http://www.vwxyzLMNOPQ.jp
「フィルタなどで取り出しはできるのですが一つ一つ対応せざるを得ず」
ということで、何かしら、(うみ)さんの頭の中には、この操作のアルゴリズムがあるわけですよね。 時間さえかければ、何日かしたら作業はできる。
だとすれば、その作業の手順を説明したらいかが?
そうすれば、あとは、その膨大な作業を、どうやって自動化するかという方向になるので。
(β) 2015/01/23(金) 08:54
どっかでseiyaさんが正規表現で連続する20文字くらいの重複を探すプログラムがどっかに あると思うけど見つからない・・・
無理やり案でsubドメインも含む連続した文字の検索例 Option Explicit Sub test() Dim tbl Dim cntLEN As Long Dim dic As Object Dim i As Long Dim j As Long Dim a Dim b Dim itms Dim itm Dim k '//連続する文字数 cntLEN = 5
'//検索セル範囲 tbl = Range("A1:B10").Value
Set dic = CreateObject("Scripting.Dictionary") For i = 1 To UBound(tbl, 1) a = GetURLtoDomain(tbl(i, 1), cntLEN) If UBound(a) > 0 Then For Each b In a If Len(b) > cntLEN Then For j = 1 To Len(b) - cntLEN PartsStringMatch dic, Mid(b, j, cntLEN), i Next j ElseIf Len(b) > 0 Then PartsStringMatch dic, b, i End If Next b End If Next i For Each k In dic.keys itms = Split(dic(k), ",") If UBound(itms) > 0 Then For Each itm In itms tbl(itm, 2) = k Next itm End If Next k With Sheets.Add .Range("A1").Resize(UBound(tbl, 1), UBound(tbl, 2)).Value = tbl End With End Sub Private Function GetURLtoDomain(ByVal myURL As String, ByVal cntLEN As Long) Dim alldmn As String Dim subdmn As String Dim Matches Dim tmp() Dim n As Long Dim m ReDim tmp(1 To 1) With CreateObject("VBScript.RegEXP") .Pattern = "//(.*)/*" If .test(myURL) Then alldmn = .Execute(myURL)(0).submatches(0) & "." .Pattern = "(.+?)\." .Global = True If .test(alldmn) Then Set Matches = .Execute(alldmn) n = 1 For Each m In Matches If Len(m.submatches(0)) >= cntLEN Then ReDim Preserve tmp(1 To n) tmp(n) = m.submatches(0) n = n + 1 End If Next m End If End If End With If UBound(tmp) > 0 Then GetURLtoDomain = tmp Else GetURLtoDomain = Array() End If End Function Private Sub PartsStringMatch(ByRef dic As Object, ByVal x As String, ByVal InsertItem As String) If dic.exists(x) Then dic(x) = dic(x) & "," & InsertItem Else dic.Add x, InsertItem End If End Sub (稲葉) 2015/01/23(金) 10:11
あった! これ使えばもう少し簡単にできるかも (稲葉) 2015/01/23(金) 10:13
ドメインのうち連続した5文字が一致ということ? http://www.sample.jp http://www.exmple.jp これは同一とみなすの? http://www.sample.jp http://www.sample.jp/abcd/ こっちは?
この例、つまり
http://www.sample.jp http://www.exmple.jp http://www.sample.jp http://www.sample.jp/abcd/
は仰るとおり同一としてピックアップします。(http://www. は省いたと仮定いたします)
次に掲示いただいた例
http://www.ABCDEFGHIJK.jp http://www.ABCDEvwxyz.jp http://www.vwxyzLMNOPQ.jp
1と2は同じものとしてみなし、3つ目はみなしません。
そして例えば
http://www.12345.jp/abcde
http://www.67890.jp/abcde
これも同一としてみなします。
現状、重複セルは条件付き書式のduplicate しているものでピックアップ(セルを色付きで表示)(利用しているのがExcel2013の英語版なので、目ジュー表示文字が微妙に正規日本語版間違っていたら恐縮ですが、機能は同じです)か、もしくは目視で気になる重複箇所をフィルタでピックアップなどで対応しているのですが、ここらへんを機械的に終わらせたいのです。
またマッチングは例えば例として5文字を上げましたが、例えば5文字以上だけが重複するセルだけを色付きで表示するとか、そういった抽出をしたい(つまり、数万ある中で一つのペアだけを抽出したいわけでなく、5文字重複するパターンはたくさんあるので、それらをまとめて抽出したい = 例えば、ABCDEのパターン、12345のパターン…などなど)
もし不足あればご指摘いただければありがたいです。
(うみ) 2015/01/23(金) 20:12
まず
'http://www.ABCDEFGHIJK.jp 'http://www.ABCDEvwxyz.jp 'http://www.vwxyzLMNOPQ.jp
「1と2は同じものとしてみなし、3つ目はみなしません。」
なぜ? 2 と 3 は 同じ vwxyz という文字列がありますよね。 これはみなさないという、その「ルール」を「言葉で明確に」していただけますか?
次に
ABCDEFGHIJ ACDEFGHIJK ADEFGHIJKL
の3つの文字列があったとして、最初の文字列の中の連続した5文字は ABCDE BCDEF CDEFG DEFGH EFGHI FGHIJ の 6つですよね。 この 6つがそのほかの「数万」の文字列にあるかどうかを見たいのですか?
で、ほかの文字列の中に、これらの、たとえば 3つとマッチするものがあれば、ペアの色は、どういう扱いですか?
さらに、2番目の文字列にも、たくさんの「連続した5文字」がありますよね。これも、そのほかの「数万」の文字列とつきあわせ?
実際の文字列は、もっと長い桁数だと思います。1つの文字列の中に、連続した5桁が 100個あったとします。
そうすると、突合せの数は 100 X 数万 X 数万 になりますね?
ほんとに、そういうことですか??
いやいや、そうではないということだと思います。
なので、ここでも、「言葉で、そのルールを明確にしてほしい」と、そう希望しています。
(β) 2015/01/23(金) 20:26
この回答の2番めにいただいた、例示を見て、(仰るとおり全パターンを抽出したいのです)エクセルを使って現実的に処理できなさそうかなと。ご指摘の通り、億以上のパターンになってしまいますね。
お騒がせしました、色々ご返答有難うございます。
(うみ) 2015/01/23(金) 21:28
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.