0

ここに投稿されたいくつかの例を試してみましたが、下の図に示すように、配列に値を設定できないようです。理想的には、学生の数を指定するための入力ボックスを用意し、次に示すように VBA 関数で配列を埋めたいと思います。

画像へのリンク

これは可能ですか、それとも手動で数値を入力する必要がありますか?

4

3 に答える 3

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))

それともそれよりも複雑ですか?

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

技術的には、配列全体で 1 回だけセルに書き込む方が高速ですが、この状況では速度の違いは無視できます。

于 2012-09-22T17:17:55.977 に答える