選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

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

A 回答 (2件)

a)IIF関数で対応する場合:


 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。
0<[X]<=50
とはしないんですね。
またSwitch関数の活用方法についても勉強になりました。
大変ありがとうございました。

お礼日時:2012/04/17 12:34

はじめまして、こんにちは



IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")
この式で、何故「-1」になるかの説明をすると各判定を全て説明しなくてはならなくなるので
省略します。
Iifでやるとしたら
IIf((0<[X]) And ([X]<=50),"A",IIf((50<[X]) And ([X]<=100),"B",IIf((100<[X]) And ([X]<=150),"C","")))となります
しかし、クエリーのフィールドの部分に
長い式を入れるのは、見にくくなりますし編集もしにくいです。

そこで、モジュールを作成し、ユーザー定義関数を作成します。
ユーザー定義関数は自分で任意の結果を返す関数を作成することが出来ます。
たとえばモジュール名はUserFunctionModuleとし
その中にCOMPと言う関数を定義します
COMP関数の中身は以下のように定義します。

Function comp(X As Long) As String ’ユーザー定義関数宣言 X は数値型で宣言 COMPは文字型で宣言
comp = "" ’わかりやすく初期化
If (0 < X) And (X <= 50) Then
comp = "A" ’Aを返す
End If
If (50 < X) And (X <= 100) Then
comp = "B" ’Bを返す
End If
If (100 < X) And (X <= 150) Then
comp = "C" ’Cを返す
End If
  ’どの条件にも当てはまらない場合は、""を返します。
End Function

クエリーでは「Y:COMP(X)」で、呼び出して使用することが出来ます。

参考までに
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
また、モジュールの件も参考になります。
確かに、長くなるのは不便なので活用させていただきます。

大変助かりました!

お礼日時:2012/04/17 12:36

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

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

Q[色]+#,##0;[色]-#,##0;[色]0;@ と[<10]#.0;0 同時設定可能ですか?

よろしくお願いします
いつもgooの皆さんには大変お世話になっております
お陰様でエクセルが大分進歩しました
win8.1でエクセルは2013です

タイトルの通り、2つの書式は同時に設定できますか?
可能であればその書き方を教えていただけないでしょうか?
同時に設定したい書式は下記のとおりです

[色]+#,##0;[色]-#,##0;[色]0;@  と [<10]#.0;0 です

Aベストアンサー

こんばんは!

おそらくセルの書式設定のユーザ定義は最大3個までしか設定できなかったともいます。

ユーザー定義の欄に
[赤][<0]-#,##0;[青][<10]0.0;[青]#,##0;@
としてみてください。
① マイナスの場合のフォント色は「赤で3桁のカンマ区切り」
② プラスの場合で10未満の場合は「青で小数点以下一けた表示」
③ プラスで10以上の場合は「青で3桁のカンマ区切り」
その他(文字列)の場合は「自動」(黒)

以上のような表示になると思いますが、
「0」の場合の設定ができません。
「0」の場合の表示桁数は一桁でフォント色は「自動」がお望みなのではないでしょうか?
おそらく手動でのセルの書式設定のユーザー定義ではどれか一つを犠牲にする必要があるのではないかと思います。
(できる方法があればごめんなさいね。)

ただ、お望みの方法ではないかもしれませんが、
上記条件付き書式のセル変更があればマクロで書式を変えてやる方法があります。

マクロでやるとなるとわざわざセルの書式設定を手動でやる意味がないので
敢えて今回はこの程度で・・・m(_ _)m

こんばんは!

おそらくセルの書式設定のユーザ定義は最大3個までしか設定できなかったともいます。

ユーザー定義の欄に
[赤][<0]-#,##0;[青][<10]0.0;[青]#,##0;@
としてみてください。
① マイナスの場合のフォント色は「赤で3桁のカンマ区切り」
② プラスの場合で10未満の場合は「青で小数点以下一けた表示」
③ プラスで10以上の場合は「青で3桁のカンマ区切り」
その他(文字列)の場合は「自動」(黒)

以上のような表示になると思いますが、
「0」の場合の設定ができません。
「0」の場合の表示桁数は一...続きを読む

Q日付 =TEXT(C2,"m月d日(aaa)")が=TEXT([@月日],"m月d日(aaa)")

