Excel VBA:序列号+;指定的起始值将递增到结束值+;向下移动列数据

Excel VBA:序列号+;指定的起始值将递增到结束值+;向下移动列数据,excel,vba,Excel,Vba,我是VBA新手,有人能帮我在指定值上添加序列吗。 这是我从对话中得到的代码 Sub sof20143262Serial_numbers() Dim i, iStep, j, jp1, startNumber, endNumber, delta Dim bEmpty As Boolean Dim strRange Application.ScreenUpdating = False bEmpty = False j = 2 jp1:

我是VBA新手,有人能帮我在指定值上添加序列吗。

这是我从对话中得到的代码

Sub sof20143262Serial_numbers()

    Dim i, iStep, j, jp1, startNumber, endNumber, delta
    Dim bEmpty As Boolean
    Dim strRange

    Application.ScreenUpdating = False

    bEmpty = False
    j = 2

    jp1: j + 1
    strRange : range name

    Do While (Not bEmpty)
        jp1 = j + 1
        strRange = "A" & j

        startNumber = Range(strRange).Value
        endNumber = Range("B" & j).Value
        bEmpty = IsEmpty(startNumber)

        If (bEmpty) Then
            Exit Do
        End If

        delta = endNumber - startNumber
        If (endNumber < startNumber) Then
            iStep = 1
            delta = -delta
        Else
            iStep = -1
        End If

        Range("C" & j).Value = startNumber
        endNumber = endNumber + iStep

        For i = endNumber To startNumber Step iStep
            Range(strRange).Offset(1).EntireRow.Insert shift:=xlDown
            Range("C" & jp1).Value = i - iStep
            Range("D" & jp1 & ":" & "E" & jp1).Value = Range("D" & j & ":" & "E" & j).Value
        Next
        '
        '   prepare the next loop:
        '
        j = j + delta + 1
        '
    Loop
    '
    Application.ScreenUpdating = True

