0

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

链接到图片

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

4

3 回答 3

1

[如果以下内容构成“要求......澄清”,我深表歉意,但除非我听到更多,否则我无能为力]

从您的图像中,我看不到问题的症结所在。您的意图是否只是让单元格B5(在您的示例中)始终具有值1C5始终具有值N-1N学生人数在哪里),然后在整个工作表中遵循您的“轮换”模式?

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

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

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

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

还是比这更复杂?

于 2012-09-22T17:26:16.980 回答
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 

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

于 2012-09-22T17:17:55.977 回答
0

只有在绝对必要的情况下,我才会求助于 VBA。

这可以通过 3 个步骤完成:

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

  2. 将此公式放入单元格中B5

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

  1. 复制此单元格并将其粘贴(公式)到您的 20 x 20 网格中。

而已。额外的好处是您可以将网格调整为任何大小。

于 2012-09-22T18:21:37.533 回答