2010-08-09 74 views
1

我有一個大的CSV文件完整組織的名稱和地址。我需要將一個乾淨的csv文件交給我們的開發人員,他們需要圍繞他們構建數據庫。分割的CSV文件中的單元格的內容爲單獨的細胞

的問題是,街道名稱和編號都是在同一個小區,他們需要分開的,這樣我們就可以通過街道名稱進行篩選組織。

所以,我想分裂尋址單元的內容,分爲兩個單元。地址單元是這樣構建的:[街道名稱] [空格] [數字] [等] - 所以我只需要保留街道名稱,並將街道名稱後面的所有內容移動到另一個單元格。

一個例子是內容細胞D7:

[D7] Konkylievej 3,1 MF [/ D7]

這將被分裂像這樣:

[D7] Konkylievej [/ D7]

[E7] 3,1 MF [/ E7]

CSV文件的大小使得這個不可能手動執行。有沒有辦法自動完成它?

+0

你可能想看看我的自由和開放源碼工具CSVfix在http ://code.google.com/p/csvfix,特別是在split_char命令中。 – 2010-08-09 08:13:35

+0

雖然我已經回答了,我不知道這是一個編程問題,嚴格來說 – 2010-08-09 08:15:01

回答

0

不是最完美的解決方案,但留給請試試這個...

Option Explicit 

Sub SeparateAtTheSpace() 
     Dim cell As Range, areaToSplit As Range 
     Dim str As String 
     Dim i As Integer 
     Set areaToSplit = Sheet1.Range("D1:D305") 
     For Each cell In areaToSplit 
       If IsEmpty(cell) = False Then 
         str = cell.Value 
         For i = 1 To Len(str) 
           If IsNumeric(Mid(str, i, 1)) Then 
             If IsEmpty(cell.Offset(0, 1)) = True Then 
               cell.Offset(0, 1).Value = Right(str, Len(str) - i + 1) 
               cell.Value = Left(cell.Value, i - 1) 
             End If 
           End If 
         Next i 
       End If 
     Next cell 
End Sub 
+0

完美地工作。非常感謝 – 2010-08-12 11:14:39

0

這與Excel的版本,您正在使用稍有變化,但基本上你應該在菜單中的版本在2007年之前在2007年選擇列,並找到「文本分列」(最可能的數據菜單,或數據絲帶) 然後在對話框中選擇「Delimited」,然後告訴excel使用空格將文本分隔到列。

希望的作品

+0

HI號Yoni H.我想你的解決方案,有那麼一會兒我覺得這是可行的,但是當我需要一個通配符定界符那會我被困匹配「任何數字」 – 2010-08-10 07:44:06

+0

我認爲這裏可能存在一些誤解。 分隔符將文本分隔爲字段,因此您不需要「任何數字」的通配符,而是您的街道和號碼之間的分隔符。在我看來,這隻能是空間,但我可能犯了錯誤。 – 2010-08-10 07:59:42

0

既然你只需要將此分成兩個單元,您可以用VBA代碼短位做到這一點。將其粘貼到VBA工作簿的Sheet1代碼中(Alt-F11即可進入VBA編輯器)。將範圍從A1:A200更改爲任何您需要的值,以及不同的圖紙名稱(您的數據可能不在Sheet1上)。一旦你建立起來了,打F5,它應該做你想要的。很明顯,您可能想要在原始數據的副本中進行測試,以確保獲得預期的結果。我在A列中填充的多個小區「123主」以後有「123」和「主」,在B列。這將需要的一切第一空間的右邊,放入列B,並修剪一切向右的空間,並留下什麼在A列

Option Explicit 

Sub SeparateAtTheSpace() 
    Dim cell As Range, areaToSplit As Range 
    Set areaToSplit = Sheet1.Range("A1:A200") 
    For Each cell In areaToSplit 
     If IsEmpty(cell) = False Then 
      cell.Offset(0, 1).Value = Right(cell.Value, InStr(1, cell.Value, " ") + 1) 
      cell.Value = Left(cell.Value, InStr(1, cell.Value, " ")) 
     End If 
    Next cell 
End Sub 
+0

嗨邁克爾, 這實際上非常接近。不幸的是,一些街道名稱中有空格。是否有可能稍微改變這個說法,以便它能夠讀取這樣的內容。 將所有東西都放在第一個空格的後面,然後將其移動到當前一列的左側。 – 2010-08-10 07:40:21

+0

在下面你會看到我如何修改你的代碼以適應我的需求和結果。 這裏的修改後的代碼: Explicit選項 子SeparateAtTheSpace() 昏暗細胞作爲範圍,areaToSplit作爲範圍 集areaToSplit = Ark1.Range( 「D1:D305」) 針對每個小區在areaToSplit 如果爲IsEmpty( cell.Value = False Then cell.Offset(0,1).Value = Right(cell.Value,InStr(1,cell.Value,「」)+ 1) cell.Value = Left(cell.Value,InStr( 1,cell.Value,「」)) End If Next cell End Sub – 2010-08-10 07:41:07

+0

下面是原始代碼片段和運行上述代碼的結果: 原文:http://img690.imageshack.us/img690/5607/for1v.jpg 結果:http://img541.imageshack.us/img541/9513/for2k.jpg – 2010-08-10 07:41:37

相關問題