Excel: Sequential numbers + specified start and end values + shift column data down

房东的猫 提交于 2019-12-24 12:35:06

问题


I have a start value in column "A" (02) And an end value in column "B" (06)

In column "C" I'd like to list the range of number sequentially using the start and end values in columns "A" and "B". However I'd also like to shift the cell data down to stop any data overlapping.

To go one step further, I don't know if this is possible, but it would help if the data from the original row could be duplicated in each of the new rows that have been created with the sequential values.

Edit:

This code creates the sequential number specifying ONE start and end value cell, and doesn't shift the cells down.. this is where I'm at so far.

Sub Serial_numbers()

startNumber = [A1].Value

endNumber = [B1].Value

For i = startNumber To endNumber

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

Next i

End Sub

Here's a pictured example of what I'm trying to do:

  1. Initial Data:

  1. Required Output:


回答1:


Do you want this?

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

Initial data:

=====>

Ending data:



来源:https://stackoverflow.com/questions/20143262/excel-sequential-numbers-specified-start-and-end-values-shift-column-data-d

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!