2013-10-03 2 views
0

하나의 일반 텍스트 파일에 약 1,000 개의 다른 키워드 목록이 있습니다 (매우 직설적입니다. 각 키워드 다음에 큰 수익이 있음).Microsoft Excel에서 별도 목록의 키워드가 하나 이상 포함되지 않은 문구를 모두 제거합니다


keywordslist.txt

피터

제임스

메리

크리스


그런 다음 열 A에 10 만 개의 다른 구문 목록이있는 Excel 파일이 있습니다 (행당 하나의 구).

첫 번째 목록에서 키워드가 하나 이상 포함되지 않은 모든 행을 삭제하려고합니다.


phrases.xlsx

행 1 "그와 메리가 여기에 있습니다"(이들은 주로 어떤 이상 254 자 행 당 하나 개의 문구 긴 문구입니다) 일이 있기 때문에 (이 행을 유지 내 키워드 중 하나 또는 그 이상)

이 때문에 또는 내 키워드)

행 2 개 "피터크리스라는 소년은"(이 행을 유지

3 행 "마이클 로널드가"


이 혼자 Excel에서 수행 할 수 있습니다 (주의 키워드 중에 존재하지 않는, 그래서이 전체 행을 삭제)? 또는 매크로가 필요합니까? 너무 단순하지 않은 경우 올바른 방향으로 안내해주세요. Excel에서 쉬운 방법 : 감사합니다, 알렉스

+0

나는 VBA의 길을 가야 할 것이라고 생각한다. 키워드가 별도의 파일에 있거나 통합 문서 내의 별도의 워크 시트에 삽입됩니까? VBA를 작성할 때 차이가 있습니다. –

답변

1

이 아닌 VBA를 통해 파일을 가져올하는 것이 작업을 수행하는 텍스트 가져 오기 마법사를 통합 문서의 다른 시트로 가져옵니다. 원래 워크 시트에서 아래로 드래그 (Ctrl 키 + Shift를 잊지 + 입력하지 않음) 배열 수식을 사용하여 모서리를 두 번 클릭

=MAX(IFERROR(FIND(Keywords!$A$1:$A$5,$A1,1),0))

키워드

는 가져온 데이터, A1과 워크 시트입니다 첫 번째 문구가 들어간 셀이며 B1에이 수식을 입력했다고 가정 해 봅시다. 0으로 시작하는 숫자는 일련의 시작 위치 번호를 가지며 구문에서 키워드가 발견되지 않았 음을 나타냅니다. IFERROR 수식의 0입니다. 그런 다음 B 열을 0으로 필터링하고 보이는 셀을 삭제할 수 있습니다 (선택> Ctrl + G> 특별> 보이는 셀만> 행 삭제).

위의 예제에서 첫 번째 수식은 (0, 0, 0, 9, 0)이됩니다. 그러면 MAX가 가장 높은 숫자를 선택합니다. 주석에서 설명하고있는 바와 같이

편집

,이 또한 "재앙"에서 "고양이"를 찾는로 파셜을 선택할 것입니다. 이 문제를 해결하려면, 당신은 이전과 키워드와 문구 뒤에 공백을 추가, 모두 워크 시트에서 임시 열을 만들 수 있습니다

=" "&$A1&" "

다시 할 모두 워크 시트에서 임시 열을 가리 키도록 공식을. 키워드 범위에 공백을 추가하면 정확한 구문 만 찾을 수 있습니다. 구문에 공백을 추가하면 구문이 키워드로 시작하거나 끝나는 인스턴스를 찾을 수 있습니다.

+0

네시 sooooo mcuh 고맙습니다!) 크게 감사합니다. –

+1

nethy, thanks again :) 빠른 질문. 0 이외의 숫자는 완전한 키워드가 없지만 문자가 일치하므로 의심 스럽습니다. 배열 수식이 완전한 단어 대신 모든 문자의 존재를 찾는 것이 가능합니까? 이것을 수정할 수 있습니까? –

+0

전체 단어 만 선택해야하지만 큰 단어의 일부인 경우에는 해당 단어도 선택합니다. 예를 들어, "catastrophe"에서 "cat"을 찾습니다. 문구와 위치의 예를 들어 줄 수 있습니까? –

0

UPDATE 존재하지 않는 경우는 내가 VBA 또는 매크로의 지식이없는 그러나 나는 내 최고의 시도를주지 :의 빈 통합 문서 및 새로운 모듈을 만들어 보자 VBE 다음 코드에서 붙여 넣기, 매크로 사용 통합 문서 (.xlsm)로 저장, 매크로 보안 설정 변경,이 .xlsm 파일을 다시 엽니 다.Excel에서

Alt 키를 누른-F11은 Visual Basic의

삽입을 클릭을 엽니 다 - 모듈>

Insertmodule

더블 Module1의 클릭하거나 그냥

Module1

붙여 넣기를 만들어 어떤 아래 코드에

