如何在 Excel 中将分隔列表转换为多列表?

如何在 Excel 中将分隔列表转换为多列表?

我有这样一个列表:

Friut;Taste;Color;Other;Apple;Good;Red and Blue;1;Orange;Really Good;Orange;12

我想通过选择每 4 个分隔符并将它们转换为这样的行来转换它:

Fruit    Taste     Color     Other
Apple    Good      Red and G.1
Orange   Really Go.Orange    12

使用 Libreoffice(首选)、Openoffice 或 Excel 如何实现这一点?

编辑:以上是一个例子。我用它来选择 4 个分隔符,但我需要它来处理大约 500 行。

编辑2:提供我自己的(正确)答案

答案1

VBA 宏将整行拆分为多行

在此处输入图片描述

使用此宏,您可以将整行拆分为多行。拆分后,您可以选择需要的列数。只需更改iSplit第一行的值即可。我没有使用特定的分隔符,只是列数。

我对每个步骤都进行了注释。您可以轻松根据个人需求调整宏。

  1. Alt使用+打开 Excel 和 VBA 编辑器F11
  2. 在左侧窗格中,将代码粘贴到床单您的数据存放在哪里
  3. 根据需要修改前两行
  4. 使用以下命令执行宏F5

Const iSplit = 4    '## how many columns do you want after splitting
    
Sub transposeColumn()
    '## search the last row to know how many rows we have to iterate through
    iLastRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
    
    '## begin to loop through every row. Begin at last row and go upwards
    For r = iLastRow To 1 Step -1

        '## search the last column in the current row
        iLastCol = Rows(r).Find("*", Cells(r, 1), , , xlByColumns, xlPrevious).Column
    
        '## calculate how many new rows we need to insert for this row
        iNewRows = WorksheetFunction.RoundUp(iLastCol / iSplit, 0) - 1
        
        '## begin to copy and insert new rows, one by one
        For c = 1 To iNewRows
    
            '## insert a new blank line where we can copy values to
            Rows(r + c).Insert Shift:=xlDown
            
            '## set the source range for easier access later
            Set rngSrc = Range(Cells(r, iSplit * c + 1), Cells(r, iSplit * c + iSplit))
            
            '## copy and paste the range
            rngSrc.Copy Destination:=Cells(r + c, 1)
    
            '## clear all cells which we have just copied
            rngSrc.Clear
        Next c
    Next r
End Sub

答案2

如果列表是文本文件,则可以使用文本导入向导在 Excel 中。我假设 LibreOffice 和 Openoffice.org 中都有类似的工具。

但是,由于分隔符是;符号,因此导入时需要排列数据,因为数据将作为一行值导入。您可以修改原始文本文件并添加另一个分隔符来表示下一行。

答案3

我的回答来自用户49740:

sed -re 's/([^;]*);([^;]*);([^;]*);([^;]*);?/\1,\2,\3,\4\n/g' input.txt > output.txt

字符串的前半部分:

([^;]*);([^;]*);([^;]*);([^;]*);?

查找 4 组([^;]*)(分号前的所有字符)然后是分号。后半部分:

\1,\2,\3,\4\n

将文本更改为 CSV 格式。> output.txt将转换后的文件写入 output.txt。

相关内容