2012-02-04 3 views
0

다양한 TV 프로그램의 성적표가 포함 된 Excel 스프레드 시트가 있습니다. 보시다시피, 화자가 변경 될 때마다 "BURNETT :"또는 "HANNITY :"로 소개됩니다. 특정 연사를 따르는 모든 셀을 병합하여 연설문이 모두 하나의 Excel 셀에 포함되도록하는 방법이 필요합니다. CSV 형식으로 텍스트를 열 저장하려고 시도했지만 찾기가 바뀌었지만 물론 작동하지 않았습니다.Excel 용 병합 - 삭제 매크로

예를 들어, 나는

NETWORK SHOW DATE TIME TIMEBLOCK SPEAKER SPEAKTURN 
CNN OUTFRONT 2011-12-05 19:00 19:00   ERIN BURNETT OUTFRONT 
CNN OUTFRONT 2011-12-05 19:00 19:00   ERIN BURNETT, HOST: Thanks, John. <<all the intervening text in the rows in between>> Robin Mills is author of "The Myth of the Oil Crisis." Riad Kahwa… 
CNN OUTFRONT 2011-12-05 19:00 19:00   RIAD KAHWAJI, FOUNDER, INST. MILITARY ANALYSIS: Well, I think… 
CNN OUTFRONT 2011-12-05 19:00 19:00   BURNETT: Teetering. 

참조 ...
NETWORK SHOW DATE TIME TIMEBLOCK SPEAKER SPEAKTURN 
CNN OUTFRONT 2011-12-05 19:00 19:00   ERIN BURNETT OUTFRONT 
CNN OUTFRONT 2011-12-05 19:00 19:00   ERIN BURNETT, HOST: Thanks, John. We're live from the Middle East… 
CNN OUTFRONT 2011-12-05 19:00 19:00   Let's go OUTFRONT. 
CNN OUTFRONT 2011-12-05 19:00 19:00   I'm Erin Burnett and I'm OUTFRONT tonight live from Abu Dhabi in… 
CNN OUTFRONT 2011-12-05 19:00 19:00   Now Iran claims that it shot down an American drone that looks a… 
CNN OUTFRONT 2011-12-05 19:00 19:00   If this really happened, that means that technology is in the han… 
CNN OUTFRONT 2011-12-05 19:00 19:00   So far recently we've had Israel threatening to bomb Iranian nucl… 
CNN OUTFRONT 2011-12-05 19:00 19:00   Iran is defiant, and a defiant Iran could mean surging oil prices… 
CNN OUTFRONT 2011-12-05 19:00 19:00   Robin Mills is author of "The Myth of the Oil Crisis". Riad Kahwa… 
CNN OUTFRONT 2011-12-05 19:00 19:00   RIAD KAHWAJI, FOUNDER, INST. MILITARY ANALYSIS: Well, I think… 
CNN OUTFRONT 2011-12-05 19:00 19:00   BURNETT: Teetering. 

이되기 위해서는 ...이 필요 에린 버넷의 말 차례는 이제 하나 개의 셀에 포함되고, 다른 행은 얼마나 삭제 되었습니까? 그렇게하는 매크로가 필요합니다.

거기에서 필자는 text-to-columns 함수를 사용하고 SPEAKER 열에 이름이없는 모든 행을 삭제하여 이렇게 만들 수 있습니다. 이것은 최종 목표이지만, 나는이 단계를 수행 할 수 있습니다 (예, 알겠습니다. 어려운 부분을 남겨 두었습니다).

NETWORK SHOW DATE TIME TIMEBLOCK SPEAKER            SPEAKTURN 
CNN OUTFRONT 2011-12-05 19:00 19:00 ERIN BURNETT, HOST         Thanks, John. <<intervening text>> Robin Mills is author of "The Myth of the Oil Crisis." Riad Kahwa… 
CNN OUTFRONT 2011-12-05 19:00 19:00 RIAD KAHWAJI, FOUNDER, INST. FOR MILITARY ANALYSIS Well, I think… 
CNN OUTFRONT 2011-12-05 19:00 19:00 BURNETT            Teetering. 

