Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4187 / 13644 ツリー ←次へ | 前へ→

【57959】最小値を求め計算を繰り返す方法 yk 08/9/23(火) 18:28 質問[未読]
【57960】Re:最小値を求め計算を繰り返す方法 kanabun 08/9/23(火) 18:53 発言[未読]
【57972】Re:最小値を求め計算を繰り返す方法 yk 08/9/24(水) 17:28 回答[未読]
【57974】Re:最小値を求め計算を繰り返す方法 kanabun 08/9/24(水) 18:12 発言[未読]
【57981】Re:最小値を求め計算を繰り返す方法 yk 08/9/25(木) 16:24 お礼[未読]
【57968】Re:最小値を求め計算を繰り返す方法 ひげくま 08/9/24(水) 11:30 発言[未読]
【57973】Re:最小値を求め計算を繰り返す方法 yk 08/9/24(水) 17:35 回答[未読]
【57980】Re:最小値を求め計算を繰り返す方法 ハチ 08/9/25(木) 12:30 発言[未読]
【57982】Re:最小値を求め計算を繰り返す方法 yk 08/9/25(木) 16:37 回答[未読]
【57986】Re:最小値を求め計算を繰り返す方法 ハチ 08/9/25(木) 19:05 発言[未読]
【57987】Re:最小値を求め計算を繰り返す方法 yk 08/9/25(木) 20:29 回答[未読]

【57959】最小値を求め計算を繰り返す方法
質問  yk  - 08/9/23(火) 18:28 -

引用なし
パスワード
   質問です。

ある数値を行列20×20マスに入れたとして、スタート地点のマスを決めその周囲8マスで一番低い数値に+5する。+5した後に+5されたマスをスタート地点にし、再びその周囲8マスのなかで一番低い数値に+5をするということを一定回数繰り返したあと、その計算結果を表示したいのですが、全く方法がわかりません。
どなたか教えてくださいませんか?

【57960】Re:最小値を求め計算を繰り返す方法
発言  kanabun  - 08/9/23(火) 18:53 -

引用なし
パスワード
   ▼yk さん:

> 全く方法がわかりません。
>どなたか教えてくださいませんか?

まったく分からないのでは回答のしようがないですね。

以下は何をしているか分かりますか?

Sub Try1()
 Dim c As Range
 Dim cRound As Range
 Dim vMin As Long, cMin As Range
 
 Set c = [K7] 'スタート地点
 Set cRound = c.Offset(-1, -1).Range("A1:C1,A2,C2,A3:C3")
 cRound.Select 'その周囲8マス
 vMin = &HFFFFFFF
 For Each c In cRound
  If vMin > c.Value Then vMin = c.Value: Set cMin = c
 Next
 MsgBox cMin.Address(0, 0) '一番低い数値のあるセル
 
End Sub

【57968】Re:最小値を求め計算を繰り返す方法
発言  ひげくま  - 08/9/24(水) 11:30 -

引用なし
パスワード
   こんにちは。
いくつか解らないところがあるので、質問です。

周囲8マス、というのは、スタート地点を中心とする3×3のセル範囲の、スタート地点以外の8セル、ということで良いですか?

スタート地点が20×20のセル範囲の端のセルになった場合は、20×20と3×3の重なった部分だけを計算対象にするということで良いですか?

周囲8セルの中に、最小値のセルが複数あった場合は、どのセルを次のスタート地点にするのでしょうか?それとも、20×20の範囲内に同じ数値は存在しない、という前提でしょうか?

【57972】Re:最小値を求め計算を繰り返す方法
回答  yk  - 08/9/24(水) 17:28 -

引用なし
パスワード
   ▼kanabun さん:
>>
>まったく分からないのでは回答のしようがないですね。
>
>以下は何をしているか分かりますか?

お答えありがとうございます。
まだ勉強を始めたばっかということもあり、合っているかは自信がありませんが、「周囲8マスの最小値を求め、繰り返す」ということでしょうか?

【57973】Re:最小値を求め計算を繰り返す方法
回答  yk  - 08/9/24(水) 17:35 -

引用なし
パスワード
   ▼ひげくま さん:

ありがとうございます。質問の内容が曖昧で申し訳ありませんでした。以下の通りでよろしくお願いします。

>こんにちは。
>いくつか解らないところがあるので、質問です。
>

>周囲8マス、というのは、スタート地点を中心とする3×3のセル範囲の、スタート地点以外の8セル、ということで良いですか?
>
はい、良いです。

>スタート地点が20×20のセル範囲の端のセルになった場合は、20×20と3×3の重なった部分だけを計算対象にするということで良いですか?
>
はい、良いです。

>周囲8セルの中に、最小値のセルが複数あった場合は、どのセルを次のスタート地点にするのでしょうか?それとも、20×20の範囲内に同じ数値は存在しない、という前提でしょうか?
範囲内に同じ数は存在しないという前提でお願いします。

【57974】Re:最小値を求め計算を繰り返す方法
発言  kanabun  - 08/9/24(水) 18:12 -

