『7種類の文字列を切り取り、置換える方法』(PAKAPAKA) [7種類の文字列を切り取り、切り取った文字列をそれぞれ指定した文字列に置換える方法] はじめましてPAKAPAKAと申します 早速質問なのですがSheet2に E 31 エルムS(G3) 32 マリーンS(オープン) 33 大沼S(オープン) 34 麦秋S(1600万下) 35 鎌ヶ谷特別(1000万下) というデータがあります そのデータをSheet1に A      B 1 エルムS   GV 2 マリーンS  OP 3 大沼S    OP 4 麦秋S    1600 5 鎌ヶ谷特別  1000 といった感じで表示したいのですが どのような関数を使えば良いのでしょうか? 7種類というのは (G1)→GT (G2)→GU (G3)→GV (オープン)→OP (1600万下)→1600 (1000万下)→1000 (500万下)→500 です。どうか皆様のお知恵をお貸しください Excel2002、WindowsXP ---- Sheet1 A B C D E 1 エルムS GV (G1) GT 2 マリーンS OP (G2) GU 3 大沼S OP (G3) GV 4 麦秋S 1600 (オープン) OP 5 鎌ヶ谷特別 1000 (1600万下) 1600 (1000万下) 1000 (500万下) 500 D列とE列に対応表を作っておいて、 A1セル =LEFT(Sheet2!E31,FIND("(",Sheet2!E31,1)-1) B1セル =VLOOKUP(RIGHT(Sheet2!E31,LEN(Sheet2!E31)-FIND("(",Sheet2!E31,1)+1),$D$1:$E$7,2,FALSE) A2、B2セル以下コピーしてください。 これで良いのかな(^_^A; (川野鮎太郎) ---- 出来ました。参照セルが空白の場合に何も表示しないようにするには A1セル =IF(ISBLANK(Sheet2!E31),"",LEFT((Sheet2!E31),FIND("(",Sheet2!E31,1)-1)) B1セル =IF(ISBLANK(Sheet2!E31),"",VLOOKUP(RIGHT(Sheet2!E31,LEN(Sheet2!E31)-FIND("(",Sheet2!E31,1)+1),D1:E7,2,FALSE)) であっているでしょうか?(なにか変なことして無いかな・・・) (PAKAPAKA) ---- 上記の式で参照セルが空白の場合には対応できるのですが 括弧を含まない文字列を参照した場合エラーになってしまいます・・・ ですので A1セル・・・参照セルが括弧を含む文字列なら「(」以降を切り取り、      括弧を含まない文字列ならそのまま文字列を表示      空白ならそのまま空白を返す関数 B1セル・・・参照セルが括弧を含む文字列なら「(」以降を指定した文字列に変換、      括弧を含まない文字列or空白なら空白を返す関数 が必要なのですがこのような関数は可能なのでしょうか? 今一度お知恵をお貸しください (PAKAPAKA) ---- 川野鮎太郎さんが、ご多忙の様なので、代わりに。 FIND関数は、検索文字列が存在しない場合エラー値#VALUE!を返します。 その部分を回避する方法として IF(ISERROR(FIND(****)),ISERROR()に対するTRUEの式,ISERROR()に対するFALSEの式) または、FIND関数は数値を返しますから、 IF(ISNUMBER(FIND(****)),ISNUMBER()に対するTRUEの式,ISNUMBER()に対するFALSEの式) を組み込めば、お求めの式が出来ます。 ヒントだけですが、PAKAPAKAさんならば、後は、ご自分で対処できますね。。。 追記: >括弧を含まない文字列or空白なら空白を返す関数 一回で難しいようでしたら、IF(ISBLANK(Sheet2!E31),"",IF(ISNUMBER(***** の様にIF関数をネストしてはいかがでしょうか?  (sin) ---- sinさん、フォローありがとうございます。m(._.)m ペコッ なかなか忙しくて・・・・・・って、本当はわからなかったりして♪〜〜( ̄ε ̄;) (川野鮎太郎) ---- 配列数式ですが、このようなものは、どうでしょう?                 (LOOKUP) D1:D2に下のように変換表を配置しまして、 A1に=LEFT(Sheet2!E31,MIN(FIND({"(","("},Sheet2!E31&"(("))-1)、 B1に =IF(COUNT(MATCH("*"&D$1:D$7&"*",Sheet2!E31,)), LOOKUP(1,(MATCH("*"&D$1:D$7&"*",Sheet2!E31,)),E$1:E$7),"") として、Ctrl+Shift+Enter。これらを下にフィルドラッグします。  A      B  C  D    E 1 エルムS  GV   G1    GT 2 マリーンS OP   G2    GU 3 大沼S   OP   G3    GV 4 麦秋S   1600   オープン OP 5 鎌ヶ谷特別 1000   1600万下 1600 6            1000万下 1000 7            500万下  500         ↑       {=IF(COUNT(MATCH("*"&D$1:D$7&"*",Sheet2!E31,)),       LOOKUP(1,(MATCH("*"&D$1:D$7&"*",Sheet2!E31,)),E$1:E$7),"")}    ↑   =LEFT(Sheet2!E31,MIN(FIND({"(","("},Sheet2!E31&"(("))-1) ---- すみません。 B1は、こちらの数式にさせてください。                 (LOOKUP) =IF(COUNT(MATCH("*"&D$1:D$7&"*",Sheet2!E31,)), INDEX(E$1:E$7,MATCH(1,MATCH("*"&D$1:D$7&"*",Sheet2!E31,),)),"") として、Ctrl+Shift+Enter。これらを下にフィルドラッグします。 ---- sinさん、川野さん、LOOKUPありがとうございます。 LOOKUPさんの数式で問題解決いたしました。 ただ自分ではどうしてこの式でこの結果が得られるのかまるで理解できません(泣 エクセルで関数を3日前から使い始めたのですが、分からないことだらけです やっぱりしっかり理解した方が応用も利きますよね・・・ 今回は本当にどうもありがとうございます。 追伸 お暇なときで結構ですので、もしよろしかったら上記の式の解説をして頂けたら嬉しいです。 (PAKAPAKA) ---- >上記の式の解説をして頂けたら ということですので、簡単に説明させていただきます。 =LEFT(Sheet2!E31,MIN(FIND({"(","("},Sheet2!E31&"(("))-1)の FIND({"(","("},Sheet2!E31&"((")は、 Sheet2!E31にエラー避けるために後ろに半角(と全角(をつけた文字列の中を (と(が左から何桁目にあるか探しています。配列にそれぞれの数を戻します。 MIN(配列)-1は、配列のうち小さい方から1マイナスした桁数を戻します。 =LEFT(Sheet2!E31,桁数)で、該当文字列のうち最初にある左括弧から左の部分だけ取り出します。 =IF(COUNT(MATCH("*"&D$1:D$7&"*",Sheet2!E31,)), INDEX(E$1:E$7,MATCH(1,MATCH("*"&D$1:D$7&"*",Sheet2!E31,),)),"")の MATCH("*"&D$1:D$7&"*",Sheet2!E31,)の部分は、*を文字列の前後につけて、Sheet2!E31の中に &D$1:D$7&の文字列が含まれているかどうか調べ、 含まれている場合には、1を戻し、含まれていない場合には、#N/Aを戻し配列に収納します。 IF(COUNT(配列),主処理,"")で、配列の中に数値がある場合だけ主処理を行っています。 主処理のMATCH(1,配列,)では、配列のうち1を検索し、その位置を戻します。 INDEX(E$1:E$7,位置)で、1がある位置から、E$1:E$7の該当セルを参照させています。 このようなことなのですが。。                          (LOOKUP) ---- これほど丁寧に解説して頂けるとは・・・感激です。 大変参考になりました。どうもありがとうございます。 (PAKAPAKA)