워크 시트, 당신이 그것을 원하는 경우, 다음 주에 Wikisend에 여기에 사용할 수 있습니다.

가치가있는 것을 위해, 나는 새로운 연사를 소개하는 것으로 셀을 인식하는 스크립트는 결국 적어도 4 개의 연속 대문자가 결국 콜론을 따른다는 것을 알아야 할 것이라고 확신한다. 처음으로 말할 때 주어지는 직책과 직업에 대한 정보). 그런 다음 다른 셀을 찾을 때까지 열을 내려다 볼 수 있습니다. 그런 다음 "발견 된"셀 사이의 모든 셀의 내용 (각 셀 사이에 공백 삽입)을 연결하고 더 이상 SPEAKTURN 데이터가없는 행을 삭제합니다.

마지막으로, 사과해야합니다. 나는 Stackoverflow에 대한 기대가 충분한 연구를해야한다는 것을 알고 있습니다. 그러나 마감일이 다가오고 있으며, 어디에서 다른 방향으로 나아갈 지 모릅니다. 나는 지난 학기 한 달 동안 R을 통해 여행 길을 걸을 수있는 방법을 배웠다. 그러나 내 정치에서 중요한 정치적 방법으로 나는 화요일까지이 일을하기에 충분한 VBA를 배울 수 없다. 부 끄 러운 머리에 매달려 ::

매크로를 사용하지 않으면 며칠 동안 8000 개가 넘는 셀을 병합해야합니다. 나는 필사적이다. 당신이 보상을 원한다면 나는 커뮤니케이션 수석 프로젝트를하려고 노력하는 가난한 대학생입니다. 최선을 다할 것입니다. 나는 여기서 끝내고있다.

추신 : 내가 왜 이것을 필요로하는지 알고 싶다면 ... 음, 나는 TV 쇼 호스트가 13 가지의 조작법이 있는지 없는지에 대해 말하기 차례대로 점수를 매길 것이다 : (1) 모욕적 인 언어, (3) 감정적 표현, (4) 감정적 언어, (5) 언어 싸움/스파링, (6) 캐릭터 암살, (7) 허위 진술, (8) 조롱/풍자, (10) 사상적 극단적 언어, (11) 미끄러운 슬로프 논쟁, (12) 과혹한 언어, (13) 외설스러운 언어. 케이블 뉴스를 통해 사람들이 열 받게하는 방법에 관한 것입니다. 그 8000 행은 시간이 좀 걸릴 것입니다. 그래서 나는 당신의 도움을 절실히 필요합니다.

+0

프로젝트는 어떻게 진행 되었습니까? –

답변

1

많은 사람들이 도움을 줄 것입니다. 지식 수준을 나타내거나 최소한 시도한 바에 따라 vba 코드를 제공하지 않았습니다. 게다가, 학교 생활이라고 말하면 대부분 학생들이 학업을 돕지 않습니다.

set excelapp = excel.application 
set objwb = excelapp.workbooks.open("C:\yourworkbook.xls") 
set objws = objwb.worksheets("yourworksheet") 
set newObjws = objwb.worksheets.add() 

dim newRow as long 
newRow = 1 
sc = speechColumn --- you need to insert its number here 

for i = 1 to objws.usedrange.rows.count 
     newobjws.cells(newrow,sc).value = objws.cells(i,sc) 
     'here you would want to copy other columns if you like as well. 
     i = i + 1 
     do while instr(objws.cells(i,sc).value,":") = 0 
      newobjws.cells(newrow,sc).value = newobjws.cells(newrow,sc).value & _ 
               " " & objws.cells(i,sc).value 
      'here you would want to copy other columns if you like as well. 
      i = i + 1 
     loop 
     i = i - 1 
next i 
0

Wikisend 사이트 XML 파일의 숫자가 포함 된 ZIP 파일 CleanMS.zip을 포함

나는 적어도 당신에게 당신의 작업을 수행하는 방법에 대한 일반적인 개요를 제공 할 것입니다. "sharedStrings.xml"을 Excel로 가져 왔습니다. C 열은 이미지의 SPEAKTURN 열과 일치합니다.

