首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Excel 2003中转换以下类型的数据?

如何在Excel 2003中转换以下类型的数据?
EN

Stack Overflow用户
提问于 2014-10-09 12:29:16
回答 2查看 156关注 0票数 0
代码语言:javascript
复制
1
2,3
4,5,6
7,8
9,10

我想把上面的数据转接到下面

代码语言:javascript
复制
1
2
3
4
5
6
7
8
9
10.

有人能用先进的Excel或宏来解释这个过程吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-09 13:08:12

使用A1:A5中的原始值,选择A1:A5。此宏将值读入变体数组中。由于读取的性质,在将值读入变体时,需要将其转换。然后循环遍历每个值,并尝试将逗号处的每个值拆分为两个或多个值。如果它找不到逗号,它只会在下一个可用单元格中使用原始单元格的值。如果它分割了原始值,它会循环其中的每一个,将它们放入下一个可用单元中。

代码语言:javascript
复制
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中原始值的副本,我不知道样本数据中的句点(也称为句号)是如何得到的。

票数 0
EN

Stack Overflow用户

发布于 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)

然后,您选择的第一个单元格中的数组公式**是:

代码语言:javascript
复制
=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在公式周围放置了花括号{} (尽管不要自己尝试手动插入这些括号)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26278465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档