2016-06-17 11 views
0

は助けを必要とします。私はスクリプト/コーディングをして、今は本当に錆びているので、これは非常に長い時間です。VBAでExcelの市外局番をフィルタリングする

問題:私は1か月以上の呼び出しを含むスプレッドシート(​​Excel Visual Basic)を持っています(30kレコード以上)。私の目標は、特定の市外局番(フリーダイヤル、市内通話...など)を持つ通話を除外し、長距離通話にどれだけの負担があるかを計算することです。

また、これは退職者の家であり、エンドユーザーは電話番号を正しく入力しません。数字の先頭に3〜4桁の数字を入力する必要があります。

例:1800-XXX-XXXXまたは800-XXX-XXXX | 1605-XXX-XXXX

は、ここで私は地域に3-4の数字を組み込む方法で失われたことだし、それは最初の3-4桁列Hの各レコードを解析してきた、私が現在持っているコードです

電話番号はH列に格納されている

アレイTFLは、私はフィルタリングする必要があるすべてのエリアコードを格納します。

Sub CleanEntry() 
Dim i As Integer 
Dim TFL As Variant 
TFL = Array("1800", "1877") 

For i = Sheet1.UsedRange.Rows.Count To 1 Step -1 

If Left(Cells(i, "H"), 4) Like TFL(i) Then 
Sheet1.Rows(i).EntireRow.Delete 
End If 

Next 

End Sub 
+0

アドバンス/オートフィルタ? – findwindow

+0

市外局番を除外するために左/右を使用できますか? – CeFu

+0

左/右は必要ありません。それを試してみてください。かなり直感的。私はあなたのリボンのデータタブのフィルターボタンを参照しています。 – findwindow

答えて

1

は、私は個人的に、このために正規表現を使用したい:

Sub CleanEntry() 
    Dim i As Integer 

    Dim filter As New RegExp 
    filter.Pattern = "^1?(8(77|00))|605" 'Or whatever else you need to match. 

    For i = Sheet1.UsedRange.Rows.Count To 1 Step -1 
     If filter.Test(Trim$(Cells(i, "H").Value)) Then 
      Sheet1.Rows(i).EntireRow.Delete 
     End If 
    Next 
End Sub 

注:あなたがマイクロソフトのVBScriptの正規表現5.5への参照を追加する必要があります。

+0

*それを編集してください。アクセスを得るには、Alt + F11を押してください。私はVisual Basicが初めてです。私の参照ボタンはアクティブではありません。私はExcel 2010でマクロを押すことでVBを使用しています。 – CeFu

+0

これまでのところうまくいっています!ありがとう!私はまだ遠距離電話が削除されていないことを確認するために各レコードを探していますが、見栄えがよくなっています。 – CeFu

+0

@CeFu - 編集を参照してください。私は文字列の先頭に正規表現を固定するのを忘れていました。 – Comintern

関連する問題