こんにちは。ただ今EXCEL2000である表を作っています。
そこでAの条件であればA'を表示し、Bの条件であればB'、Cの条件であれば…
という風にIFに対する答えを幾通りも作りたいのです。
そしてその条件は16個もあるのですが1つのセルに収めるにはどうしたらよいでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

長くなるので例として、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
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/08/24 08:50

回答じゃないんですが。


関数のネストは、7レベルまで、
引数は、30個までと決まっています。

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

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

どうしても、一つのセルに納めようとするから、無理が生じます。
一つのセルに納めなければ、
計算式や、値をひっぱってくる方法は、いくらだってありますよね。
    • good
    • 0

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

ご参考に。では。

この回答への補足

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

補足日時:2001/08/23 14:57
    • good
    • 0

たしか関数のネストは8くらいだったと思う。


それに関数が長くて見づらくなるので、
自分でFunctionを作成して、それをセルで
使いましょう。

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

条件や値をメンテナンスする必要が
無いならこれが簡単。
    • good
    • 0

IF(A,A',IF(B,B',IF(C,C',D')))


このようにIFの中にIFを入れ、その中にまたIFを入れる、こういうやり方をネストすると言い、しばしば使われる手法です。上の例は3つネストしていると言います。
ただし、ネストには限界が有るのですが、ヘルプで確かめられると思いますよ。
    • good
    • 0

複数作る場合は以下のように続ければ良いと思います。


=if(セル)=A,A',if(セル)=B,B'・・・・
式が非常に長くなるのでLOOKUPの方が良いのではないでしょうか?
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q《Excel》◯(20通りの言葉)かつ×(13通りの数字)の条件の時の言葉を表示させる方法

画像のシートを「シート1」とします。
これとは別の「シート2」の、例えばA1セルに「赤1」、B1セルに「 11」を入力したら、
C1セルに、次の値を返してくれる式を書きたいです。

値の求め方は、シート1のA列を「赤1」で検索、さらにシート1の1行目を「 11 」で検索し、
交わったセルの値とします。

シート1の1行目は、ひとつのセル中に複数の数字が設定されていますが、具体的には、
B1セルに、”1,6,11" といった具合です。この中のいずれかに該当した場合、その列を採用することになります。

表1のA列に入っている言葉は(20通り)
表1の1行目に入っている数字は(13通り)で
そこから表示させたい言葉は(20通り)あり、A列の言葉のいずれかと同じになります。
(赤1、白1などと入っていますが、実際は赤や白に続く数字の部分は他の言葉になります)


Excel初心者で理解力に乏しいのですが、そんな私でもわかるようなものがありましたら、教えて頂けるとありがたいです。
どうぞ宜しくお願い致します。

Aベストアンサー

今度はわかりました。

Sheet2のC1の式は
=INDEX(Sheet1!$B$2:$F$21,MATCH(A1,Sheet1!$A$2:$A$21,0),MATCH("*"&B1&"*",Sheet1!$B$1:$F$1,0))

初心者さんにはINDEXとMATCH関数は最初わかりにくいかもしれませんが
この質問を解決するにはこの関数が一番適切なので、頑張って勉強して下さい。

関数の参考サイトです。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/index_function.htm

QエクセルでA4横サイズより大きく作った表を、A4横サイズにきれいに収める倍率設定は?

こんにちは、みなさん!!


【質問】エクセルでA4横サイズより大きく作った表を、A4横サイ
    ズの紙にきれいに収めるにはどうすれば良いでしょうか?倍
    率や縦:横の比率が関係あると思うのですが、うまくおさま    りません。

ご存知の方いらっしゃいましたらよろしくお願いします。

Aベストアンサー

ファイル
ページ設定
拡大縮小印刷で
次ぎのページ数にあわせて印刷
横1x縦1
に設定する。
ーー
印刷の向きについて
現状が横長になるか、縦長になるか予想して
縦長の場合ー>縦
横長の場合ー>横
用紙を使うほうが、少しでも字が大きくなって見やすい。
横の場合は、用紙はプリンタで
       |    
       |
       V
