Excel VBA保留逗号中的前3个数字

时间:2017-07-13 15:29:10

标签: excel vba excel-vba

我需要操作数千行原始数据。

它看起来像:

001_sample.com, 002_XML3.com, 003_Example532.com
004_Example.com
005_Example392.com, 006_sample399.com

依旧......

我只需要前3个数字,所以我想留下来。

001, 002, 003
004
005, 006

非常感谢任何帮助。我尝试过中左右功能,但我无法做到。

这就是我原来做的......

对于每个c In范围(“E1:E5000”)

If InStr(c.value, "_") > 0 Then
    c.value = Left(c.value, InStr(c.value, "_") - 1)
End If
    If InStr(c.value, " ") > 0 Then
    c.value = Left(c.value, InStr(c.value, " ") - 1)
End If

下一个c

谢谢大家的帮助。

3 个答案:

答案 0 :(得分:0)

您没有指定数据的存储方式。如果Cell A1具有该值,则可以使用:

Dim value As String, numeric As String
value = Range("A1").Value
numeric = LEFT(value, 3)

答案 1 :(得分:0)

这是一个快速而又脏的UDF,可以做你想做的事情:

Function mySplit(rng) As String
Dim splt() As String
Dim i As Integer
If rng.Count > 1 Then Exit Function
splt = Split(rng, ",")
For i = LBound(splt) To UBound(splt)
    splt(i) = Left(Application.WorksheetFunction.Trim(splt(i)), 3)
Next
mySplit = Join(splt, ", ")

End Function

将它放在工作簿附带的模块中,然后将其称为公式:

=mySplit(A1)

enter image description here

如果您有Office 365 Excel,则可以使用此数组公式:

=TEXTJOIN(", ",TRUE,LEFT(TRIM(MID(SUBSTITUTE(A1,",",REPT(" ",999)),999*(ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1,",",""))+1))-1)+1,999)),3))

作为数组公式,需要在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter确认。如果操作正确,那么Excel会将{}放在公式周围。

enter image description here

答案 2 :(得分:0)

如果您的数据位于A列,那么它将起作用。

Sub test()
    Dim vDB, vR() As String, vSplit
    Dim rngDB As Range
    Dim n As Long, i As Long, j As Integer
    Set rngDB = Range("a1", Range("a" & Rows.Count).End(xlUp)) 'fix your column  a~~> your column
    vDB = rngDB
    n = UBound(vDB, 1)
    ReDim vR(1 To n, 1 To 1)
    For i = 1 To n
        vSplit = Split(vDB(i, 1), ",")
        For j = 0 To UBound(vSplit)
            vSplit(j) = Split(vSplit(j), "_")(0)
        Next j
        vR(i, 1) = Join(vSplit, ",")
    Next i
    rngDB = vR

End Sub