【问题标题】:Excel: Sequential numbers + specified start and end values + shift column data downExcel:连续数字+指定的开始和结束值+向下移动列数据
【发布时间】:2013-11-22 11:02:28
【问题描述】:

我在“A”列中有一个起始值 (02) 以及“B”列中的最终值(06)

在“C”列中,我想使用“A”和“B”列中的开始值和结束值顺序列出数字范围。但是,我还想将单元格数据向下移动以阻止任何数据重叠。

更进一步,我不知道这是否可能,但如果原始行中的数据可以在使用顺序值创建的每个新行中复制会有所帮助。

编辑:

此代码创建指定一个起始值和结束值单元格的序号,并且不会将单元格向下移动。这是我目前所处的位置。

Sub Serial_numbers()

startNumber = [A1].Value

endNumber = [B1].Value

For i = startNumber To endNumber

ActiveCell.Offset(i - startNumber, 0) = i

Next i

End Sub

这是我正在尝试做的一个图示示例:

  1. 初始数据:

  1. 所需输出:

【问题讨论】:

  • 为您编辑了主要评论。

标签: excel vba numbers shift sequential


【解决方案1】:

你想要这个吗?

Sub sof20143262Serial_numbers()
  Dim i, iStep, j, jp1, startNumber, endNumber, delta
  Dim bEmpty As Boolean
  Dim strRange

'
  Application.ScreenUpdating = False
'
' intialize empty row key and set the first data row number j:
'
  bEmpty = False
  j = 2
'
' we use temporary memory for CPU time gain:
'   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)
'
'   terminate the loop if empty row:
'
    If (bEmpty) Then
      Exit Do
    End If
'
'   get number of rows to add:
'
    delta = endNumber - startNumber
    If (endNumber < startNumber) Then
      iStep = 1
      delta = -delta
    Else
      iStep = -1
    End If
'
    Range("C" & j).Value = startNumber
    endNumber = endNumber + iStep
'
'   insert a row and copy the right side data columns D to E,
'   here you can add more columns by changing E to any other letter:
'
    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

初始数据: =====>

结束数据:

【讨论】:

  • 嘿 Jacouh,是的,谢谢你,这确实适用于一组数字,但是我希望对多行重复此操作。此外,要使其正常工作,还需要插入新行以为顺序值留出空间(即每次将当前数据向下移动。)想法?
  • 请通过更新您的问题以表格形式发布您的需求。我们可以在视觉上更轻松地处理......
  • 我很乐意发布图片,但我的代表低于 10。我已经尝试过解决方法,请查看我在初始帖子中链接的图片。
  • 谢谢雅库!!你真是个天才! :)