如何提取序列中的第一个和最后一个数字

How to exctract first and last numbers in a sequence

我找到了类似的主题,但我无法完全应用该解决方案来满足我的需求...我想升级 excel 我工作中的工作簿,使其更具有自动输入功能。 大多数情况下我使用 excel 函数,但有时我需要一些 VBA 编码,我不是很熟悉。所以我的问题是,我需要在此线程中提到的类似内容。 我从“A4”到 X 开始按升序排列不同的框号 工作表 1。示例框号:M004935149、M004935150、M004935151、M004935202、M004935203、M004935204、M004935205,当我从“A4”复制并粘贴(值)到 sheet2 时是否可能(取决于数量) boxes copyed) 以在其他一些单元格中以特定形式创建字符串、句子或任何被调用的内容。 M004935149-151 // M004935202-205。我使用了上面 link 中主题中的代码,它可以完成一半的工作,但我无法弄清楚如何从所需的单元格范围进行输入并将它们显示在工作表上,以及如何以所需的格式显示值。 Link 来自我的示例的屏幕截图如下:

希望有人能提供帮助。提前致谢。

检查这个

Option Explicit
Sub test2()
    Dim ws As Worksheet
    Dim arr() As String, result As String, letter As String, cellValue As String, tempLastElement As String
    Dim lastColumn As Long, counter As Long
    Dim firstColumn As Integer, targetRow As Integer, i As Integer
    Set ws = Worksheets("Sheet1")
    firstColumn = 1 'number of first column with target data
    targetRow = 1 'number of row with target data
    
    lastColumn = ws.Range(ws.Cells(targetRow, firstColumn), ws.Cells(targetRow, Columns.Count).End(xlToLeft).Columns).Count
    ReDim arr(1 To lastColumn - firstColumn + 1)
    letter = Left(ws.Cells(targetRow, firstColumn).Value, 1) 'if count of character in start of string will be more 1, replace 1 on to count of characters
    For i = 1 To UBound(arr)
        cellValue = ws.Cells(targetRow, i).Value
        arr(i) = Right(cellValue, Len(cellValue) - 1) 'if count of character in start of string will be more 1, replace 1 on to count of characters
    Next i
    
    ReDim sequenceArr(1 To UBound(arr))
    sequenceArr(1) = arr(1)
    counter = 2
    For i = 1 To UBound(arr) - 1
        If CLng(arr(i)) + 1 = CLng(arr(i + 1)) Then
            tempLastElement = arr(i + 1)
            sequenceArr(counter) = tempLastElement
        Else
            counter = counter + 1
            sequenceArr(counter) = arr(i + 1)
            counter = counter + 1
        End If
        
    Next
    ReDim Preserve sequenceArr(1 To counter)
    result = ""
    counter = 1
    For i = 1 To UBound(sequenceArr) - 1
        If counter > UBound(sequenceArr) Then Exit For
        If result = "" Then
            result = letter & sequenceArr(counter) & "-" & Right(sequenceArr(counter + 1), 3)
            counter = counter + 2
        Else
            result = result & "//" & letter & sequenceArr(counter) & "-" & Right(sequenceArr(counter + 1), 3)
            counter = counter + 2
        End If
    Next
    ws.Range("D4").Value = result
End Sub

结果