OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

IF関数で複数の答えを用意するには??

  • すぐに回答を!
  • 質問No.122555
  • 閲覧数1118
  • ありがとう数5
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 32% (32/98)

こんにちは。ただ今EXCEL2000である表を作っています。
そこでAの条件であればA'を表示し、Bの条件であればB'、Cの条件であれば…
という風にIFに対する答えを幾通りも作りたいのです。
そしてその条件は16個もあるのですが1つのセルに収めるにはどうしたらよいでしょうか。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.6
レベル13

ベストアンサー率 68% (791/1163)

長くなるので例として、xで4通り、yで3通りを書いてみました。内容は無茶苦茶です。
If ・・・ Then ・・・ ElseIf ・・・ Else ・・・ End If と
Select Case  Case ・・・ Case ・・・  End Select を例示しています。

ユーザー定義関数の名前に使った『Hantei』に判定(処理)結果が入ります。
8×16通りでも長くなるだけで特に問題はないと思います。要は場合分けを完全に書くことでしょうか。

ツール→マクロ→Visual Basic Editor でVBE画面に移り、
挿入→標準モジュールで標準モジュールを挿入し、
 Public Function ユーザー定義関数名<自分で決めます>(引数1,引数2) のように書いていきます。
シートで使う時は、例では、=Hantei(-2,0) や =Hantei(A1,B1) 、 =Hantei(A1+A2,B1) のようにして使います。
詳しくはHelp等を参照して下さい。

Public Function Hantei(x As Double, y As Double) As Double
  Application.Volatile '自動再計算関数にする(作り手の選択です)
  If x < 0 Then
    Select Case True 'Case の次の判別式が成立すれば次を行う
      Case y < 0: Hantei = x + 101
      Case y = 0: Hantei = 10 * x + 102
      Case 0 < y: Hantei = 1000 * x + 103
    End Select
  ElseIf x = 0 Then
    Select Case True
      Case y < 0: Hantei = 201
      Case y = 0: Hantei = 202
      Case 0 < y: Hantei = 203
    End Select
  ElseIf 0 < x And x <= 1 Then
    Select Case True 'この場合はElseでも同じ
      Case y < 0: Hantei = x - y + 301
      Case y = 0: Hantei = 302
      Case Else: Hantei = x + 10 * y + 303
    End Select
  Else
    Select Case True
      Case y < 0: Hantei = x ^ 2 + y ^ 2 + 401
      Case y = 0: Hantei = 402
      Case Else: Hantei = x ^ 2 - y ^ 2 + 403
    End Select
  End If
End Function
お礼コメント
Sheep17

お礼率 32% (32/98)

ありがとうございました。
少し希望の光が見えてきた気がします。
今からこの例を参考に作ってみたいと思います。
何かまたありましたら補足に助けるかもしれませんが
よろしくお願いします。
投稿日時 - 2001-08-24 08:50:37
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1

複数作る場合は以下のように続ければ良いと思います。 =if(セル)=A,A',if(セル)=B,B'・・・・ 式が非常に長くなるのでLOOKUPの方が良いのではないでしょうか?
複数作る場合は以下のように続ければ良いと思います。
=if(セル)=A,A',if(セル)=B,B'・・・・
式が非常に長くなるのでLOOKUPの方が良いのではないでしょうか?

  • 回答No.2

IF(A,A',IF(B,B',IF(C,C',D'))) このようにIFの中にIFを入れ、その中にまたIFを入れる、こういうやり方をネストすると言い、しばしば使われる手法です。上の例は3つネストしていると言います。 ただし、ネストには限界が有るのですが、ヘルプで確かめられると思いますよ。
IF(A,A',IF(B,B',IF(C,C',D')))
このようにIFの中にIFを入れ、その中にまたIFを入れる、こういうやり方をネストすると言い、しばしば使われる手法です。上の例は3つネストしていると言います。
ただし、ネストには限界が有るのですが、ヘルプで確かめられると思いますよ。
  • 回答No.3
レベル9

ベストアンサー率 32% (34/105)

