首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Excel中将部分数据从一列移动到另一列

在Excel中将部分数据从一列移动到另一列
EN

Stack Overflow用户
提问于 2016-03-07 09:16:42
回答 4查看 3.2K关注 0票数 0

在程序启动时,列A:A包含:

代码语言:javascript
复制
123456789123456-BC123456  
321654987654321-AD741258  
369852147258961-FG369852  
AS426953-153953751153369  
DF714258-957456351456321  
VB153965-233654963147456  

我想将列-type数据移动到B:B列。移动后,列A:A将包含:

代码语言:javascript
复制
123456789123456  
321654987654321  
369852147258961  
153953751153369  
957456351456321  
233654963147456  

而列B:B将包含:

代码语言:javascript
复制
BC123456  
AD741258  
FG369852  
AS426953  
DF714258  
VB153965  

我该如何做到这一点?

EN

回答 4

Stack Overflow用户

发布于 2016-03-07 10:00:05

如果你的数据与你的帖子中的数据完全一样,你可以使用这个sub。

代码语言:javascript
复制
Sub Extracts()
Dim tmpVal, leftPart, rightPart As String
    For Each cel In Range("A1:A6")
        tmpVal = Application.WorksheetFunction.Substitute(cel, "-", "")
        leftPart = Left(tmpVal, 15)
        rightPart = Right(tmpVal, 8)
        cel.NumberFormat = "@"
        cel.Value2 = leftPart
        cel.Offset(0, 1).NumberFormat = "@"
        cel.Offset(0, 1).Value2 = rightPart
    Next
End Sub

如果数据的长度不同,则需要编辑数据的代码。

票数 1
EN

Stack Overflow用户

发布于 2016-03-07 12:56:55

对于公式解决方案:

代码语言:javascript
复制
B1:  =IF(ISNUMBER(--LEFT(A1,FIND("-",A1)-1)),LEFT(A1,FIND("-",A1)-1),MID(A1,FIND("-",A1)+1,99))
C1:  =IF(ISNUMBER(--LEFT(A1,FIND("-",A1)-1)),MID(A1,FIND("-",A1)+1,99),LEFT(A1,FIND("-",A1)-1))

对于VBA解决方案,在处理大量数据时可能会更快(有关重要信息,请阅读代码中的注释:

代码语言:javascript
复制
Option Explicit
Sub SplitAndOrder()
'Declare variables
    Dim wsSrc As Worksheet, wsRes  As Worksheet, rRes As Range
    Dim vSrc As Variant, vRes() As Variant
    Dim I As Long
    Dim V As Variant

'Set worksheets and ranges for data Source and Results
'To overwrite original, set wsRes and rRes appropriately
Set wsSrc = Worksheets("Sheet1")
Set wsRes = Worksheets("Sheet1")
Set rRes = Cells(1, 3)

'Get source data into variant array for speed of processing
With wsSrc
    vSrc = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With

'Dimension results array
ReDim vRes(1 To UBound(vSrc, 1), 1 To 2)

'Process the array
For I = 1 To UBound(vSrc, 1)
    V = Split(vSrc(I, 1), "-")
    If IsNumeric(V(0)) Then
        vRes(I, 1) = (V(0))
        vRes(I, 2) = V(1)
    Else
        vRes(I, 1) = V(1)
        vRes(I, 2) = V(0)
    End If
Next I

'Write results
Set rRes = rRes.Resize(UBound(vRes, 1), UBound(vRes, 2))
With rRes
    .EntireColumn.Clear
    .NumberFormat = "@"
    .Value = vRes
    .EntireColumn.AutoFit
End With
End Sub
票数 0
EN

Stack Overflow用户

发布于 2016-03-07 13:07:19

代码语言:javascript
复制
B1=CHOOSE(FIND("-",A1),,,,,,,,,RIGHT(A1,15),,,,,,,LEFT(A1,15))
C1=CHOOSE(FIND("-",A1),,,,,,,,,LEFT(A1,8),,,,,,,RIGHT(A1,8))

如果A列中的数据与问题显示的不同,则B1和C1将变为0

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

https://stackoverflow.com/questions/35834725

复制
相关文章

相似问题

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