プロが教える店舗&オフィスのセキュリティ対策術

エクセルのプログラムについて質問です


B列 の B2に「b1」、B3に「b2」、B4に「b3」 とします。
C列 の C2に「c1」、C3に「c2」、C4に「c3」 とします。
D列 の D2に「d1」、D3に「d2」、D4に「d3」 とします。

そして、b1=20 、 b2=17 、b3=21
また、 c1=22 、 c2=19 、c3=15
さらに、d1=20 、 d2=18 、d3=19

それらの条件で

「b列から1つ、c列から1つ、d列からランダムに1つずつを選び、その選び出された3つの文字の平均値を 19<x<21 の範囲で選び出す」

とします。

このとき「何通りの組み合わせがあるのか」、その「組み合わせ数」を出すことと、「具体的にどのような組み合わせがあるのか」、その組み合わせを表示したいです。(すべてを表示できるパターンと、例としてコンピューターがランダムに選んだ組み合わせ1つのパターン という2通りの表示の仕方で教えていただきたいです)


すごく、難しいことだと思いますが、お力を化していただけ無いでしょうか?

よろしくお願いいたします。

A 回答 (3件)

こんにちは。



 全ての組み合わせを表示する方をやってみました。
 下記の画像を参照してください。
 あとは、ヒントだけ。
  ●平均
   =SUM(E2:G2)/3
  ●判定
   =IF(AND(H2>19,H2<21),"O","X")

では。
「エクセルのプログラムについて質問です」の回答画像1
    • good
    • 0
この回答へのお礼

ありがとうございます。

でも、どーーーーーーーーーーしても、頑張ってみましたが、わかりません。。。。

その表示の方法を教えてくださいませんか????

お願いします。

お礼日時:2010/05/25 16:35

>3つの文字の平均値を 19<x<21 の範囲で選び出す



判りにくいようなら平均じゃなく総和で
57<3数の和<63
となる組み合わせを拾っていけば,見た目の数字だけで判断できて見通しも進むように思います。

例えばBが20なら残りは37<c+d<43
同様にBが17なら残りは40<c+d<46
同様にBが21なら残りは36<c+d<42であることですから
  
C+D Bが17 20 21 
15+18=33  × × ×
15+19=34  × × ×
15+20=35  × × ×
19+18=37  × × ○
19+19=38  × ○ ○
19+20=39  × ○ ○
22+18=40  × ○ ○
22+19=41  ○ ○ ○
22+20=42  ○ ○ ×  ○は12個

と言った具合ですね。



>コンピュータがランダムに選んだ1つ

こちらは何を意図しているのかイマイチ不明ですが,総当たりが一覧できてしまえば,その組合わせのリストからランダムに1行選んで終わりです。
一応出来ると言うことではソルバーなどで探索させる手も考えられますが,意味は無いと思われます。
    • good
    • 0

ブルーアタック(総当たり制)方式で、ダブリを排除するという方法です。




'//
Sub CombinationTest()
  Dim i As Long, j As Long
  Dim n As Long
  Dim Ar() As String
  Dim a As Double, b As Double, c As Double
  Dim av As Double
  Dim ret As Variant
  Dim rng As Range
  '範囲
  Set rng = Range("B2:D4")
  Application.ScreenUpdating = False
  With rng
  For i = 1 To 3
    For j = 1 To 3
      For k = 1 To 3
        a = .Cells(i, 1).Value: b = .Cells(j, 2).Value: c = .Cells(k, 3).Value
        buf = a & ";" & b & ";" & c
        On Error Resume Next
        ret = Application.Match(buf, Ar, 0)
        On Error GoTo 0
        
        If IsError(ret) Or IsEmpty(ret) Then
          av = (a + b + c) / 3
          If 19 < av And av < 21 Then
            ReDim Preserve Ar(n)
            Ar(n) = buf
            n = n + 1
          End If
        End If
      Next
    Next
  Next
  End With
  For i = LBound(Ar) To UBound(Ar)
    'F2 ~書き込み
    Cells(i + 2, 6).Resize(, 3).Value = Split(Ar(i), ";")
  Next
  Application.ScreenUpdating = True
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!