如何从开头编号和结束编号创建列表

时间:2009-03-11 18:36:50

标签: excel vba list

我有一组数字:

 |  A     B
--------------
1| 100   102
2| 103   103
3| 104   105
4| 106   110

A列是起始编号,B列是结束编号。我们需要使用A和A列中的起始编号和结束编号创建一个列表(在单独的单元格上)。 B. 例如。基于第1行(A1和B1)的第1组数据,第1组数字将是:100,101,102,然后它将进入第2行,在102之后放103并继续进行第3行,扩展列表并显示104和105,然后到最后一行,它应该列出105,106,107,108,109,110。

我们应该能够标记列表编号的开头,以便我们知道每个列表的开头。即,应标记A列中列出的所有数字。

1 个答案:

答案 0 :(得分:3)

我不确定我完全理解你的问题,但我想你想转此:

100 102
103 103
104 105
106 110

进入这个?

100 102     100, 101, 102
103 103     103
104 105     104, 105
106 110     106, 107, 108, 109, 110

如果是这样,以下代码将实现此目的:

Private Sub getListsOfNumbers()
    Dim inputRange As String
    Dim x As Long
    Dim y As Long

    'Get input range of data
    inputRange = InputBox("Enter input range", "Start", "A1:A4")

    'Clear output range (two column offset)
    Range(inputRange).Offset(0, 2).ClearContents

    With Range(inputRange)

        'Loop through input range
        For x = 1 To .Cells.Count

            'Loop through difference between second column and first column
            For y = 0 To (.Cells(x, 2) - .Cells(x, 1))

                'Add value to output column
                .Cells(x, 3) = .Cells(x, 3) & (.Cells(x, 1) + y) & ", "
            Next y

            'Tidy up output by removing trailling comma
            .Cells(x, 3) = CStr(Left(.Cells(x, 3), Len(.Cells(x, 3)) - 2))
        Next x
    End With
End Sub

如果我误读了您的请求,请告诉我。

编辑:刚试过这个真实的,对于更大的数据集,它会像人们预测的那样慢。如果您的数据有100s / 1000s的行数,和/或A列和A列中数字之间的差异。 B显着大于示例,那么您可能希望通过在过程开始时关闭计算和screenUpdating并在完成后恢复来最小化延迟。

如果您需要实现此功能,Excel帮助会提供语法和示例来帮助您。