2016-06-17 2 views
0

도움이 필요합니다. 지금까지 스크립팅/코딩 작업을 해왔고 정말 녹슬었기 때문에 오랜 시간이 걸렸습니다.VBA로 Excel의 지역 번호 필터링

문제 : 나는 월 (30k 레코드 이상)이 포함 된 스프레드 시트 (Excel Visual Basic)를 가지고 있습니다. 내 목표는 특정 지역 번호 (수신자 부담 전화, 시내 전화 ... 등)가 걸려있는 전화를 걸러 내고 장거리 전화로 인해 빚진 금액을 계산하는 것입니다.

또한 퇴직 주택이기도하며 최종 사용자는 전화 번호를 올바르게 입력하지 않습니다. 숫자 시작 부분에 3-4자를 제거해야합니다.

예 : 1800-XXX-XXXX 또는 800-XXX-XXXX | 1605-XXX-XXXX

는 여기이 지역에있는 3 ~ 4 자리 숫자를 통합하는 방법에 잃었어요 그것은 처음 3 ~ 4 자리 숫자 열 H의 각 레코드를 분석 한 내가 현재 가지고있는 코드입니다

전화 번호는

배열 TFL 내가 필터링하는 데 필요한 모든 지역 코드를 저장할 열 H에 ​​저장됩니다.

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

관련 문제