こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

IF関数の論理式が文字列??

他人が作成したエクセル関数式を理解したいのですが、どう調べたものか手の付け所がわからず、質問をさせて頂きます。
関数は以下の様なものです(<XXX_YYY_10000>の部分はデフォルメしていますが、
XXX,YYY,1000はそれぞれもともと文字列と数字です)。
=IF(OR(A1="",A1<XXX_YYY_10000-2),1,IF(AND(A1>XXX_YYY_10000-2,A1<XXX_YYY_10000),2,IF(A1>=XXX_YYY_10000,3,1)))

どなたか詳しいかた、この関数の動作について簡単で結構ですのでご教示頂けないでしょうか。
特に、論理式が<XXX_YYY_10000-2>の様に文字列と数字が混じっており、何を条件としているのか見当つかず躓いています。
すごく頓珍漢な質問をしている様な気もするのですが宜しくお願い致します。

投稿日時 - 2016-10-04 11:44:16

QNo.9238021

困ってます

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

>この関数の動作について簡単で結構ですのでご教示頂けないでしょうか。
3重の入れ子構造になっているIF関数の数式なので難しいことはありません。
内側から順に論理式をチェックすればどのような目的の処理なのか判断できるでしょう。

>特に、論理式が<XXX_YYY_10000-2>の様に文字列と数字が混じっており、何を条件としているのか見当つかず躓いています。
XXX_YYY_10000は特定のセルへ定義された名前でなければ論理式が成立しません。
Excelのバージョンが2007以降の場合は「数式」タブの「名前の管理」で定義されている名前を確認してください。

投稿日時 - 2016-10-04 13:00:32

お礼

皆様
早々にご回答頂きましてありがとうございます。
数名の方からご指摘ありましたとおり、セルへ定義された名前でした。
単なるエクセル機能を知らないだけの質問でした、お恥ずかしい限りです。
皆さん正しいアンサーを頂いたのですが、bunjii様のご回答には実際の確認方法の記載があり、実際に定義を確認することが出来たというところで、こちらをBAとさせて頂きます。ありがとうございました。

投稿日時 - 2016-10-04 13:40:36

ANo.5

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

 例えばExcelにおける半角大文字の"A"のコード番号は65ですね。
 同様に半角大文字の"B"のコード番号は66ですね。
 それでは次に適当なセルに次の様な関数を入力してみて下さい。

="A"<"B"

 すると関数の結果が「TRUE」(その式の関係が成り立つものである事を表す値)になる筈です。
 同様に

="A">="B"

という関数の結果は「FALSE」(その式の関係が成り立たないものである事を表す値)になる筈です。
 つまり、Excelでは"A"という文字列よりも"B"という文字列の方が大きな値と見做されている訳です。
 この様にExcelではコード番号が大きい文字の方が大きな値として扱われます。
 例えば"AAZZ"という文字列と"AB"という文字列では、左から1番目にある文字のコード番号は同じですが、2番めにある文字のコード番号は"AAZZ"の方が65であるのに対し、"AB"の方は66ですので、"AAZZ"よりも"AB"の方が大きな値として扱われます。
 尚、上記の話はあくまで一般的な目安であり、多少の例外は存在しています。
 例えば、Excelではアルファベットの大文字と小文字を同じ文字として扱っているため、半角大文字の"A"のコード番号が65で、半角小文字の"a"のコードが97であるにもかかわらず、

="A"="a"

の結果がTRUEとなり、

="A"<"a"



="A">"a"

はFALSEとなります。
 又、文字列データは数値よりも大きな値として扱われますから、例えば半角文字の"#"のコード番号は35で、半角文字の"1"のコード番号である49よりも小さな値ですが、

="#">1

の右辺の「1」は文字列データではなく数値データであるため、その判定結果はTRUEになります。
 一方、

="#">"1"

の場合は、両辺ともに文字列データであるため、"#"よりも"1"の方が大きな値と見做されるため、結果はFALSEとなります。

 御質問の件も、例えばA1セルに

XXY_YYY_10000

という文字列が入力されていた場合には、

A1<"XXX_YYY_10000-2"

の右辺にある"XXX_YYY_10000-2"と比べて、"XXY_YYY_10000"の3文字目の方が大きく、それよりも前の部分である"XX"の部分は等しいため、"XXX_YYY_10000-2"よりもA1セルに入力されている"XXY_YYY_10000"の方が大きな値と見做されるため、判定式の結果はFALSEとなるといった具合です。

投稿日時 - 2016-10-04 12:45:41

お礼

ご回答頂きまして、ありがとうございました。
凄く高度な内容をご回答頂いたのかと思いますが、力不足でまだご回答の
理解には至っていないです。スイマセン。。取り急ぎ御礼まで。

投稿日時 - 2016-10-04 14:06:01

ANo.3

「名前」じゃないでしょうか。

Excelでは、特定の範囲を何度も使う場合などに、セルの番号を毎回指定するのではなく、「名前」を付けて、式の中で使うことができます。

例えば、B1:C5を範囲指定して、右クリックから「名前の定義」を選択、名前として「テーブル1」と入力すると、その範囲に「テーブル1」と言う名前が付きます。
そうすると、例えば「=VLOOKUP(A1, テーブル1, 2, false)」などのように使えます。

名前が実際にどこの範囲なのか。
まあ範囲とも限りません、特定の1セルにだって、「名前」を付けられます。
普段、セル番号が表示されている欄が、実はドロップダウンリストになっていますので、その右の「▼」をクリックすれば名前一覧が出てきます。
そして実際に選択すれば、定義された範囲が表示されます。

投稿日時 - 2016-10-04 12:44:38

お礼

ご回答ありがとうございました。
私が質問させて頂いたケースは特定の1セルに名前をつけてあり、
なんでわざわざと思ったのですが、範囲でも定義できるとのこと、
この機能の”使いで”まで教えて頂き、恐縮です。

投稿日時 - 2016-10-04 13:53:45

ANo.2

前後がわからないので何とも言えませんが、
普通に考えれば
『XXX_YYY_10000』は、
そういう名前の変数じゃないですかね。
その変数からマイナス2しているということ。
前方かどこかで、変数を定義して値を代入してないですか?

投稿日時 - 2016-10-04 12:03:54

お礼

ご回答ありがとうございました。
普通どころかウンウン考えた(検索した)のですが、ダメでした。。

投稿日時 - 2016-10-04 13:48:11

ANo.1

こんにちは
ダブルクォーテーションで囲ってないのですか?
どこかのセルに付けた名前ではないのですか?
ただし、「XXX_YYY_10000」のようなアンダースコア、ハイフンが混じっていると
エラーになって名前定義出来ないと思いますけど。

投稿日時 - 2016-10-04 11:57:23

お礼

最速のご回答ありがとうございました。
シンプルな現状確認からの問題点の絞込み、唸りました。

投稿日時 - 2016-10-04 13:43:11

あなたにオススメの質問