行のグループを追加/削除するために私がかつて取り組んだコード(要件)。グループの最初の行が特定の基準を満たしている場合 (つまり、要件が考慮したいものではない場合)、(1) それをカウントせず、(2) グループを非表示にするように、コードを変更する必要がありました。 (現在および後続の 2 行)。これはすべてうまくいきます。
問題は、これらの変更を組み込んだので、コードの別のセクションでエラーが発生し、私の人生では理由がわからないことです。私はこれを経験しましたが、非常にイライラしています。私は助けを求めて手を差し伸べており、誰かが私のエラーを見てくれることを願っています(!)
グループ内の開始行番号と終了行番号を計算し、これらの計算を「開始」および「終了」と呼ばれる配列に格納します。ReDim ステートメントを使用して配列を初期化します。これが問題の一部である可能性があると考えたからです。
私の「添え字が範囲外」である理由についての洞察をいただければ幸いです。ロジックをたどり、このエラーを調査し、VBA 配列の構文/使用法について読みました。他に何をすべきかわかりません。前もって感謝します。関連する行は次のとおりです。
Sub Button1_Click()
Cells.Select
Selection.ClearOutline
If Cells.EntireRow.Hidden Then Cells.EntireRow.Hidden = False
Dim Start() As Integer
Dim Finish() As Integer
Dim p As Integer, q As Integer
ReDim Start(0, 50)
ReDim Finish(0, 50)
以下は、スプレッドシートのすべての行をループするロジックに埋め込まれています。
i = 1
For Row = 4 To Cells(1, 6).Value - 1
If Begin Then
If Cells(Row, 3).Interior.ColorIndex = 44 Then
Start(i) = Row + 1
j = Cells(Row, 2).Value
Begin = False
End If
Else
If Cells(Row, 2).Value = j + 1 Or Cells(Row, 2).Interior.ColorIndex = 37 Then
Finish(i) = Row - 1
Begin = True
i = i + 1
Row = Row - 1
End If
End If
Next
変更したブロックは次のとおりです (追加したコードは、行を非表示にしようとする最後のブロックです)。それは前のものに先行します。私の変更が上記にどのように影響するのか疑問に思っています(?!)
If Cells(Row, 5).Value = "Requirement" Then
Range(Cells(Row, 4), Cells(Row, 4)).Interior.ColorIndex = 40
Rows(Row).Font.Bold = True
Rows(Row).Font.Italic = False
Rows(Row).Font.ColorIndex = 1 'Black
If Cells(Row - 3, 4).Value = "" Then 'this is requirement #1
Cells(Row, 4).Value = 1
Else
Cells(Row, 4).Value = Cells(Row - 3, 4).Value + 1
End If
p = Row
q = p + 2
Rows(p & ":" & q).Select
If Cells(p, 19).Value = "4" Then
Selection.EntireRow.Hidden = True
Else
Selection.EntireRow.Hidden = False
End If