日付を文字列に変換するため
=TEXT(C2,"m月d日(aaa)
と入力していたものが
今見ると 
=TEXT([@月日],"m月d日(aaa)")
となっていました。
数式バーをクリックすると[@月日]は、
画像のように青くなっています。
なぜこうなるのですか

Aベストアンサー

テーブルの構造化参照になっているだけですね。

Excel2007以降 テーブル書式は基本中の基本の使い方なので必ず
勉強して使えるようになっておくべきだと思います。

QEXCELの表、組[A列]:番号[B列] を 組[A列]:番号[行]に変換する方法

EXCELに
A列に組、B列に番号がそれぞれ反映されている表があります。
これを
A列に組、同行に番号が横並びに配置された状態に変更したいと考えております(添付画像)。

D列にはA列の組名を「重複なし」で貼り付けます。
このとき、E列~K列にどのような数式を入力すればよろしいでしょうか?
E1に入力する数式を教えていただけるとありがたいです。
何卒よろしくお願いいたします。

Aベストアンサー

こんばんは!

画像の配置だとE1セルに
=IF($D1="","",IFERROR(INDEX($B$1:$B$1000,SMALL(IF($A$1:$A$1000=$D1,ROW($A$1:$A$1000)),COLUMN(A1))),""))

配列数式になりますので、Ctrl+Shift+Enterで確定!
この画面からコピー&ペーストする場合は
上記数式をドラッグ&コピー → E1セルを選択 → 数式バー内に貼り付け →そのまま(編集可能なまま)
Ctrl+Shiftキーを押しながらEnterキーで確定!
数式の前後に{ }マークが入り配列数式になります。

最後にE1セルのフィルハンドルで列・行方向にずぃ~~~!っとフィル&コピーします。

こんな感じではどうでしょうか?m(_ _)m

Q[VBA][Excel]クリップボードからフィールドを区切って貼り付けるマクロ

すでにクリップボードにあるテキストデータを、スペースを区切り文字(連続した区切り文字は1文字として扱う)として貼り付けるマクロが作りたいです。
どうか教えてください。

Aベストアンサー

こんなので、どうかな

'
'メモ帳の複数行をコピーする。
'
Sub クリップボードにあるテキストデータをスペースを区切り文字()
Dim objClip As Object
Dim pData As String


'クリップボードのセット
Set objClip = GetObject("New:1C3B4210-F441-11CE-B9EA-00AA006B1A69")
With objClip
.GetFromClipboard
pData = WorksheetFunction.Trim(.GetText)
pData = Replace(pData, " ", Chr(9))
Application.CutCopyMode = False
End With


Set objClip = GetObject("New:1C3B4210-F441-11CE-B9EA-00AA006B1A69")
With objClip
.SetText pData
.PutInClipboard
End With


Cells(1, "A").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub

こんなので、どうかな

'
'メモ帳の複数行をコピーする。
'
Sub クリップボードにあるテキストデータをスペースを区切り文字()
Dim objClip As Object
Dim pData As String


'クリップボードのセット
Set objClip = GetObject("New:1C3B4210-F441-11CE-B9EA-00AA006B1A69")
With objClip
.GetFromClipboard
pData = WorksheetFunction.Trim(.GetText)
pData = Replace(pData, " ", Chr(9))
Application.CutCopyMode = False
End With


Set obj...続きを読む

Q=IF(A1<10,TEXT(A1,"0.0"),A1) に<1の時を加えたい

よろしくお願いします。いつもお世話になっています
エクセルは2013です
下記の式1と式2を1つの式で表現したいのですが、どう書いたらいいでしょうか
なんか無理そうな気がしますが、方法があれば教えてください

式1
=IF(A1<10,TEXT(A1,"0.0"),A1)
式2
=IF(A1<1,TEXT(A1,"0.00"),A1)

Aベストアンサー

=IF(A1<1 ,TEXT(A1,"0.00") ,IF(A1<10 ,TEXT(A1,"0.0") ,A1) )

「1より小さい」の条件が成立していなければ、そのまま「10より小さい」の条件で比較。

Q"=LEFT(RC[-13],5)"を書き換えたい

よろしくお願いします

R1C1形式でマクロでセルに式を書き込んでいます
現状の式は "=LEFT(RC[-13],5)" です
これをA1形式で書き直すとき、RC[-13]が列Dで、行がTarget.Rowの時
"=LEFT(RC[-13],5)”  をどう書き換えたらいいでしょうか?

色々自分が思いつくもので書いてみましたがエラーで進みません
どなたか教えてください

Aベストアンサー

こんにちは。

#3の回答者です。
前回の内容を思い出しました。まだ、あの内容が続いているのですね。

Name1_Len =”5” の時
"=LEFT(D" & Target.Row & ",5)"
をどう書き直したらいいですか?

こうなります。

"=LEFT(D" & Target.Row & "," & Name1_Len &" )"

となります。

私個人としては、前回の内容を完全に理解しているわけではありません。どうしても、見えてこない部分があるので、隔靴掻痒の気持ちです。もしかしたら、こうではないか、ああではないか、と憶測を呼んでしまいます。

別の質問のようですが、私の理解の範囲でお答えしておきます。

>Range("AN" & Target.Row).FormulaR1C1 = "=IFERROR(RC[-10]/10000,"""")" を次のように書くにはどうしたらいいでしょうか?

Range("AN" & Target.Row).Formula = "=IFERROR(AN" & Target.Row /10000,"""")"

なお、通常、.FormulaR1C1 のプロパティを使うのではなく、.FormulaLocal か、.Formula にしてください。 (.FormulaLocal とは、ようするに、「日本語示」ということです。日付式などが該当します。)

>RC[-10]ではなくて、F列のTarget.Rowに置き換えたときは、式はどう書いたらいいでしょうか?

Range("AN" & Target.Row).Formula = "=IFERROR(F" & Target.Row /10000,"""")"

どうしても、R1C1型にしなければならない、マクロもありますが、今の段階では、出来る限り、数式はA1型にしたほうがよいでしょう。記録マクロは、あまりアテにしないほうが良いです。

>補足が出てこないのでお礼になってしまいます
余談ですが、もう一度、画面のレイアウトは変わるとは思います。私は、今、当面のこの表示に合わせて、表示用とログ収録のマクロを作り替えています。

こんにちは。

#3の回答者です。
前回の内容を思い出しました。まだ、あの内容が続いているのですね。

Name1_Len =”5” の時
"=LEFT(D" & Target.Row & ",5)"
をどう書き直したらいいですか?

こうなります。

"=LEFT(D" & Target.Row & "," & Name1_Len &" )"

となります。

私個人としては、前回の内容を完全に理解しているわけではありません。どうしても、見えてこない部分があるので、隔靴掻痒の気持ちです。もしかしたら、こうではないか、ああではないか、と憶測を呼んでしまいます。
...続きを読む

Qエクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1という

エクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1,3,1というような順番で数字が並んでいます。

その数字の中で、1→3と3→1になるものがいくつあるか求めたいのですが、出す関数・マクロがわかりません。
教えていただけないでしょうか?

よろしくお願いします。

Aベストアンサー

こんばんは!

>A列の中に
とは行方向に数値が入っている!というコトでしょうか?

そうであれば
表示したいセルに
=COUNTIFS(A1:A1000,1,A2:A1001,3)+COUNTIFS(A1:A1000,3,A2:A1001,1)
としてみてください。

「1」の次の行が「3」の場合と
「3」の次の行が「1」の場合をプラスしています。m(_ _)m

Q入力規則で =AND( , , , , )が狙ったようにいきません

よろしくお願いします。いつもgooの皆さんには大変お世話になっております
win8.1でエクセルは2013です

入力規則で質問させていただきます

セルN40に入力できる数値を1,2,3,41,42,43に制限したいので
整数→次の値に等しいで値をセルN40に
=AND(N40=1,N40=2,N40=3,N40=41,N40=42,N40=43)
と入力して、実際に上記の数値を入力してもすべてけられます
=AND(1,2,3,41,42,43)
と入力してもけられます

原因はどこにあるのでしょうか?
どなたか教えてください

Aベストアンサー

>整数→次の値に等しい
ではなく、
「データの入力規則」→「設定」タブの入力値の種類を「リスト」とし、「元の値」に「1,2,3,41,42,43」と入力するのでは?

Q=IF(Sheet1!MX9="", "",Sheet1!MX9) で表した結果に条件付き書式を

こんにちは、エクセル2010を使っています。

A1セル
=IF(Sheet1!MX9="", "",Sheet1!MX9) B1セル =IF(Sheet1!MY9="", "",Sheet1!MY9)
と数式が入っていて、結果が 29% 36% などとなって居ます。

このセルに、【30%以上の場合は】と条件を与えても動作するどころか空白まで全てに条件が適用されてしまいます。

これを通常通り条件付き書式を与えるにはどうしたら良いでしょうか。

詳しい方、よろしくお願いいたします。

Aベストアンサー

少し面倒ですが、現状のA1、B1の計算式を変えない方法として
条件付き書式をいじってみては?

A1を選択して 条件付き書式 → 新しいルール → 数式を使用して、書式設定するセルを決定 を選択
下部に表示されたテキストボックスに、
=VALUE(A1)>=0.3 (0.3は30%の意)
と入力、設定したい書式を選択して設定する

あとは、A1のセルをコピー、B1に書式のみ貼り付けでOK

Qg(x)=4eの-xの2乗で Excelで計算する場合どのようにすればいいですか、?XをA1にいれた

g(x)=4eの-xの2乗で
Excelで計算する場合どのようにすればいいですか、?XをA1にいれたとしま
す!Excelのしつもんです

Aベストアンサー

もう一つを見て、とは?
せめてこの質問の回答に対してはどうなのか、を書いて下さい。
新たな回答はURLを載せて下さい。
ちょっとマナーがないのでは、と思います。

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

このQ&Aを見た人はこんなQ&Aも見ています

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


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報