我已经尝试了一些贴在这里的例子,但我似乎无法填充我的阵列,如下图所示。理想情况下,我希望有一个输入框来指定学生数量,然后让VBA函数填充数组,如下所示:
这是可能的,还是我只需要手动填充数字?
答案 0 :(得分:1)
[道歉,如果以下内容构成“要求......澄清”,但除非我多听一点,否则我无能为力)
从你的形象来看,我无法看到问题的症结所在。您的目的是让单元格B5
(在您的示例中)始终具有值1
,C5
始终为值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。
这可以分三步完成:
命名您的20 x 20网格(例如schedGrid)。
将此公式放在单元格B5
= IF(COLUMN()= 2,ROW() - ROW(schedGrid)+ 1,IF(A5-1 = 0,行(schedGrid),A5-1))
就是这样。另外一个好处是你可以将网格调整到任何大小。