2012-10-05 41 views
0

在Excel中,我有一個單元格中堆疊的名稱列表,我希望每個名稱都在其自己的列中。我在想Python可能是一個很好的方法來做到這一點?將堆積列表轉換爲可用數據

例子:

Joe Smith 
John Hawk 
Mike Green 
Lauren Smith 

一個單元看起來完全一樣,在其小區內的線,但所有細胞中所含的名稱每個名稱。我有50個單元格,每個單元格都有1-20個堆疊名稱,我想將每個名稱放在給定行的單元格中。所以,在我的例子中,所有這些名字將佔據同一行,但每個都有自己的列。

任何想法?

+4

使用Python的這似乎是矯枉過正:你不能只使用「文本到列」轉換器?曾經在'Data'組中。 – DSM

+0

是的,只需使用文本到列 - 將你的分隔符設置爲空格 - 你應該很好走。這假設你沒有任何中間名(你的中間名可能與某些姓氏在同一列,然後根據你的名字是如何初始排序的,在這種情況下,我會推薦幾個簡單的電子表格公式)。 – Stepan1010

+0

@DSM文本到列轉換器不起作用,因爲它將空格同樣給我一列Joe,Smith,John,Hawk等的列。 – FJ17

回答

1

如果你使用python,你可以導出你的excel到csv。

然後使用python,你可以使用csv模塊(csv.reader)打開CSV:http://docs.python.org/library/csv.html

從那裏你可以重複你的CSV的每一行。

每行的第一個索引將包含一個堆疊名稱的字符串。

您可以使用split方法將名稱拆分爲列表。從那裏你可以將這些值作爲一行寫入輸出csv(使用csv.writer)。

+0

我打開其他的建議,我只是不能確定它在Excel中完成,並不能確定一個更好的替代 – FJ17

+0

我不知道如果python是最好的方式,但如果我使用python,這是我會做到這一點 – Matt

0

如果你確定在Excel做,下面的代碼應該爲你工作:

Sub SplitCellsAndExtend_Old() 
'takes cells with inside line feeds and creates new row for each. 

Dim strCell As String, lastRow As Long, i As Long, j As Long 
application.ScreenUpdating = False 
lastRow = Cells(Rows.Count, 1).End(xlUp).Row 

    For i = lastRow To 1 Step -1 
     strCell = Cells(i, 1) 
     j = 0 

     Do While InStr(1, strCell, Chr(10)) > 0 
      Rows(i + j + 1).Insert 
      strCell = Right(strCell, Len(strCell) - InStr(1, strCell, Chr(10))) 
      Cells(i + j, 1) = Left(Cells(i + j, 1).Value, InStr(1, Cells(i + j, 1), Chr(10)) - 1) 
      Cells(i + j + 1, 1).Value = strCell 
      Cells(i + j + 1, 1).Value = Cells(i, 1) 
      j = j + 1 
     Loop 
    Next 
application.ScreenUpdating = True 
End Sub 
0

嗯,你的問題是不是第一次明確,但因爲有人編輯它,我想我明白你想要什麼。

假設你使用的是Windows,你有機會到記事本,寫字板(這應該是你的附件文件夾 - 同一個作爲您的計算器)

突出你的細胞,並將它們複製 - 然後將其粘貼到記事本文件。

FromExcel 它應該是這樣的: ToNotepad 然後複製並粘貼什麼是記事本,然後粘貼到寫字板,它應該是這樣的: ToWordpad 然後在寫字板查找和替換引號: FindAndReplaceQuotationMarks 然後複製並粘貼回和excel,你應該得到你想要的東西: BackIntoExcelResult

這是一種奇怪的方式做到這一點 - 但它應該爲你工作。我經常發現通過這條管道(或其變體)運行許多類型的東西可以擺脫不必要的格式化項目。所以對很多事情都有好處。祝你好運