如何将数字列转换为四行逗号分隔的文本

如何将数字列转换为四行逗号分隔的文本

我有一列 200 个手机号码。
我想将它们转换为文本行,每行包含 4 个手机号码,并以逗号分隔。

12345678, 12345678, 12345678, 12345678
12345678, 12345678, 12345678, 12345678
12345678, 12345678, 12345678, 12345678

请给我一个建议。

答案1

简单的 VBA 宏将单列转置为多列

在此处输入图片描述

我注释了每个步骤,因此您可以轻松调整宏以满足您的个人需求。
您可以选择数据列以及转置后需要的列数

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

Const strCol = "B"    '## select the column with your data
Const iTrans = 4      '## select how many columns you want after transposing

Sub transposeColumn()
    '## search the last row to know how many cells we have to iterate through
    iLastrow = Range(strCol & ActiveSheet.Rows.Count).End(xlUp).Row
    iCol = Range(strCol & 1).Column
    
    '## begin to loop through the chosen column
    '## Cause we delete cells on every loop, we need to divide the loop counter
    '## And since the division result isn't an integer, we have to round up
    For i = 1 To WorksheetFunction.RoundUp(iLastrow / iTrans, 0)
    
        '## set the source and target range for easier access later
        Set rngSrc = Range(Cells(i + 1, iCol), Cells(i + iTrans - 1, iCol))
        Set rngTrg = Range(Cells(i, iCol + 1), Cells(i, iCol + iTrans - 1))
        
        '## set the format of target range to text
        rngTrg.NumberFormat = "@"
        
        '## copy and paste the values, the trick is to use transpose
        rngSrc.Copy
        rngTrg.PasteSpecial Transpose:=True

        '## delete all cells which we have just transposed
        rngSrc.Delete shift:=xlUp
    Next i
End Sub  

答案2

awk 脚本将有助于解决这个问题。

awk 脚本的第一个 for 循环处理直到最后 4 的倍数的数字。第二个循环打印最后几个数字。如果是最后一个数字,则不会打印尾随的逗号。

awk '{ 
    for (n=1; n < NF-4; n+=4)
           printf("%s, %s, %s, %s\n", $n, $(n+1), $(n+2), $(n+3));    
    for (; n <= NF; n++)
        if (n == NF) 
            print $n;
        else 
            printf("%s, ", $n)          
}' filename

答案3

这是工作表函数解决方案。您的列表位于A1:A40

=TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+COLUMN()-2),"0000000000")

输入后C1向右填充F1,然后向下填充您需要的行数。

在此处输入图片描述

您需要调整公式来匹配您的表格。

例如,如果您希望输出行从 开始C2,则该函数的第二个参数INDEX应该是(ROW()-2)*4+COLUMN()-2

如果您希望输出行从 开始D1,则该函数的第二个参数INDEX应该是(ROW()-1)*4+COLUMN()-3

编辑:
我刚刚看到您想要逗号分隔的输出。这有点不合时宜,因为CONCATENATE不能接受数组参数,但它可以工作。只需将以下公式填入一列即可。

=CONCATENATE(TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+1),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+2),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+3),"0000000000"),", ",TEXT(INDEX($A$1:$A$40,(ROW()-1)*4+4),"0000000000"))

这取决于您的输出是否从第 1 行开始。例如,如果您的输出从第 2 行开始,则需要将 每个实例更改ROW()-1ROW()-2

相关内容