2012-02-04 76 views
0

我有一個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. 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. 

成爲這個...

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. 

見埃裏·伯內特的講話是如何現在包含一個小區內,其他行有已被刪除?我需要一個宏。

從那裏,我可以通過使用文本到列功能並刪除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下週。

對於它的價值,我敢肯定,任何識別單元格引入新發音者的腳本都需要看到至少有四個連續的大寫字母最後跟着一個冒號(我最終說,因爲在他們第一次發言時給予的頭銜和職業)。然後它可以向下看列,直到找到另一個這樣的單元。然後,它會連接「找到」單元格之間的所有單元格內容(在每個單元格之間插入空格),並刪除不再有任何SPEAKTURN數據的行。

最後,我應該道歉。我知道Stackoverflow的期望是我應該做足夠的研究,但是我會在截止日期之前完成,而且我不知道還有什麼可以轉向的。我在上個學期的一個月中學會了如何通過R來絆倒R,但作爲一個政治學的主要出路,我不能在我的生活中學習足夠的VBA在週二之前完成這個任務。 ::掛在恥中::

沒有一個宏來做到這一點,我將不得不花費幾天合併超過8000個單元格。我很絕望。如果你願意補償---我是一個貧窮的大學生,試圖做一個溝通高級項目---我會盡我所能。我只是在我的智慧在這裏結束。

PS如果你想知道爲什麼我需要這個......好吧,我將通過電視節目主持人對存在或不存在13種類型的操縱手段的每個講話進行評分:(1)侮辱性語言, (2)名字稱呼,(3)情緒表達,(4)情緒語言,(5)口頭對戰/陪練,(6)字符暗殺,(7)虛假誇張,(8)嘲笑/諷刺,(9)大火, (10)意識形態極端化語言,(11)滑坡論證,(12)輕視,(13)淫穢語言。這是關於有線電視新聞節目如何令人激動的一切。 8000行將需要一段時間,這就是爲什麼我非常渴望你的幫助。

+0

項目進展如何? – 2016-02-17 17:13:04

回答

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列匹配。

我測試了你的理論,如果四個字符是大寫字母,並且字符串中有一個冒號,那麼直到冒號的字符纔是名稱。我通過查找這些字符串並在另一個「名稱」表中創建一個新列表來完成此操作。有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文件提供。

順便說一句,這裏午夜了,所以我要去睡覺了。如果您回覆,請不要期待在接下來的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 2012-02-05 18:03:57

+0

很好,但請嘗試我的代碼。它將人們所說的名字與你想要的分開。它不會爲同一個發言者合併多行,但是由於單元格中的文本過長而出現問題並不一定是不好的。 Wikisend聲稱該文件是XLSX文件,但Excel 2007無法將zip文件中的任何文件解釋爲Excel文件。 – 2012-02-05 18:23:10