4 개의 문자가 대문자이고 문자열에 콜론이 있으면 콜론까지의 문자가 이름이라는 이론을 테스트 해 보았습니다. 저는 그러한 문자열을 찾아 "이름"의 다른 시트에 새 목록을 작성하여이 작업을 수행했습니다. 5500 개의 "이름"이 있으며 이름처럼 보이지 않는 것을 찾을 수 없습니다. 이것은 총 8,264 개의 회선 중 하나입니다.

찾는 방식대로 줄을 병합하는 것은 간단합니다.

그러나 맨 끝에는 Bret BAIER와 Ed HENRY라는 두 개의 명백한 "호스트"가 있습니다. 다음과 같은 라인이 있습니다 :

HENRY (on-camera): Senior officials privately say the last ... -- Bret 
About an hour ago, we learned the S&P rating service ... 

두 번째 라인은 HENRY 또는 BAIER입니까?

데이터를보다 신중하게 보려면 XLS 파일로 제공해야합니다.

BTW가 자정으로 여기에 있으므로 잠자리에 들게됩니다. 응답하는 경우 다음 8 - 9 시간 내에 회신을 기대하지 마십시오.

새로운 섹션 나는 사소한 조작 내 조사 코드는 당신이 물어 거의 모든 당신이 필요 아마도 모두를 제공한다는자는 동안 나는 깨달았다

.

두 개의 Const 문을 변경하여 올바른 열을 지정하면이 코드는 SPEAKTURN 열에서 이름을 제거하고 SPEAKER 열에 배치합니다.

이 경우 스피커에 두 개 이상의 행이있을 때 텍스트가 병합되지 않습니다. 그렇지 않으면 결과가 사용자가 추구하는 것입니다. Excel에서 가져 오지만 원래 워크 시트에서는 가져올 수없는 데이터를 테스트 했으므로이 코드를 실행하기 전에 데이터를 저장하십시오.

Sub ExtractNames() 

    Dim PosColon As Long 
    Dim RowCrnt As Long 
    Dim RowLast As Long 
    Dim Stg As String 

    ' ##### Replace "C" and "B" with the correct columns 
    Const ColSpeakTurn As String = "C" 
    Const ColSpeaker As String = "B" 

    With Sheets("Sheet1") 
    RowLast = .Cells(Rows.Count, ColSpeakTurn).End(xlUp).Row 

    For RowCrnt = 1 To RowLast 
     Stg = .Cells(RowCrnt, ColSpeakTurn).Value 
     PosColon = InStr(1, Stg, ":") 
     If PosColon <> 0 Then 
     If UCase(Left(Stg, 4)) = Left(Stg, 4) Then 
      ' Looks like a name. 
      ' Copy name to Speaker column 
      .Cells(RowCrnt, ColSpeaker).Value = Mid(Stg, 1, PosColon - 1) 
      ' Remove name and any following spaces from SpeakTurn column 
      .Cells(RowCrnt, ColSpeakTurn).Value = Trim(Mid(Stg, PosColon + 1)) 
      RowCrnt = RowCrnt + 1 
     End If 
     End If 
    Next 

    End With 

End Sub 
+0

죄송합니다.하지만 업로드 한 파일과 .xslx 파일은 상당히 확신합니다. 어쨌든, 저는 컴퓨터 과학과에서 도움을 청하기로 결정했습니다. 이것은 아마도 내 질문에 대한 적절한 장소가 아니 었습니다. 불편을 끼쳐 드려 죄송합니다. – user1017124

+0

괜찮지 만 내 코드를 사용해보십시오. 그것은 사람들이 당신이 원하는 것을 말한 것과 이름을 구분합니다. 동일한 스피커에 여러 줄을 병합하지 않지만 셀에 텍스트가 너무 많아서 반드시 나쁜 것은 아니기 때문에 병합하지 않습니다. Wikisend는 파일이 XLSX 파일이라고 주장하지만 Excel 2007에서는 zip 파일의 파일을 Excel 파일로 해석 할 수 없습니다. –