Excel formula Excel中的数据分离

Excel formula Excel中的数据分离,excel-formula,Excel Formula,我收到的数据是连续编号的,但在每个编号下,在下一个编号之前有零、1、2或3条信息。我需要把数据分开,这样数字的间隔就均匀了! 任何帮助都会得到极大的回报——我本应该在大学里表现出色,但那是几十年前的事了! 谢谢你, 格雷姆 你好,罗伯特,作为一名澳大利亚新用户,我不允许插入图像!因此,将每个逗号想象成分隔单元格,将破折号想象成一个空白Excel单元格,第一行是我最初收到的内容。“g,h”等是句子。第二排是我想要达到的目标。不幸的是,它的格式无法显示向下的单元格,因此它必须在这里横穿,就像在Exc

我收到的数据是连续编号的,但在每个编号下,在下一个编号之前有零、1、2或3条信息。我需要把数据分开,这样数字的间隔就均匀了! 任何帮助都会得到极大的回报——我本应该在大学里表现出色,但那是几十年前的事了! 谢谢你, 格雷姆 你好,罗伯特,作为一名澳大利亚新用户,我不允许插入图像!因此,将每个逗号想象成分隔单元格,将破折号想象成一个空白Excel单元格,第一行是我最初收到的内容。“g,h”等是句子。第二排是我想要达到的目标。不幸的是,它的格式无法显示向下的单元格,因此它必须在这里横穿,就像在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条信息,数字将自动等距排列,但不幸的是,这不会发生

Graeme,请告诉我是否可以根据示例创建VBA宏

我刚刚写了一个能胜任这项工作的,虽然还远远不够优雅

它所做的是从左到右浏览列表,直到找到一个空单元格。在它内部,连续运行一个循环4次。在第一次通过时,它假定您的号码在那里,并立即将其写入。在其他3个过程中,它检查下一个接收的单元是否为数字。如果它是一个知道用破折号填充空格的数字,如果它不是一个数字,则使用找到的字符

让我知道这是否解决了你的问题。在我的例子中,它就像一个符咒

问候,


罗伯特·伊尔布林克(Robert Ilbrink)

你能用一个例子来说明这一点吗,说明你收到了什么以及你最终想要的是什么?嗨,罗伯特,作为一个新用户,我不允许使用图像。因此,将每个数字和字母想象成一个单独的Excel单元格!谢谢我知道当我被禁止上传图片甚至在页面上发表评论时是多么的沮丧……格雷姆,只是个问题?这些缺少的项目是否由空格或其他(隐藏)字符表示,而Excel中无法识别?你能在例如十六进制编辑器中检查“源”吗。而且呢。。我知道你要求一个公式,但我想不出一个公式来解决这个问题。谢谢罗伯特!我将把它放在一个宏中,看看我们如何进行,因为我对VBA的知识不太好。是的,破折号代表一个完全空白的单元格。Graeme实际上,我可以从单个if语句中删除publishCol+1,并在for next循环的末尾只向下移动其中一个。。。。。
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