B9に値が入るまでこのコードでサブをループしようとしています。 while文を含めるまでは、私が下手に何をしているのか不明です。Excell whileループでサブ呼び出しを繰り返す
Private Sub CommandButton2_Click()
Range("B5:B18").ClearContents
If [D2] = [R15] Then
Do While IsEmpty("B9") = True
Randomname
Loop
End If
また、おそらく関連性の高いサブコードを投稿してください。 サブは、私が見つけて自分のニーズに合わせて変更したコードに基づいたランダムな名前選択ツールです。 2つの範囲を比較し、まだ使用されていないソース範囲の名前を一度に1つずつ取り出します。
Sub Randomname()
Dim source, destination As Range
Set source = ActiveSheet.Range("L15:L28")
Set destination = ActiveSheet.Range("B5:B18")
ReDim randoms(1 To source.Rows.Count)
destrow = 0
For i = 1 To destination.Rows.Count
If destination(i) = "" Then: destrow = i: Exit For
Next i
If destrow = 0 Then: MsgBox "no more room in destination range": Exit Sub
For i = 1 To UBound(randoms): randoms(i) = Rnd(): Next i
ipick = 0: tries = 0
Do While ipick = 0 And tries < UBound(randoms)
tries = tries + 1
minrnd = WorksheetFunction.Min(randoms)
For i = 1 To UBound(randoms)
If randoms(i) = minrnd Then
picked_before = False
For j = 1 To destrow - 1
If source(i) = destination(j) Then: picked_before = True: randoms(i) = 2: Exit For
Next j
If Not picked_before Then: ipick = i
Exit For
End If
Next i
Loop
If ipick = 0 Then: MsgBox "no more unique name possible to pick": Exit Sub
destination(destrow) = source(ipick)
End Sub
IsEmpty( "B9") 'は常にfalseを返します。あなたはおそらく 'IsEmpty([B9])'を探しています。 – Comintern
あなたは私に正しい方向に考えさせることができました。 Do Is Ismpty(範囲( "B9")。値)= True ありがとうございます。 – user3107457
@ user3107457 IsEmpty(Range( "B9")。Value)= TrueはIsEmpty([B9])と同じです。 ( '= True'部分は冗長です。なぜなら、それ自身が' True'なら 'True'に、' Range( "B9").Value'は 'B9 ''のショートカットです)。 – YowE3K