現在、ユーザー入力を受け取り、その値をFastenerNumbersという配列に格納するプログラムを作成しようとしています。これらの値に基づいて、プログラムは特定のセルを緑の色で塗りつぶし、ユーザーが値を入力することを知るようにします。問題は、配列の値が0の場合、ワークシートがきれいになるようにその列を削除したいということです。条件に基づく特定の列の削除
私が取り組んでいる問題は、forループ中に列が削除されると、セルが左にシフトすることです。このため、いくつかのセルは本質的にスキップされます。これに対処するために、私は本質的にプログラムを強制的に強制して、スキップされた列を数回ループするようにしなければなりませんでした。
は、ここでは、コードです:
'Make cells green for user to put inputs into
For i = 0 To UBound(FastenerNumbers)
If FastenerNumbers(i) <> 0 Then
With Range(Range("A14").Offset(0, 2 * i), Range("A14").Offset(FastenerNumbers(i) - 1, (2 * i) + 1))
.Borders.LineStyle = xlContinuous
.Interior.ColorIndex = 4
End With
End If
Next
'Define initial counter variable
j = 1
' Do Until j = 5
' For i = 0 To UBound(FastenerNumbers)
' If FastenerNumbers(i) = 0 Then
' Range(Range("A14").Offset(0, 2 * i), Range("A14").Offset(FastenerNumbers(i) - 1, (2 * i) + 1)).EntireColumn.Delete
' End If
' Next
' Loop
'
Do
For Each cell In Range("A14", Range("A14").Offset(, (UBound(FastenerNumbers) + 1) * 2))
If cell.Interior.ColorIndex <> 4 Then
cell.EntireColumn.Delete
End If
j = j + 1
If j >= (5 * (UBound(FastenerNumbers) + 1) * 2) Then
Exit Do
End If
Next
Loop
擬似コードは、私が使用しようとしていた別の方法です。いずれの方法も他の方法よりもはるかに優れているとは思わない。私はループがよりクリーンでより効率的になるようにしたいと思います。
の次の数をカウントする別の変数(
j
)を有する、それを非表示にするには?編集:またはループバック? – findwindow