Excel VBA マクロでの質問なんですけど、現在、人

Writer: admin Type: clarksre Date: 2019-01-05 00:00
Excel VBA マクロでの質問なんですけど、現在、人の群衆行動の予測(セル・オートマトンでの避難行動シミュレート)を勉強しているのですが、静的フロアフィールドによる人の動かし方について困っていることがあります。以下の図において、B2:AE31の範囲に人(数値で1)を置いて、出口(数値で3)までの行動をマクロで組みたいのですが、その際に右側のAN2:BQ31の範囲にある静的フロアフィールドを使いたいのです。人のいるセルから38列右のセルを中心に周囲8セルの数値をみて、最も小さい数値の場所を検出し、その検出されたセルの方向へ、人のセルを動かしたいです。B2のセルに人がいる時、AN2のセルを中心に周囲のセルの数値から最も小さい数値である、右下・真下のどちらかを検出して、B2のセルを右下・真下のどちらかの検出されたセルの方向へ移動させたいです。根本的にこのようなことが可能であるのか教えていただきたいです。もし可能であれば、どのようにマクロを組めば良いのか端的にでも教えていただけると助かります。拙い説明で申し訳ないですm(._.)mよろしくお願いします。###下か、右下か、というと結構下の方まで行ってしまうので100行くらいは必要かも、よくわからないが勝手な解釈で、Sub Macro1()Range("B2").SelectDim r As Range, rng1 As Range, rng2 As Range, flg As BooleanSet rng1 = Range("B2:AE100")Set rng2 = Range("AN2:BQ100")rng2.Value = "=randbetween(0,99)"rng2.Value = rng2.Valuerng1.Interior.Color = xlNoneCells(2, 2).Interior.Color = vbRedApplication.Wait [Now()] + 16 / 864000DoWith Application.FindFormat.Clear.Interior.Color = vbRedSet r = rng1.Find(What:="", SearchFormat:=True)End WithIf r.Row > 25 Then ActiveWindow.ScrollRow = 20If r.Column = 31 Then Exit Dor.Interior.Color = xlNoneIf r.Offset(1, 39) < r.Offset(1, 38) Then flg = TrueSelect Case flgCase Truer.Offset(1, 1).Interior.Color = vbRedflg = FalseApplication.Wait [Now()] + 4 / 864000Case Falser.Offset(1).Interior.Color = vbRedApplication.Wait [Now()] + 4 / 864000End SelectLoopEnd Subナイス1
###まじっすか?この間のちょこっと変えるだけじゃない。どこが分からないの?9セルループしてるところで2回試すのね。一回目はフロアフィールドで最小値を探すだけ2回目に進入可能かつフロアフィールドで最小値に合致するものを候補にするだけだよ。むしろこの間話してた、進行方向を固定する方が大事じゃないの?因みにイミディエイトウィンドウは使ってますか?実行中の値を見ないと理解は進まないよ。ナイス1

 

TAG