の方向に流れる
にたいし、印刷した文字方向は
 右
 ↑
上|下
 |
 左
になるから。

QIF関数の条件に関数を指定

Excelに関する質問です。
ちょっと分かりづらいのですが、例えばセルA1とB1があるとします。
A1には別シートのセルが参照されています。(「="あ!A1"」など)

ここで、B1にはIF関数を入れたいのですが、その時A1の関数式内の文字を条件にしたいのですが、そういうことはできますか?

つまり、B1にIF関数で「A1セル内の関数式内に"あ"の文字がある時に"い"と表示する」のようにしたいのです。

普通に「=IF(A1="あ","◯","")」ではできません。

Google先生でも調べてみたのですが、分かりませんでした。

お知恵をいただければ幸いです。

Aベストアンサー

EXCEL2013であれば、

B1に
=IFERROR(IF(FIND("あ",FORMULATEXT(A1)),"○",),"")

でできます。

QExcel マクロ for~nextとif文の条件設定

画像の表でご説明させて頂きます。
B列の上から順番に見ていきます。
aaaaを含む商品をキーで検索。
次の行でbbbbを含む商品の場合、D列の日付が新しい行にフラグを1を入れます。
※日付は降順に並んでいるとします。

aaaaを含む商品の日付は空欄です。
この時、数量が同じであることが条件です。
数量が異なる場合は「確認」とフラグに入れます。
日付が「2016/5/1以降」は0を入れます。

aaaaとbbbbの行が常に同時にフラグが入ります。

画像は完成した表です。
関数では難しいと思いますので、どのようなマクロであれば
実現できるのかお教えください。

Aベストアンサー

データが例のように並んでいる前提での一例です。

Sub Sample()
Dim rr As Long
Application.ScreenUpdating = False
For rr = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If InStr(Range("B" & rr).Value, "aaaa") > 0 Then
If Range("C" & rr).Value <> Range("C" & rr + 1) Then
Range("E" & rr).Value = "確認"
Range("E" & rr + 1).Value = "確認"
ElseIf Range("D" & rr + 1).Value >= DateSerial(2016, 5, 1) Then
Range("E" & rr).Value = 0
Range("E" & rr + 1).Value = 0
Else
Range("E" & rr).Value = 1
Range("E" & rr + 1).Value = 1
End If
End If
Next rr
Application.ScreenUpdating = True
End Sub

データが例のように並んでいる前提での一例です。

Sub Sample()
Dim rr As Long
Application.ScreenUpdating = False
For rr = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If InStr(Range("B" & rr).Value, "aaaa") > 0 Then
If Range("C" & rr).Value <> Range("C" & rr + 1) Then
Range("E" & rr).Value = "確認"
Range("E" & rr + 1).Value = "確認"
ElseIf Range("D" & rr + 1).Value >= DateSerial(2016, 5, 1) Then
Range("E" & rr).Value = 0
Range("E" & rr + 1).Value = 0
Else
Range("E" & rr).Value = ...続きを読む

QエクセルのIF文で10個の条件を指定できるのですか

単純な質問かもしれませんがよろしくお願いします。
エクセルのIF文でセルの値が1ならA、2ならB、・・・10ならJと表示せよというように10個の条件を指定した式を作ることができるのでしょうか。

Aベストアンサー

こんにちは
IF文ではできないそうですが・・・どっちにしても10層のネストなんてめんどくさくてやってられません。
こういうときには「VLOOKUP」関数を使ってみたらどうでしょうか?
例↓
あらかじめA列とB列に条件のリストを作っておいて、

A B
1 A
2 B
3 C
4 D
5 E

D列に任意の数字(リストにある数字のみ)を入力します。

D E
5 =VLOOKUP(D1,$A$1:$B$4,2,0)
3 ↓コピー
2
4
1
2

E1セルに「=VLOOKUP(D1,$A$1:$B$4,2,0)」と数式を入れて下方向にコピーすればご希望と同じ結果が得られると思います。

理屈を知りたいときは、Excelのヘルプで参照してみてください。


このカテゴリの人気Q&Aランキング

おすすめ情報