• ベストアンサー

[大至急]5つの数字のパターンは?

1,2,3,4,5 番のスイッチを見立てた数字があり、 これを以下のようなパターンで考えるとどの様な組み合わせ数になるのか? また、それを記述していただいたらうれしいです 1,-,-,-,- 1,2,-,-,- 1,2,3,-,- 1,2,3,4,- 1,2,3,4,5 ※必要ないパターン 2,3,1,4,5 2,-,3,5,- 順番が入れ替わる必要はありません つまり、 1だけがONの時にはこの処理を行う 1と3だけがONの時にはこの処理を行う などの様に、1~5個のスイッチ条件の組み合わせをプログラムで作りたいのです。 よろしくお願いします。

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

  • ベストアンサー
回答No.2

5ビットの2進数で考えましょう。 以下の32個の2進数の0と1を、各スイッチのオンオフに対応させましょう。 00000 00001 00010 00011 00100 00101 00110 00111 01000 01001 01010 01011 01100 01101 01110 01111 10000 10001 10010 10011 10100 10101 10110 10111 11000 11001 11010 11011 11100 11101 11110 11111

higozen
質問者

お礼

有難うございます。 Excelにて、置換してこの32個のパターンを活用させていただきます。

その他の回答 (2)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

>これをもとに、VBA形式でやってみます。 ビット演算で・・・VBAでならこんなかんじです。 Sub test() Dim inp As String Dim sw As Variant Dim mySw As Variant Dim anSw As Integer Dim msg As String 'ONにするスイッチを設定 inp = InputBox("ONとするスイッチNo1~5の番号をカンマ区切りで入力", "スイッチ設定", "1,3,5") If inp = "" Then Exit Sub sw = Split(inp, ",") For Each mySw In sw   anSw = anSw Or 1 * 2 ^ (CInt(mySw) - 1) Next '処理を記述 If anSw And 1 Then   msg = msg & "1番の処理" & vbCrLf End If If anSw And 2 Then   msg = msg & "2番の処理" & vbCrLf End If If anSw And 4 Then   msg = msg & "3番の処理" & vbCrLf End If If anSw And 8 Then   msg = msg & "4番の処理" & vbCrLf End If If anSw And 16 Then   msg = msg & "5番の処理" & vbCrLf End If '処理結果を表示 MsgBox msg & "以上の処理が実行されました" End Sub

higozen
質問者

お礼

有難うございます。 今回の場合は、スイッチ番号が確定した後に、更にそのスイッチに該当するセルの条件値とあっている場合に処理を行う様にしたかったのです。。。 上記を参考にSelect Case を利用して、32分類して目的を達成する事が出来ました。

  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.1

5ビットの整数の値を条件として、条件分を組み立てればよいです。 5ビットの整数: 00000B ~ 11111B の32通りです。(後ろにBがついているのは、二進数の意味です。) 5ビットの整数は下記の様な意味になります。 例えば、 0 (00000B) 全部がOFF 7 (00111B)  3~5番がON 10 (01010B) 2番と4番がON 31 (1111B) 全部がON 全部の組み合わせに対してそれぞれ別の処理が必要なら、0~31に対して、それぞれ処理を割り当てます。 Cの構文のswitch文なら、下記の様な形になります。  unsigned char s;    (s の入力処理)  switch( s & h1f ) {    case 0:       (処理)       break;     case 1:       (処理)       break;     (中略  必要なら0~31まですべてに対してcase文を書く)     default:       break;   } ご参考に。

higozen
質問者

お礼

有難うございます。 これをもとに、VBA形式でやってみます。

関連するQ&A