1
2,3
4,5,6
7,8
9,10我想把上面的数据转接到下面
1
2
3
4
5
6
7
8
9
10.有人能用先进的Excel或宏来解释这个过程吗?谢谢。
发布于 2014-10-09 13:08:12
使用A1:A5中的原始值,选择A1:A5。此宏将值读入变体数组中。由于读取的性质,在将值读入变体时,需要将其转换。然后循环遍历每个值,并尝试将逗号处的每个值拆分为两个或多个值。如果它找不到逗号,它只会在下一个可用单元格中使用原始单元格的值。如果它分割了原始值,它会循环其中的每一个,将它们放入下一个可用单元中。
Sub reorganize()
Dim r, s, v As Long, vCEL, vSEL, vTMP As Variant
With Selection
vSEL = Application.Transpose(.Cells.Value)
For s = LBound(vSEL) To UBound(vSEL)
vCEL = Split(vSEL(s), Chr(44))
For v = LBound(vCEL) To UBound(vCEL)
r = r + 1
.Cells(r, 1) = vCEL(v)
Next v
Next s
End With
End Sub请记住,必须首先选择要重新组织的值。在此示例映像中,选择了A1:A5并运行了宏。为了演示目的,保留了C1:C5中原始值的副本,我不知道样本数据中的句点(也称为句号)是如何得到的。

发布于 2014-10-09 13:56:20
为了防止您对基于公式的解决方案感兴趣,请先转到Name Manager (公式选项卡)并定义:
Range1作为对任何数据范围的绝对引用,例如=$A$1:$A$5
Arry1 as:=(LEN(Range1)>0)+LEN(Range1)-LEN(SUBSTITUTE(Range1,",",""))
Arry2 as:=MMULT(0+(ROW(Range1)>TRANSPOSE(ROW(Range1))),Arry1)
然后,您选择的第一个单元格中的数组公式**是:
=IF(ROWS($1:1)>SUM(Arry1),"",INDEX(TRIM(MID(SUBSTITUTE(INDEX(Range1,MATCH(TRUE,Arry2>=ROWS($1:1),0))&",",",",REPT(" ",999)),999*(ROW(INDIRECT("1:999"))-1)+1,999)),IF(ISERROR(1+ROWS($1:1)-LOOKUP(ROWS($1:1),1+Arry2)),ROWS($1:1),1+ROWS($1:1)-LOOKUP(ROWS($1:1),1+Arry2))))按要求抄下来。
问候
**数组公式的输入方式与“标准”公式不同。首先按住CTRL和SHIFT,然后按ENTER键,而不是只按ENTER键。如果您做得正确,您会注意到Excel在公式周围放置了花括号{} (尽管不要自己尝试手动插入这些括号)。
https://stackoverflow.com/questions/26278465
复制相似问题