在为员工创建计划时,如何使用唯一编号填充数组?

时间:2012-09-22 16:21:19

标签: excel excel-vba vba

我已经尝试了一些贴在这里的例子,但我似乎无法填充我的阵列,如下图所示。理想情况下,我希望有一个输入框来指定学生数量,然后让VBA函数填充数组,如下所示:

Link to Image

这是可能的,还是我只需要手动填充数字?

3 个答案:

答案 0 :(得分:1)

[道歉,如果以下内容构成“要求......澄清”,但除非我多听一点,否则我无能为力)

从你的形象来看,我无法看到问题的症结所在。您的目的是让单元格B5(在您的示例中)始终具有值1C5始终为值N-1(其中N是学生人数)然后在整个表格中遵循“轮换”模式?

如果是这样,您可以在第一列中使用以下公式(我的示例适用于B6

=IF(OR(B5=number_of_students,B5=""),"",B5+1)

然后表中的每个其他单元格都可以(我的例子是C5):

=IF(B5="","",IF(B5=1,number_of_students,B5-1))

还是比这更复杂?

答案 1 :(得分:0)

编辑显然,我没有阅读您的整个帖子。更新为使用输入框表示您想要多少学生:

Option Explicit
Private theArray() As Long
Sub populateArray()
    Dim elements As Long
    Dim response As String
    response = InputBox("Enter the number of students", "Number of students?")
    If IsNumeric(response) Then
        elements = CLng(response)
    ElseIf response = "" Then
        Exit Sub
    Else
        MsgBox "Invalid input!", vbCritical
        Exit Sub
    End If
    ReDim theArray(1 To elements, 1 To elements)
    Dim i As Long, j As Long, num As Long
    For i = 1 To elements
        For j = 1 To elements
            num = i - j + 1
            If num < 1 Then num = num + elements
            populateArray(i, j) = num
        Next
    Next
End Sub

如下所示,您可以使用populateArray替换Cells,并直接写入ActiveSheet

原始答案 这将使用您列出的格式填充数组:

Dim yourArray(1 To 20, 1 To 20) As Long
Dim i As Long, j As Long, num As Long
For i = 1 To 20
    For j = 1 To 20
        num = i - j + 1
        If num < 1 Then num = num + 20

        yourArray(i, j) = num
    Next
Next

顺便说一句,您也可以使用单元格而不是yourArray来填充工作表的一部分。

例如,如果您想填充图像中列出的位置的单元格,可以直接在循环中使用此单元格来填充:

Dim i As Long, j As Long, num As Long
For i = 1 To 20
    For j = 1 To 20
        num = i - j + 1
        If num < 1 Then num = num + 20
        Cells(i + 4, j + 1) = num
    Next
Next 

从技术上讲,只使用整个阵列向单元格写入一次会更快,但在这种情况下,速度的差异可以忽略不计。

答案 2 :(得分:0)

只有在我必须这样做的时候才会诉诸于VBA。

这可以分三步完成:

  1. 命名您的20 x 20网格(例如schedGrid)。

  2. 将此公式放在单元格B5

  3.   

    = IF(COLUMN()= 2,ROW() - ROW(schedGrid)+ 1,IF(A5-1 = 0,行(schedGrid),A5-1))

    1. 复制此单元格并将其(公式)粘贴到20 x 20网格中。
    2. 就是这样。另外一个好处是你可以将网格调整到任何大小。