• ベストアンサー
  • 困ってます

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>の様に文字列と数字が混じっており、何を条件としているのか見当つかず躓いています。 すごく頓珍漢な質問をしている様な気もするのですが宜しくお願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数5
  • 閲覧数532
  • ありがとう数6

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

  • ベストアンサー
  • 回答No.5
  • bunjii
  • ベストアンサー率43% (3538/8139)

>この関数の動作について簡単で結構ですのでご教示頂けないでしょうか。 3重の入れ子構造になっているIF関数の数式なので難しいことはありません。 内側から順に論理式をチェックすればどのような目的の処理なのか判断できるでしょう。 >特に、論理式が<XXX_YYY_10000-2>の様に文字列と数字が混じっており、何を条件としているのか見当つかず躓いています。 XXX_YYY_10000は特定のセルへ定義された名前でなければ論理式が成立しません。 Excelのバージョンが2007以降の場合は「数式」タブの「名前の管理」で定義されている名前を確認してください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • 【Excel】IF関数の論理式

    FX(外国為替証拠金取引)で、今はExcelでpips計算をしているのですが、毎回下記の計算を手作業で行っています。 ただ、いちいち手作業で計算するのも面倒なので、関数を使って効率化を図りたいと思っています。 ------ 「もしA1セルが"X"の場合は"B1セル-C1セル"、もしA1セルが"Y"の場合は"C1セル-B1セル"」 「もしA1セルの文字列の最後の3文字が"XXX"の場合"B1セル*100"、もしA1セルの文字列の最後の3文字が"YYY"の場合"B1セル*10000"」 ------ 複雑すぎて、私には論理式がわからなかったのですが、これを関数にしていただければ大変助かります。 ※勝手にIF関数だろうなあ、と思っているのですが、他の関数でも計算が可能であれば、何でもかまいません。 お手隙の際に、どうぞよろしくお願いいたします。 ※ちなみに、今はやりの入学試験や資格試験の問題ではありませんので(笑)

  • セル内の文字列の分割はsearch関数やleft関数を使わずにできないのでしょうか?

    エクセルのA列に桁数が不規則な任意の数字が並んでいて、それぞれの数字には単位を表す"g"か"g/k"がついています。 B列にA列の数字を移し変えたいのですが、その際に、"g"がついているものはそのまま、"g/k"がついているものには70を掛けた後に"g"をくっつけて表記したいです。そこでB1セルに下記のような関数を使いました。 =IF(RIGHT(A1,1)="g",A1,LEFT(A1,SEARCH("g",A1,1)-1)*70&"g") のですが、すごくダラダラしてて長いように感じます。もっと簡単に同様の操作をできないのでしょうか?例えば、文字列と文字列をくっつけるのに&を使うだけですんでしまうように、-を使ったら文字が引き離せるとか、そんな便利な機能はないでしょうか? 過去の質問を検索したところ、search関数とleft関数を用いた回答が一件ヒットしただけで他に見当たらなかったので質問しました。よろしくお願いします。

  • エクセルの文字列をif関数で除きたいのですが。

    質問です。 エクセルのif関数で、 =IF(H5=0,"",IF(H5="","","非"))と入力し、 ブランクとゼロの数字が入っている場合以外に 「非」と表示させています。 ですが当然ながら対象となるH5が文字列の場合も同様に「非」と 表示されてしまいます。 これを回避したい、できれば表示させたくないのですが、 どなたか良い関数をご存知でしたらお教え下さい。 よろしくお願い致します。

その他の回答 (4)

  • 回答No.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となるといった具合です。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.3
  • asciiz
  • ベストアンサー率72% (4838/6700)

