2011-12-19 57 views
0

我接收的数据是连续编号的,但在每个数字下面有下一个数字之前有零个,一个,两个或三个信息。我需要分开数据,以便数字均匀分布! 任何帮助都将被大大收到 - 我应该在大学完成Excel,但那是几十年前的事! Thankyou, Graeme 嗨Robert,作为澳大利亚新用户,我不允许插入图片!因此,想象每个逗号分隔单元格和一个破折号作为一个空的Excel单元格与第一行,我最初收到。 “g,h”等是句子。第二排是我想要达到的。不幸的是,它不能格式化以显示单元格没有穿过,所以它必须在Excel中或插入的图像中显示。谢谢!在Excel中分离数据

接收1,G,H,2,K,3,A,C,V,4,5-,R,T

要求1,G,H, - ,2,K, - , - ,3,a,c,v,4, - , - , - ,5,r,t, - ,

因此,如果我收到3个信息的每个“号码”均匀间隔但这不幸不会发生!

+0

你可以用一个例子阐明此,呈现出既要接收和它是什么,你到底想要什么? – 2011-12-19 13:09:10

+0

嗨罗伯特,作为一名新用户,我不允许使用图片。因此将每个数字和字母想象成一个单独的Excel单元格!谢谢! – Graeme 2011-12-20 03:32:02

+0

我知道这是多么令人沮丧,当我不允许上传图片,甚至在网页上评论...... – 2011-12-20 19:50:01

回答

0

格雷姆,让我知道你是否可以创建基于示例的VBA宏。

我刚刚写了一个可以完成这项工作的工具,虽然表现得很高雅。

< -----------码开始--------->

Sub uniformdata() 
    ReceiveCol = 1 'Column where received data starts 
    ReceiveRow = 1 'Row where where received data starts 
    PublishCol = 1 'Column where Published data starts 
    PublishRow = 2 'Column where Published data starts 
    Do Until Cells(ReceiveRow, ReceiveCol).Value = "" 
     For counter = 1 To 4 
      If counter = 1 Then 
       Cells(PublishRow, PublishCol).Value = Cells(ReceiveRow, ReceiveCol).Value 
       ReceiveCol = ReceiveCol + 1 
      Else 
       If IsNumeric(Cells(ReceiveRow, ReceiveCol).Value) Then 
        Cells(PublishRow, PublishCol).Value = "-" 
       Else 
        Cells(PublishRow, PublishCol).Value = Cells(ReceiveRow, ReceiveCol).Value 
        ReceiveCol = ReceiveCol + 1 
       End If 
      End If 
      PublishCol = PublishCol + 1 
     Next 
    Loop 
End Sub 

< --------- CODE END --- ------>

它所做的是从左向右遍历列表,直到找到空单元格为止。它内部不断运行一个循环4次。在第一次通过时,它假设你的号码在那里,并立即写入。在另外3次通过时,它检查下一个接收到的单元是否是数字。如果它是一个数字,它知道用短划线填补空白,如果它不是一个数字,则使用找到的字符。

让我知道这是否解决了您的问题。在我的例子中,它像一个魅力。

问候,

罗伯特Ilbrink

+0

实际上,我可以从个人if语句中删除publishCol + 1,并在下一个循环结束时只移动其中的一个。 – 2011-12-20 19:53:19