0

次のようにクリーンアップする必要があるドメインの巨大なスプレッドシートがあります。

  1. すべてを削除しますhttp://(すべてを単純に置き換えます-"http://"を ""に置き換えます)
  2. いずれかを削除しますwww.(単純にすべてを置き換えます-「www。」を「」に置き換えます)
  3. サブドメインを削除します(URLからサブドメインだけでなく、実際の行を完全に削除します)
  4. ドメイン拡張子の後にあるものをすべて削除します(つまり、次のwebsite.com/blah/blahbah/ようになりますwebsite.com(単純に、すべてを-"/*"に置き換えてから、すべてを""に置き換えます)"/"""

ですから、私に残されているのは、のようなクリーンなドメインのスプレッドシートです"website.com"

(上記のように)1、2、4を並べ替えたと思いますが、3で本当に苦労しています。

何か案は? / を使用してこれを実行し、実際に行を完全に削除できますか?

サンプルデータ:

http://www.scholastic.com/kids/stacks/games/
http://imgworld.teamworkonline.com/
http://topfreegraphics.com/
http://www.workcircle.co.uk/
http:// www.healthycanadians.gc.ca/index-eng.php
http://gsociology.icaap.org/methods/soft.html

投稿1、2、4は私に次のことを残します:

scholastic.com
imgworld.teamworkonline.com
topfreegraphics.com
workcircle.co.uk
healthcanadians.gc.ca
gsociology.icaap.org

行を削除するだけで、完全に削除する必要があるのは厄介なサブドメインです。2 x "。"を検索するだけでは不十分であることに気付きました。これは、明らかに多くのドメイン拡張機能(つまり.co.uk)に含まれているためです。

助けていただければ幸いです。

4

3 に答える 3

0

迅速で汚い解決策。

=IF(ISERROR(FIND(".",A1,FIND(".",A1,1)+1)),"",IF(ISERROR(MATCH(RIGHT(A1,LEN(A1)-FIND(".",A1)),$D:$D,0)),"Subdomain",""))

列A:ドメインのリスト。
列D:ユーザーによってコンパイルされた受け入れられたサブドメインレコード(gov.ukなど)のリスト。

3つ以上のドットがあるドメインでも機能します。

サブドメインセルは、後で除外して削除できます。

于 2012-11-05T09:47:33.590 に答える
0

手順3で使用するわかれば、範囲を適切に調整すると、次のコードで必要な処理が実行されます。

Private Sub xlRegexp()

Dim c As Integer
Dim n As Integer
Dim strOldText As String
Dim RegExFindThis As String
Dim RegEx
Set RegEx = CreateObject("vbscript.regexp")

c = 1

WhichCase:

 Select Case c
    Case 1    
        RegExFindThis = "http://"    
    Case 2    
        RegExFindThis = "www."    
    Case 3    
        RegExFindThis = "/.*"    
    Case Else    
        GoTo Subdomains    
End Select

With RegEx
    .Pattern = RegExFindThis
    .Global = True
End With

For n = [X] To [Y]
    Range("A" & n).Activate 'assumes your list is in column A
    strOldText = ActiveCell.Text
    ActiveCell.Value = RegEx.Replace(strOldText, "")
Next

c = c + 1

GoTo WhichCase
Subdomains:

RegExFindThis = "[STEP 3 RegExp]"

With RegEx
    .Pattern = RegExFindThis
    .Global = True
End With

n = 1

For n = [X] To [Y]
    Range("A" & n).Activate 'assumes your list is in column A
    If RegEx.Test(ActiveCell.Text) Then
        Rows(ActiveCell.Row).Select
        Selection.Delete Shift:=xlUp
    End If
Next

Set RegEx = Nothing
MsgBox ("Macro complete.")
End Sub
于 2012-11-05T22:08:42.880 に答える
0

非常に単純なアプローチとして:

for i = worksheet.rows.count to 1 step -1
Dim counter as Integer
Dim Value as String
Dim splitter as String()
Value = worksheet.cells(i,1).value
Dim splitter() As String
splitter=split(Value,".")

if ubound(splitter)>1 then
workseet.rows.removeat(i)
end if
next

これをテストするデータがないため、箱から出してすぐに機能することはおそらくありませんが、一般的には機能するはずです...

于 2012-11-05T09:49:37.647 に答える