Excel에서 다음
Const ForReading = 1 
' Change these two below to match your file path 
Const KeyWordsFile = "C:\Test\keywordslist.txt" 
Const PhrasesFile = "C:\Test\phrases.xlsx"  

Sub SO_19150262() 
    Dim aKeywords As Variant, oWB As Workbook, oWS As Worksheet 
    Dim R As Long, i As Long, bDelete As Boolean, sTmp As String 

    Application.ScreenUpdating = False 
    ' Read the Keywords file into aKeywords (array) 
    aKeywords = GetKeywords(KeyWordsFile) 
    Set oWB = Workbooks.Open(Filename:=PhrasesFile, ReadOnly:=False) 
    Set oWS = oWB.Worksheets("Sheet1") ' Change this to match yours 
    ' Start comparing from bottom of used data 
    For R = oWS.UsedRange.Cells.SpecialCells(xlLastCell).Row To 1 Step -1 
     bDelete = True 
     sTmp = "Deleting Row " & R 
     For i = 0 To UBound(aKeywords) 
      If Len(aKeywords(i)) > 0 Then 
       Application.StatusBar = "Checking Row " & R & " for keyword """ & aKeywords(i) & """..." 
       If InStr(1, oWS.Cells(R, 1).Value, aKeywords(i), vbTextCompare) > 0 Then 
        sTmp = "Keeping Row " & R & ", Keyword(" & i & "):""" & aKeywords(i) & """" 
        bDelete = False 
        Exit For 
       End If 
      End If 
     Next 
     Debug.Print sTmp 
     If bDelete Then oWS.Rows(R).Delete 
    Next 
    oWB.Save 
    Set oWS = Nothing 
    Set oWB = Nothing 
    Application.StatusBar = False 
    Application.ScreenUpdating = True 
End Sub 

Private Function GetKeywords(sKeyFile As String) As Variant 
    Dim aKeys As Variant, oFSO As Variant, oFile As Variant 

    Set oFSO = CreateObject("Scripting.FileSystemObject") 
    Set oFile = oFSO.OpenTextFile(KeyWordsFile, ForReading) 
    If (oFile.AtEndOfStream) Then 
     aKeys = Array() 
    Else 
     aKeys = Split(oFile.ReadAll, vbCrLf) ' Might need to change to vbCr or vbLf if unix text file 
    End If 
    Set oFile = Nothing 
    Set oFSO = Nothing 
    GetKeywords = aKeys 
End Function 

617,451,515,, 저장-으로 -> "엑셀 매크로 사용 통합 문서"

SaveAs

을 개발 도구 탭에서, 나는 당신이 매크로 변화 때문에 서명되지 않습니다 추측 (매크로 보안을 클릭합니다

MacroSecurity

선택 모든 매크로를 사용)이 모든 매크로를 사용하려면 ... 다음 확인을 클릭합니다

EnableAllMacro

닫고 SO_19150262를 선택하고 클릭이 .xlsm을 다시 열고 개발자 탭에서 매크로 클릭 실행 :

RunMacro

+0

안녕하세요 PatricK, 도움 주셔서 감사합니다! 내 무지를 용서해주십시오. 1. 문구 xlsx 파일을 열었습니다. 2. "개발자"탭으로 이동하여 매크로를 클릭했습니다. 매크로 이름 : "TestingMacroFromPatricK"를 입력하고 "만들기"를 클릭했습니다. 3. 그것은 VBA를 열어 지금 내 앞에이있어 : 하위 TestingMacroFromPatricK()이 시점에서 4. 하위 끝 난 당신이 제공하는 전체 코드를 붙여 필요로하는 곳에 내가 모르는를 나와 함께. 아래 그림과 같이 그 사이에 붙여 넣으려고했습니다 : Sub TestingMacroFromPatricK() End Sub –

+0

5. 이제 저장하려고 할 때 "다음 기능을 매크로로 저장할 수 없습니다. 무료 통합 문서 .VB 프로젝트. " 내 옵션은 매크로없는 통합 문서로 저장을 계속하거나 매크로 사용 가능 파일 형식을 선택하는 것입니다. 그래서 "phrases.xlsm"으로 저장했습니다. 이 올바른지? –

+0

6.이 시점에서 나는 여전히 이것을 변경하지 않았습니다 : '파일 경로와 일치하도록 아래 두 가지를 변경하십시오. Const KeyWordsFile = "C : \ Test \ keywordslist.txt" Const PhrasesFile = "C : \ Test \ phrases .xlsx " 그래서 지금 변경하려고합니다 : Const PhrasesFile =" '파일 경로와 일치하도록 아래 두 가지를 변경하십시오. Const KeyWordsFile = "C : \ Documents and Settings \ Administrator \ Desktop \ keywordslist.txt" Const PhrasesFile = "C : \ Documents and Settings \ Administrator \ Desktop \ phrases.xlsx"\ phrases.xlsx " 그리고 지금을 위해 다시 저장했습니다. –

관련 문제