引用なし
パスワード
   ▼yk さん:

>>以下は何をしているか分かりますか?
>
>お答えありがとうございます。
>まだ勉強を始めたばっかということもあり、合っているかは自信がありませんが、「周囲8マスの最小値を求め、繰り返す」ということでしょうか?

すこし違います。そのコードでは、まだ繰り返しはしていません。
指定のセル[K7]が 下図の □ とすると、

 Set c = [K7] '□ スタート地点
 Set cRound = c.Offset(-1, -1).Range("A1:C1,A2,C2,A3:C3")
 cRound.Select 'その周囲8マス

■■■
■□■
■■■

あとのコードは、この8つのセルを巡回して、最小値のあるセルを
求めています。

注目セルが 20×20のマスの縁っ子にあるときは
20×20のマスの範囲と cRoundとの Intersect する(重なる)範囲を
求めて、それらの限定されたセル範囲に対して、最小値のあるセルを
求めることになると思います。

【57980】Re:最小値を求め計算を繰り返す方法
発言  ハチ  - 08/9/25(木) 12:30 -

引用なし
パスワード
   ▼yk さん:
ロジックとしてはおもしろそうだなぁ と思って見てました。

>範囲内に同じ数は存在しないという前提でお願いします。

この前提なんですが、
処理を数回繰り返すと値が+5されていきますので、
初期値に同じ数が無かったとしても、
「同じ数になってしまう」ことはあるんじゃないですかね?

その場合は、なにを優先にするんですか?
・加算されていないセル とか(加算されたことを示すフラグが必要)
・中心に近いセル とか(中心が4セルあるので微妙)

Sampleで作られるようなデータに実行するイメージですか?

Sub Sample()
  Dim All_Rng As Range
  Dim Rng As Range
  Dim i As Long
  
  Set All_Rng = Range("B2").Resize(20, 20)
  All_Rng.RowHeight = 20
  All_Rng.ColumnWidth = 4
  All_Rng.Clear
  For Each Rng In All_Rng.Cells
    Do
      Randomize
      i = Int(Rnd * 400) + 1
    Loop Until WorksheetFunction.CountIf(All_Rng, i) = 0
    Rng.Value = i
  Next
  
  Set All_Rng = Nothing
End Sub

【57981】Re:最小値を求め計算を繰り返す方法
お礼  yk  - 08/9/25(木) 16:24 -

引用なし
パスワード
   ▼kanabun さん:
わざわざ丁寧にありがとうございました。実際に教えていただいたものでやってみたいと思います。

【57982】Re:最小値を求め計算を繰り返す方法
回答  yk  - 08/9/25(木) 16:37 -

引用なし
パスワード
   ▼ハチ さん:
>▼yk さん:
>この前提なんですが、
>処理を数回繰り返すと値が+5されていきますので、
>初期値に同じ数が無かったとしても、
>「同じ数になってしまう」ことはあるんじゃないですかね?
>
>その場合は、なにを優先にするんですか?
>・加算されていないセル とか(加算されたことを示すフラグが必要)
>・中心に近いセル とか(中心が4セルあるので微妙)
実際にそこまで深く考えず勝手な投稿をしてしまったと反省しております…。
繰り返したときに同じ数になってしまったときは加算されていない、もしくは加算された回数が少ないほうに加算していきたいと思っています。
それでも同じ数になってしまった場合は以下の優先順位で加算したいと思っています。(■はスタート地点)

8.7.6.
5.■4.
3.2.1.

このような条件だと複雑になり作ることは難しいですか?

【57986】Re:最小値を求め計算を繰り返す方法
発言  ハチ  - 08/9/25(木) 19:05 -

引用なし
パスワード
   ▼yk さん:
>繰り返したときに同じ数になってしまったときは加算されていない、もしくは加算された回数が少ないほうに加算していきたいと思っています。
>それでも同じ数になってしまった場合は以下の優先順位で加算したいと思っています。(■はスタート地点)
>
>8.7.6.
>5.■4.
>3.2.1.
>
>このような条件だと複雑になり作ることは難しいですか?

各セルに何回、加算されたのか? という情報を保持する必要がありますね。
20x20の配列を準備して値を保持して置くとか、セルのコメントを使うとか。

固定された決まりごとがあるなら、作ることは可能でしょうが、
難しいと感じるかは、ykさん次第だと思います。

優先順位は重要な要素ではないのなら、
Excelでループが回る法則に任せてしまうのも、良いと思います。

PS:
ところでこれは、なんのロジックなんですか?

【57987】Re:最小値を求め計算を繰り返す方法
回答  yk  - 08/9/25(木) 20:29 -

引用なし
パスワード
   ▼ハチ さん:
ありがとうごさいます。
わかりました。色々と試しながらやっていきたいと思います。
>PS:
>ところでこれは、なんのロジックなんですか?
数値は標高を代入し簡単な水の流れの解析をやろうと思っています。スタート地点から水を流し標高の高いところから低いところへと流れていくような…。

4187 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free