Excel VBA:序列号+;指定的起始值将递增到结束值+;向下移动列数据
我是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:
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。这就是你想要的吗?