定義された行列サイズを通り、セルをその範囲内でランダムに充填するVBAコードを書いています。VBA - ループでセルを充填している間重複をチェックする
私はstackoverflowのユーザーからコードを入手しましたが、テストした後、重複した塗りつぶしを避けるためには適していないことが分かりました。例えば5セルを塗りつぶすと、ランダム充填は、前に充填されたセルで働いた。
これは、私が働いているコードです:完璧に動作し、これと同じ正確なコードを使用して
Dim lRandom As Long
Dim sCells As String
Dim sRandom As String
Dim rMolecules As Range
Dim i As Integer, j As Integer
Dim lArea As Long
lArea = 400 '20x20
'Populate string of cells that make up the container so they can be chosen at random
For i = 1 To 20
For j = 1 To 20
sCells = sCells & "|" & Cells(i, j).Address
Next j
Next i
sCells = sCells & "|"
'Color the molecules at random
For i = 1 To WorksheetFunction.Min(5, lArea)
Randomize
lRandom = Int(Rnd() * 400) + 1
sRandom = Split(sCells, "|")(lRandom)
Select Case (i = 1)
Case True: Set rMolecules = Range(sRandom)
Case Else: Set rMolecules = Union(rMolecules, Range(Split(sCells, "|")(lRandom)))
End Select
sCells = Replace(sCells, "|" & sRandom & "|", "|")
lArea = lArea - 1
Next i
rMolecules.Interior.ColorIndex = 5
、セルがある場合、コードはチェックなるようにすることを私は何を挿入することができ、私はWHEREをしますかすでに文字列や色で塗りつぶされていますか?
私が探しているこのコードは
rMolecules.Interior.ColorIndex = 5
前に右であるべきかのように私は感じしかし、私は入力するかわからないんだけど。
EDIT 私はより具体的でなければならないことに気付きました。 ランダムにセルを青色(.ColorIndex = 5)で塗りつぶそうとしていますが、最初に確認する必要があるのは、ランダム化がセルを2回マークしていない場合です。この場合は、 5つの異なる細胞にマーキングすると、重複のためにそれらのうちの4つだけをマークし、したがって、青色を有する4つの細胞のみを満たす。私はそれを避け、マーク/記入する別のセルを選択させる必要があります。
ご協力いただきありがとうございます。
あなたの主な質問の他に、ループから、そして関数全体からでも、「ランダム化」を削除する必要があります。一度だけ使用する必要があります - ブックが開かれるときが望ましいループで 'Randomize'を使うと、256個の値のセットからランダムな値が得られます。これは、VBAの開始以来そこにあった奇妙なバグです。 –
私はあなたがしようとしていることを完全に理解していないと言わざるを得ない。ランダムな色でセルを塗りつぶす方法を探していますが、色を重複させたくないのですか? – Spurious
@ Spurious:特定の色(この場合は青色)でランダムにセルを塗りつぶす方法を探していますが、セルを塗りつぶす前に、ランダム化がセルを2回マークしていないかどうかを確認する必要があります。 .ColorIndex = 5で塗りつぶすと、同じセルに再び塗りつぶされません。 – vbmolec