在程序启动时,列A:A包含:
123456789123456-BC123456
321654987654321-AD741258
369852147258961-FG369852
AS426953-153953751153369
DF714258-957456351456321
VB153965-233654963147456 我想将列-type数据移动到B:B列。移动后,列A:A将包含:
123456789123456
321654987654321
369852147258961
153953751153369
957456351456321
233654963147456 而列B:B将包含:
BC123456
AD741258
FG369852
AS426953
DF714258
VB153965 我该如何做到这一点?
发布于 2016-03-07 10:00:05
如果你的数据与你的帖子中的数据完全一样,你可以使用这个sub。
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如果数据的长度不同,则需要编辑数据的代码。
发布于 2016-03-07 12:56:55
对于公式解决方案:
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解决方案,在处理大量数据时可能会更快(有关重要信息,请阅读代码中的注释:
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发布于 2016-03-07 13:07:19
B1=CHOOSE(FIND("-",A1),,,,,,,,,RIGHT(A1,15),,,,,,,LEFT(A1,15))
C1=CHOOSE(FIND("-",A1),,,,,,,,,LEFT(A1,8),,,,,,,RIGHT(A1,8))如果A列中的数据与问题显示的不同,则B1和C1将变为0。
https://stackoverflow.com/questions/35834725
复制相似问题