ここに投稿されたいくつかの例を試してみましたが、下の図に示すように、配列に値を設定できないようです。理想的には、学生の数を指定するための入力ボックスを用意し、次に示すように VBA 関数で配列を埋めたいと思います。
これは可能ですか、それとも手動で数値を入力する必要がありますか?
[次の説明が「... 説明を求めている」に該当する場合は申し訳ありませんが、もう少し詳しくお聞かせいただけない限り、どうすることもできません]
あなたの画像からは、質問の核心はわかりません。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))
それともそれよりも複雑ですか?
どうしても必要な場合にのみ、VBAに頼ります。
これは3つのステップで実行できます。
20 x 20グリッドに名前を付けます(例:schedGrid)。
この数式をセルに入れますB5
= IF(COLUMN()= 2、ROW()-ROW(schedGrid)+1、IF(A5-1 = 0、ROWS(schedGrid)、A5-1))
それでおしまい。追加のボーナスは、グリッドを任意のサイズに調整できることです。
編集どうやら、私はあなたの投稿全体を読んでいませんでした。必要な生徒数の入力ボックスを使用するように更新されました。
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
技術的には、配列全体で 1 回だけセルに書き込む方が高速ですが、この状況では速度の違いは無視できます。