たしか関数のネストは8くらいだったと思う。 それに関数が長くて見づらくなるので、 自分でFunctionを作成して、それをセルで 使いましょう。 Function 多数分岐(値 As Variant)   Select Case (値)   Case 1     多数分岐 = "壱"   Case 2     多数分岐 = "弐"   Cas ...続きを読む
たしか関数のネストは8くらいだったと思う。
それに関数が長くて見づらくなるので、
自分でFunctionを作成して、それをセルで
使いましょう。

Function 多数分岐(値 As Variant)
  Select Case (値)
  Case 1
    多数分岐 = "壱"
  Case 2
    多数分岐 = "弐"
  Case 3
    多数分岐 = "参"
  Case Else
    多数分岐 = "あてはまらん"
  End Select
End Function

条件や値をメンテナンスする必要が
無いならこれが簡単。
  • 回答No.4
レベル13

ベストアンサー率 68% (791/1163)

Aの条件、Bの条件がどのような内容かで解決方法も色々ありそうです。 (1)連続数値が条件の場合   =Choose(・・・)や 対応テーブルを作って =Index(・・・)を利用 (2)ある範囲に含まれる時に対応する値を返す場合   対応テーブルを作って =VLookUp(・・・) を利用 (3)各条件が複雑な場合や複数の値を条件にする場合   これを1つのセルで行うにはユーザー定 ...続きを読む
Aの条件、Bの条件がどのような内容かで解決方法も色々ありそうです。

(1)連続数値が条件の場合
  =Choose(・・・)や 対応テーブルを作って =Index(・・・)を利用

(2)ある範囲に含まれる時に対応する値を返す場合
  対応テーブルを作って =VLookUp(・・・) を利用

(3)各条件が複雑な場合や複数の値を条件にする場合
  これを1つのセルで行うにはユーザー定義関数が考えられます。
 (3-1)場合分けが規則的に分岐していく場合
    If (条件A) Then
     If (条件A-1) Then  としたほうが分かりやすい場合もあります。

 (3-2)場合分けが値や連続的な場合
    Select Case 値
      Case 値1: 処理1
      Case 値2: 処理2
       :
   のように書けます。(1)のVBA版ですね

 (3-3)場合分けが複雑な場合
    当然、If ・・・ Then ・・・ Else ・・・ で書けます。(2)のVBA版。他に、

    Select Case True
      Case 条件1: 処理1
      Case 条件2: 処理2
       :
  のように書けます。Ifよりも分かりやすくなることが多いと思います。

(4)判定をする目的が区分分けして集計したりする目的の場合は、ピボットテーブルや集計機能、フィルタ機能を使えば簡単になる場合があります。

ご参考に。では。
補足コメント
Sheep17

お礼率 32% (32/98)

すみません。条件が不足していました。
条件は2つあってこれをAとBで表すと、Aには8通り、Bには16通りあるのです。
だからAかつBでその答えが8×16=128通りの答えを用意しなくてはなりません。
(その答えには数値も計算式もあります)
皆さんの言うようにIFのネストだと数が限られてくるので
ユーザー定義の関数を作るのが一番いいのでしょうが
これまで挑戦したことがないので不安があります。
日にちもあまりないのでうまく解決できるものか…。
知恵を貸してください。
投稿日時 - 2001-08-23 14:57:58
  • 回答No.5
レベル11

ベストアンサー率 37% (133/354)

回答じゃないんですが。 関数のネストは、7レベルまで、 引数は、30個までと決まっています。 それから、こういった、はっきりと、 「限度があってできそうもない」とわかっている場合には、 一つのセルに数式を納めよう、 と、考える方がそもそもまちがいだと思いますよ。 複数のセルを利用して、計算式作った方がいいとおもいます。 で、その複数のセルを利用して、 計算式を利用するように発想し ...続きを読む
回答じゃないんですが。
関数のネストは、7レベルまで、
引数は、30個までと決まっています。

それから、こういった、はっきりと、
「限度があってできそうもない」とわかっている場合には、
一つのセルに数式を納めよう、
と、考える方がそもそもまちがいだと思いますよ。

複数のセルを利用して、計算式作った方がいいとおもいます。
で、その複数のセルを利用して、
計算式を利用するように発想した方がいいです。

どうしても、一つのセルに納めようとするから、無理が生じます。
一つのセルに納めなければ、
計算式や、値をひっぱってくる方法は、いくらだってありますよね。
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