Excelです。この式をもう少しスマートに書けませんか…?


=IF(OR(C1="o",C1=1),IF(OR(B1="o",B1=1),IF(OR(A1="o",A1=1),1,2),IF(OR(A1="o",A1=1),3,4)),IF(OR(B1="o",B1=1),IF(OR(A1="o",A1=1),5,6),IF(OR(A1="o",A1=1),7,8)))

A1:C8に "o" か 1 か "x" が入っています。
それぞれの行ごとに、 o 1 x の組み合わせを見て D列に 1~8 の数字を表示させています。

ex) A1=o B1 =o C1=o → D1=1
ex) A1=o B1 =o C1=1 → D1=1

VBAやマクロは使わないで、すっきりまとめられないでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/06/21 22:13:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:dungeon-master No.1

回答回数571ベストアンサー獲得回数40

ポイント27pt

=IF(C1="x",4,0)+IF(B1="x",2,0)+IF(A1="x",1,0)+1

で、どうでしょう

id:panana

えっ。ウソ!なんで!?←正直な気持ち。

期待通りの結果になってます。

まったく思いつかなかった方法なので、あとで順を追ってみます。

ありがとうございました。

2006/06/21 20:49:26

その他の回答3件)

id:dungeon-master No.1

回答回数571ベストアンサー獲得回数40ここでベストアンサー

ポイント27pt

=IF(C1="x",4,0)+IF(B1="x",2,0)+IF(A1="x",1,0)+1

で、どうでしょう

id:panana

えっ。ウソ!なんで!?←正直な気持ち。

期待通りの結果になってます。

まったく思いつかなかった方法なので、あとで順を追ってみます。

ありがとうございました。

2006/06/21 20:49:26
id:tawazou No.2

回答回数33ベストアンサー獲得回数7

ポイント21pt

以下の式でも同じ結果が得られると思います。

=IF(OR(C1="o",C1=1),0,4)+IF(OR(B1="o",B1=1),1,3)+IF(OR(A1="o",A1=1),0,1)

id:panana

1番さんのもそうなんですが、条件によって返す数字を足していくんですね。

「条件によって返す数字」を見極めるられるのがすばらしいと思います…。

ありがとうございました。

2006/06/21 20:54:22
id:piring No.3

回答回数7ベストアンサー獲得回数0

ポイント21pt

【1】Sheet2に以下のデータを作成しておきます。

列A 列B

111 1

11o 1

1o1 1

1oo 1

o11 1

o1o 1

oo1 1

ooo 1

x11 2

x1o 2

xo1 2

xoo 2

1x1 3

1xo 3

ox1 3

oxo 3

xx1 4

xxo 4

11x 5

1ox 5

o1x 5

oox 5

x1x 6

xox 6

1xx 7

oxx 7

xxx 8

【2】セルD1に以下の数式を入力します。

=VLOOKUP(A1&B1&C1,Sheet2!$A$1:$B$27,2,FALSE)

id:panana

VLOOKUP関数!忘れてました。

(というか過去に挫折して封印してました。以降力技で…)

こういうときに使えるものなんですね。

希望通りの結果になりました。

この機にHELPと格闘してみます。

ありがとうございました。

2006/06/21 21:00:44
id:yoneto164 No.4

回答回数813ベストアンサー獲得回数94

ポイント21pt

=8-IF(OR(C1="o",C1=1),4,)-IF(OR(B1="o",B1=1),2,)-IF(OR(A1="o",A1=1),1,)

ではどうでしょうか。

id:panana

引き算していらっしゃる…。

ひとつの答えを出すのに、本当にいろいろな方法があるものですね!

ありがとうございました。

2006/06/21 21:03:26
  • id:gong1971
    あぁ...回答可能な時間に見ていたかった...
    一番シンプルなのは以下の数式。
    =(A1="x")+(B1="x")*2+(C1="x")*4+1

    マニアックに配列数式を使うと...
    =SUM((A1:C1="x")*2^(COLUMN(A1:C1)-1))+1
    ※数式を入力し[Ctrl]+[Shift]+[Enter]で確定する

    もういっちょマニアックに...
    =BIN2DEC(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C1&B1&A1,"1","0"),"o","0"),"x","1"))+1
    ※事前に[ツール]メニューから[アドイン]で[分析ツール]にチェックを入れる

    2番目なら列が増えても数式は範囲を変更するだけでOK。
    3番目はもし"o"と"1"が"0"で、"x"が"1"だったとしたら
    =BIN2DEC(C1&B1&A1)+1 でOK。

    あ、そっか、3番目を応用すると、これも有り。
    =8-BIN2DEC(SUBSTITUTE(SUBSTITUTE(C1&B1&A1,"o","1"),"x","0"))

    てな感じです。(2番目以降は複雑なので参考までに...)
  • id:panana
    gong1971さん、ありがとうございます。
    2つ目以降は何が起こってるのかすらわかりません(苦笑)
    1つ目もどこにもIFがないのにうまく行っているのが不思議です。
    ほんとにいろんな方法があるんですね。
    (だから他人が作ったファイルを修正すると気が狂いそうになるんです)

    ありがとうございました。

    --------------------------------------------

    数式は、質問一覧に表示される時に強制改行されないんですね。
    他の方に迷惑をかけてしまったかも…。
  • id:yoneto164
    最初の数式を見た時に、"x"とは任意の数字(35等)だと思ってしまい、「"o" か "1" か "x"」とは、「"o" か "1" か "それ以外"」だと勘違いしていました。"x" は任意の数字、 "n" は任意の整数だという思い込みがあるのですね。とても面白い体験をさせて頂きました。
  • id:panana
    >"x" は任意の数字、 "n" は任意の整数だという思い込みがあるのですね。
    なるほど…。そうですね(笑)
    最近、「○か×か」を判定する機会が多く、
    その都度入力モードを変えて「まる」「ばつ」と打つのが面倒なので、
    いつの間にかoとxで代用するようになりました(笑)
    0・1でもいいんですが、普通の人(?)が見て直感的に○×っぽいものがいいかと。

    今回は○の中でも◎があったので「◎は1でいいわっ!」となったのでした…。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません