如何将单行列拆分为多行和多列?


0

我四处张望,或者我不确定如何用词表达来进行搜索,或者根本没有东西。最初,我的excel工作表中的信息是从文本文件中提取的。我不得不经过很多工作(定界和很多查找/替换)才能使其正确地转换为excel,但这仍然不正确,但是我想它会做到的。不幸的是,它把所有东西都放在一行中(即A1,B1,C1等)。我需要将信息分成多行;

     A | B
1 | id | 219832
2 | id | 2398
3 | id | 0382
etc

或者,或者将其他所有单元格视为标头的一部分,并将其后的单元格放置在适当的列中;

     A  |  B   |   C   |   D
1 | id  | type | label | date
2 | 232 |  A   |  Here | 12/12/12
3 | 643 |  B   | There | 10/14/11
4 | 832 |  A   | None  | 09/29/13
etc

这就是当前显示为数据的方式

    id | TTXW5IAXBSWDETCQZKGUNKK2RYKOVVFQ4S3VGCV | type | A | Label | Here | date | 12/12/12 | id 
etc

如果有人可以帮助我做到这一点,我将非常感激。尽管第二种选择对我更有用,因为这是我将所有这些信息都转移到其中的真正需要,但第一种选择是可以接受的,因为我可以在那里手工工作。同样,只要您知道这有多大,我的行就会扩展到JON1。

编辑:

同样,在没有所有查找/替换的情况下(一些但不是很多),数据被粘贴到每个单元格中。

"id":"TTXW5IAXBSWDETCQZKGUNKK2RYKOVVFQ4S3VGCV"

这就是这种样子

    "id":"TTXW5IAXBSWDETCQZKGUNKK2RYKOVVFQ4S3VGCV" | "type":"A" | "label":"Here" | "date":"12/12/12" | {"id": 
etc

或类似的东西。如果这样做更容易,那也很好。我还注意到,从浏览数据来看,并不是每行数据都以“ id”开头,但是,如果不使用find / replace来摆脱它,新数据行的开头确实会有一个{ ;

{"type":"A" |
{"id":"3242134" |
like that

1
也许有一个连续的例子,期望的结果可以帮助您更好地理解问题。
jcbermu 2014年

您可以上传您的Excel文件吗?
Firee 2014年

不,我不能合法地这样做。该文件中包含极其敏感的信息。
Eyanosa Triamonte 2014年

您是否仍然拥有源数据,如果可以,您能否描述其结构?我只是想知道是否有一种方法可以比从当前状态开始更有效地从头开始重做此操作。
fixer1234 2014年

Answers:


0

简单的方法是通过VBA。我想在第1行的每个单元格上都有一个“字段”

{"id" : "TTXW5IAXBSWDETCQZKGUNKK2RYKOVVFQ4S3VGCV" | "type" : "A" | "label": "Here" 

您必须转到宏,然后创建一个新宏,然后插入以下代码:

 Sub test()
        Dim wks As Worksheet
        Set wks = ActiveSheet
        Final = False
        i = 1
        InitialRow = 2
        Dim labels(0 To 4) As String
        labels(0) = "id"
        labels(1) = "type"
        labels(2) = "label"
        labels(3) = "grouping"
        labels(4) = "created"
        While Final = False
            ThisCell = Trim(wks.Cells(1, i))
            iniChar = Left(ThisCell, 1)
            If iniChar = "{" Then
                lengthCell = Len(ThisCell)
                ThisCell = Trim(Right(ThisCell, lengthCell - 1))
                InitialRow = InitialRow + 1
            End If
            PosLabelinCell = InStr(ThisCell, ":")
            LabelinCell = Trim(Left(ThisCell, PosLabelinCell - 1))
            lLabelinCell = Len(LabelinCell)
            DatainCell = Trim(Mid(ThisCell, PosLabelinCell + 1))
            lDatainCell = Len(DatainCell)
            LabelinCell = Mid(LabelinCell, 2, lLabelinCell - 2)
            DatainCell = Mid(DatainCell, 2, lDatainCell - 2)
            Select Case LabelinCell
                Case labels(0)
                    wks.Cells(InitialRow, 1) = DatainCell
                Case labels(1)
                    wks.Cells(InitialRow, 2) = DatainCell
                Case labels(2)
                    wks.Cells(InitialRow, 3) = DatainCell
                Case labels(3)
                    wks.Cells(InitialRow, 4) = DatainCell
                Case labels(4)
                    wks.Cells(InitialRow, 5) = DatainCell
            End Select
            i = i + 1
            If wks.Cells(1, i) = "" Then
                Final = True
            End If
        Wend
End Sub

它将遍历第一行中的所有单元格,并检查单元格是否以符号{开头,并假设其为换行符。如果您提供给我的4个标签(id,类型,标签,分组,创建)中缺少标签,它将留下一个空白单元格。

现在,使用F5或绿色的“播放”按钮运行宏;从第3行开始,将按列组织所有数据。


正确。由于某些未知的原因,id字段并不总是条目的第一个字段。考虑到这一点,将如何重做第二种类型的字段({“ id”:“ whatever”)?至少可以使用它来将每个条目放置在新行上。要么,要么使用它来搜索某些值,然后仅将它们放置在新行中。我正在尝试重新制作它,不再需要〜70%的字段。
Eyanosa Triamonte 2014年

如果我知道可以找到哪些标签(例如,id,type,name等),则可以更改VBA脚本。
jcbermu 2014年

我需要的标签是; id type label grouping created 我需要订购的那5个零件全部放入一个合适的系统中进行更换。谢谢。
Eyanosa Triamonte 2014年

检查Macro Excel,我进行了更改,因此只要它以这种方式找到数据,它就可以工作:{“ type”:“ A” | {“ id”:“ 3242134” | 那样
jcbermu 2014年

它不起作用。唯一发生的事情就是变成Final。
Eyanosa Triamonte,2014年

1

您可以使用Excel内置功能。

请按照以下步骤操作:

  1. 转到数据标签。
  2. 在“ 数据工具”组中,您将看到“文本到列”

现在,根据需要按照“将文本转换为列向导”中的说明进行操作。

如果那没有帮助,请提供一个输入行和所需的输出。


Excel抱怨一次只能选择一列。考虑到整个过程由1行和7000+列组成,将无法正常工作。
Eyanosa Triamonte 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.