「名前」じゃないでしょうか。 Excelでは、特定の範囲を何度も使う場合などに、セルの番号を毎回指定するのではなく、「名前」を付けて、式の中で使うことができます。 例えば、B1:C5を範囲指定して、右クリックから「名前の定義」を選択、名前として「テーブル1」と入力すると、その範囲に「テーブル1」と言う名前が付きます。 そうすると、例えば「=VLOOKUP(A1, テーブル1, 2, false)」などのように使えます。 名前が実際にどこの範囲なのか。 まあ範囲とも限りません、特定の1セルにだって、「名前」を付けられます。 普段、セル番号が表示されている欄が、実はドロップダウンリストになっていますので、その右の「▼」をクリックすれば名前一覧が出てきます。 そして実際に選択すれば、定義された範囲が表示されます。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.2
  • szk9998
  • ベストアンサー率45% (962/2095)

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • 文字列から時間を取り出しif関数で大小を決めたい

    こんにちわ。エクセル2003での質問です。 1列目に1&#65374;31日の休憩時間、 2列目に1列目の時間が45分以上経過の場合に×、未満の場合に○を表示させるif関数を作る予定です。 この休憩時間についてですが、別のシートからvlookup関数で呼び出しており、 これが文字列扱いになるため単純に「45分」以上かどうかが作れません。 休憩時間は「:30:30」というふうなエクセルとしては計算できない文字列で表示され、しかも時間、分、秒まで表示されます。 なんとかして「:30:30」というような文字列から、数字(分)を取り出し、大小の比較に使えるようなものに変換できないでしょうか。 なお検索サイトで調べてみましたが、「時刻」のことは載っているのですが今回のような「時間」に関してはうまく見つかりませんでした。エクセルでは自国も時間も同じ考え方なのでしょうか。 変換できる場合は、if関数で使えるように45分がなんという数字に変わるのか、セルの書式はどのようにすればいいのかも、あわせて教えていただけますでしょうか。 45分以外に60分の場合もあわせてお願いします。

  • 文字列を含んだIF関数

    IF関数についての質問です 現在以下のような関数を入れています。 A1とは受注数量です。 A1が100個以下の場合A1×300円 A1が100個以上の場合A1×200円     ↓ =A1*IF(A1>=100,200,300) つまり、受注数量によって金額が変わるというものなのですが B1に顧客名を入れて、B1が○○様だった場合100円で売るという 文字を含んだIF関数も足したいのです。 方法がありましたら教えて頂けませんでしょうか。 お願い致します。

  • ワードの置換で、文字列の前後に文字を追加

    ワードの置換について教えてください。 http://xxx/yyy/zzz という文字列があった場合、これを ABC-http://xxx/yyy/zzz-001 というように前後に文字列を追加したい場合はどうすれがいいのでしょうか? よろしくお願いします。

  • =IF(COUNTIFの文字列の複数条件

    A列にある契約先にある特定の文字列が含まれていた場合、B列に1か2の値を返したいです。 A列に契約先 (株)○○、(有)○○、(同)○○、(独)○○、(財)○○、○○大学、(同)○○ B列に契約先の種類を1と2で区別して、1か2の値を返したいです。 調べた結果、IF COUNTIFだと文字列の条件は一つに限るとの事で、文字列を複数にしたい場合どのような数式で値が返せますでしょうか。 下記のような数式ではだめでした。 =IF(COUNTIF(A1,"*(株)*",A1,"*(有)*",A1,"(同)"),"1","2") ちなみにCOUNTIFSというのもだめでした。 ほかにIF関数で文字列の複数条件で1か2を返せる数式がありましたら教えてください。 よろしくお願い致します。

  • 文字列の置換について

    MySQLデータベース内の文字列を、別の文字列に書き換えたいんです。 例えば、文字列"http://www.xxx.com" を文字列"http://www.yyy.com"に書き換えます。 SQL文で操作して、一気にデータベースの各テーブルに入った大量の文字列を全部置換させたいんです、そのSQL文どういうふうに書きますか? ご存じの方がいっらしゃいましたら、どうぞお教え下さい。

    • ベストアンサー
    • MySQL
  • Excel2000のセル内の文字列の数字の先の2桁を取り出す方法について

    年のいった初心者です。 以前の質問に対する回答有難うございます。また、教えてください。  エクセル2000です。セル内に数字の文字列で、4桁、6桁、8桁のものが有ります。4桁のものには"01"を、6桁のものには"60"を、表示し、8桁のものには数種類あり、8桁の場合は、各文字列で上位の2桁を表示したいのです。 =IF(LEN(A1)=4,"01",IF(LEN(A1)=6,"60",IF(LEN(A1)=8,?????? 4桁、6桁については以前に教えていただいた、関数等でいけたのですが、8桁のときが分かりません。困っています。お願いします。     A列    B列 1 7532 →→ 01 2 280573 →→ 60 3 34964821 →→ 34 4 06839775 →→ 06 5 67500023 →→ 67

  • 文字列と数字を含むセルから数値のみをとりだす関数と、文字列のみを取り出す関数があれば両方教えてください!

    (Excel 2003 ) 文字列と数字を含むセルから数値のみをとりだす関数と、文字列のみを取り出す関数があれば両方教えてください!

  • EXCEL関数 文字列の一部の数字文字を数値化して計算につかいたい

    EXCEL関数について質問です。 あるセルの文字列に記載されている一部の数字文字を 数値化して計算につかいたいと思っています。 <例>  あるセルの文字列(A1)⇒あいうえお12345番目の方  出力したい数字文字⇒12345 知る限りの関数を使って以下の関数式を作ってみました。 (1) MID関数を使う  最初の文字「あいうえお」は10バイトなので開始は「11」としました。 (2)後に登録されている「番目の方」を除きたいので  SEARCHB関数を使って、「番目」の開始バイトを見つけ  そこから最初の文字バイト「11」を引き、抽出するバイトを求める。 (3)抽出した文字列を数値に変換するVALUE関数を使う。 次の関数式を作ってみました。   =VALUE(MIDB(A1,11,SEARCHB("番目",A1,1)-11)) でも結果は「」となります。 何がいけないのかわかりません。エラーの原因がわかれば教えて下さい。 ほかによい方法があれば教えてください。 よろしくお願いします。  

  • Excel 文字列にする関数

    エクセルが苦手なので教えてください! 選別番号で6桁の数字を使っているんですが、頭の数字が0から 始まるものがあり、セルに入力するとその選別番号だけ5桁に なってしまいます。 文字列にすればいいということだけはわかっているのですが、 すでに数字が入っている列に対して、関数を使って以下のような ことはできますか? (1)選別番号が5桁だったら、頭に0をつけて6桁にする、  かつ文字列にする (2)選別番号がすでに6桁だったら、そのまま文字列に変換 宜しくお願いします!

  • エクセルの「IF」の結果の文字列を下つき文字にしたい

    教えてほしいのですが、エクセルでIF関数を用いて、 条件によって表示文字列を変えるところまではできたのですが、その文字列が一部下つき文字の場合にはどのようにすればいいのでしょうか?