我有一列 200 个手机号码。
我想将它们转换为文本行,每行包含 4 个手机号码,并以逗号分隔。
12345678, 12345678, 12345678, 12345678
12345678, 12345678, 12345678, 12345678
12345678, 12345678, 12345678, 12345678
请给我一个建议。
答案1
简单的 VBA 宏将单列转置为多列
我注释了每个步骤,因此您可以轻松调整宏以满足您的个人需求。
您可以选择数据列以及转置后需要的列数
- Alt使用+打开 Excel 和 VBA 编辑器F11
- 在左侧窗格中,将代码粘贴到床单您的数据存放在哪里
- 根据需要修改前两行
- 使用以下命令执行宏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()-1
为ROW()-2
。