• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのプログラムについて質問です)

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

このQ&Aのポイント
  • エクセルのプログラムに関する質問です。B列、C列、D列からそれぞれ1つずつランダムに選び、その平均値が19~21の範囲になる組み合わせの数と具体的な組み合わせを求めたいです。
  • エクセルのプログラムについて質問です。B列、C列、D列から1つずつランダムに選び、その平均値が19~21の範囲になる組み合わせの数と具体的な組み合わせを教えてください。
  • エクセルのプログラムについての質問です。B列、C列、D列からランダムに1つずつ選び、その平均値が19~21の範囲になる組み合わせの数と具体的な組み合わせを知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.1

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

callaoff
質問者

お礼

ありがとうございます。 でも、どーーーーーーーーーーしても、頑張ってみましたが、わかりません。。。。 その表示の方法を教えてくださいませんか???? お願いします。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

>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行選んで終わりです。 一応出来ると言うことではソルバーなどで探索させる手も考えられますが,意味は無いと思われます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

ブルーアタック(総当たり制)方式で、ダブリを排除するという方法です。 '// 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