2010-08-09 79 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

相关问题