End Sub
子SOF20143262序列号()
尺寸i、iStep、j、jp1、起始编号、结束编号、增量
作为布尔的Dim bEmpty
模糊排列
Application.ScreenUpdating=False
空=假
j=2
jp1:j+1
strRange:范围名称
待会(不要空着)
jp1=j+1
strRange=“A”和“j”
startNumber=范围(strRange).Value
endNumber=范围(“B”和“j”)。值
bEmpty=IsEmpty(开始编号)
如果(空的)那么
退出Do
如果结束
增量=结束编号-开始编号
如果(endNumber
您的最终结果图片没有正确上传,并且您的代码在所有方面都不是自解释的。然而,我试图预测您的意图,并将您的代码修改为我认为完成后的样子。给你

Sub sof20143262Serial_numbers()

    Dim i As Long, iStep As Long
    Dim R As Long, jp1 As Long
    Dim startNumber As Long, endNumber As Long, delta As Long
    Dim bEmpty As Boolean
'    Dim strRange

    Application.ScreenUpdating = False

'    bEmpty = False
    R = 2
'    jp1: R + 1 strRange : range name

    With ActiveSheet
        Do While Len(.Cells(R, 1).Value)
    '        jp1 = R + 1
    '        strRange = "A" & R
        startNumber = Cells(R, 1).Value
'        startNumber = Range(strRange).Value
'        endNumber = Range("B" & R).Value
        endNumber = Cells(R, 2).Value

'        bEmpty = IsEmpty(startNumber)
'        If (bEmpty) Then
'            Exit Do
'        End If

        delta = Abs(endNumber - startNumber)
        iStep = IIf(endNumber < startNumber, 1, -1)
'        delta = endNumber - startNumber
'        If (endNumber < startNumber) Then
'            iStep = 1
'            delta = delta * -1
'        Else
'            iStep = -1
'        End If

        .Cells(R, 3).Value = startNumber
'        Range("C" & R).Value = startNumber
        endNumber = endNumber + iStep

        For i = endNumber To startNumber Step iStep
'            Range(strRange).Offset(1).EntireRow.Insert shift:=xlDown
            .Rows(R).EntireRow.Insert Shift:=xlUp
            R = R + 1
            .Cells(R, "C").Value = i - iStep
            .Cells(R, "D").Value = .Cells(R - 1, "D").Value
            .Cells(R, "E").Value = .Cells(R - 1, "E").Value
'            Range("C" & jp1).Value = i - iStep
'            Range("D" & jp1 & ":" & "E" & jp1).Value = Range("D" & R & ":" & "E" & R).Value
        Next
    End With

            ' prepare the next loop:
'            R = R + delta + 1
            R = R + 1
         Loop
     Application.ScreenUpdating = True
End Sub
子SOF20143262序列号()
暗淡的i一样长,iStep一样长
变暗R为长,jp1为长
变暗起始编号变长,结束编号变长,增量变长
作为布尔的Dim bEmpty
“暗淡的安排
Application.ScreenUpdating=False
'空=假
R=2
'jp1:R+1安排:范围名称
使用ActiveSheet
Do While Len(.Cells(R,1).Value)
'jp1=R+1
'strRange=“A”&R
startNumber=单元格(R,1).值
'startNumber=范围(strRange).Value
'endNumber=范围(“B”&R).值
endNumber=单元格(R,2).值
'bEmpty=IsEmpty(开始编号)
“如果(空的)那么
“退出吗
"完"
增量=绝对值(结束编号-开始编号)
iStep=IIf(结束编号<开始编号,1,-1)
'增量=结束编号-开始编号
'如果(endNumber
我保留了你的大部分代码,这样你就可以找到你的方法。我以不同的方式实施了您的许多想法。我希望您能理解我的意图,甚至纠正我的代码,因为由于缺乏数据,整个过程从未尝试过


如果您需要更多帮助,请告诉我。

我发现您的原始代码与我生成的代码有很大差异。但是下面的代码生成了图片中的内容,只是它通过插入移动了开始和结束数字。当然,这是可以避免的,但需要更多的编码

Option Explicit

Enum Nws                            ' Rows & Columns
    NwsFirstDataRow = 2             ' = 1 caption row (adjust as required)
    NwsStart = 1                    ' 1 = column A (adjust as required)
    NwsEnd                          ' no value = previous + 1
    NwsSerial
End Enum

Sub SerialNumbers()
    ' 06 Apr 2017

    Dim Series As Long              ' = Start
    Dim Repeats As Integer          ' = End
    Dim R As Long                   ' row number
    Dim i As Integer                ' repeat counter

    R = NwsFirstDataRow
    With ActiveSheet
        Series = Val(.Cells(R, NwsStart).Value)
        Repeats = Val(.Cells(R, NwsEnd).Value)
        If Repeats Then
            Do While Series > 0
                For i = 1 To Repeats
                    If i > 1 Then
                        R = R + 1
                        .Rows(R).EntireRow.Insert Shift:=xlUp
                    End If
                    .Cells(R, NwsSerial).Value = Series * 10 + i
                Next i
                R = R + 1
                Series = Val(.Cells(R, NwsStart).Value)
            Loop
        End If
    End With
End Sub

我如何在这里发布我的图片?所以您可以看到我的输出应该是:(这样你也可以看到我的代码输出。顺便说一句,我很欣赏你的代码。是的,它很有用!兄弟!非常感谢你的帮助!当然,它做了你想做的事,接受答案作为对其他人的指导。我很高兴它对你有用。您好,先生,还有一个问题,最后一个以零结尾的序列正在转换或自动四舍五入零序中包含的下一个数字。样本12340,然后它像这样出现12341 12342 12343 12344 12345 12346 12347 12348 12349 12350,你能帮忙吗?提前谢谢!另一个问题,根据定义,是另一个问题-因为我不明白你的意思。12341,四舍五入,会给你12340,这是从12342到12350的结果是一样的。12345到12350都会返回12350。这就是你想要的吗?