|
▼よしこ さん:
こんばんわ。
かなーりファットでよろしくないんですけど、作ってみました。
とりあえず、こんな感じはどうかな?ってのをアップします。
よくないところとか、他に希望などありましたら言ってください。
条件)
データはA1〜ずらーっとあること
合計値(例の場合50)がC1に入力されていること
H列とZ列には何も入力されていないこと
結果は?)
マクロを実行すると、H列に文字列が表示されます。(とりあえずです)
※データの個数は2つの合計か3つの合計しかできません。。(とりあえず。。)
マクロ)
以下のコードを標準モジュールに記述して、対象のシートをアクティブにし、
マクロ(合計を合わせる)を実行する。
Dim a As Integer, k As Integer
Private Sub ランダム合計2個()
Dim b As Integer, c As Integer, d As Integer, e As Integer
Dim f As Integer, g As Integer, h As Integer
'A列の最終行を取得
a = Range("A65536").End(xlUp).Row
'合計値を格納
h = Range("C1")
'合計値になるまで繰り返す。"k"回繰り返し合計値にならなかったら抜ける
Do Until g = h Or k = a * 50
'Z4に数値が入力されるまで繰り返す
Do
'ランダムな整数値を格納
b = Int(a * Rnd) + 1
'C列の最終行を取得
c = Range("Z65536").End(xlUp).Row
'同じ数値がないか検索------------------------
With Range("Z2:Z3")
Set Rng = .Find(What:=b, MatchCase:=False)
End With
If Rng Is Nothing Then Range("Z" & c + 1) = b
'-------------------------------------------
Loop Until Range("Z3") <> ""
d = Range("Z2")
e = Range("Z3")
g = Range("A" & d) + Range("A" & e)
Range("H1") = d & "行目の" & Range("A" & d)
Range("H2") = e & "行目の" & Range("A" & e)
Range("Z2").Clear
Range("Z3").Clear
k = k + 1
Loop
End Sub
Private Sub ランダム合計3個()
Dim b As Integer, c As Integer, d As Integer, e As Integer
Dim f As Integer, g As Integer, h As Integer
'合計値を格納
h = Range("C1")
'合計値になるまで繰り返す。"k"回繰り返し合計値にならなかったら抜ける
Do Until g = h Or k = a * 50
'Z4に数値が入力されるまで繰り返す
Do
'ランダムな整数値を格納
b = Int(a * Rnd) + 1
'C列の最終行を取得
c = Range("Z65536").End(xlUp).Row
'同じ数値がないか検索------------------------
With Range("Z2:Z4")
Set Rng = .Find(What:=b, MatchCase:=False)
End With
If Rng Is Nothing Then Range("Z" & c + 1) = b
'-------------------------------------------
Loop Until Range("Z4") <> ""
d = Range("Z2")
e = Range("Z3")
f = Range("Z4")
g = Range("A" & d) + Range("A" & e) + Range("A" & f)
Range("H1") = d & "行目の" & Range("A" & d)
Range("H2") = e & "行目の" & Range("A" & e)
Range("H3") = f & "行目の" & Range("A" & f)
Range("Z2").Clear
Range("Z3").Clear
Range("Z4").Clear
k = k + 1
Loop
End Sub
Sub 合計を合わせるマクロ()
Columns("H:H").Clear
Columns("Z:Z").Clear
Call ランダム合計2個
If k = a * 50 Then
k = 0
Call ランダム合計3個
End If
If k = a * 50 Then
MsgBox "合計値になりません。。"
Columns("H:H").Clear
End If
k = 0
End Sub
|
|