• ベストアンサー

エクセル:セル「D列」に「○○○(□△□)」とあるとき、( )内を関数で抜き出したい

お願いいたします。 エクセルの「D列」にある( )内の文字だけを関数で抜き出したいのです。 注)そのとき、「( )」は全角半角が混在している可能性があります。 例えば (1)D1に「○○○(□△□)」とあるとき、  E1に「□△□」 (2)D2に「○×○(■◎▼)」とあるとき、  E2に「■◎▼」としたいのです。 (3)また、D列には( )がない場合もあります。たとえば  D3「◎□△」だけの場合は、  E3には「(空白)」を返す。 私が一生懸命作ってみると下記の関数になりました。 一応、結果は出ます。 しかし、きっと《もっとシンプルに出来るはず》だと思い、勉強のためにもぜひ、ご教授ください。よろしくお願いいたします。 「=IF(ISERROR(MID(D1,(FIND("(",JIS(D1))+1),((FIND(")",JIS(D1))-(FIND("(",JIS(D1))+1))))),"",MID(D1,(FIND("(",JIS(D1))+1),((FIND(")",JIS(D1))-(FIND("(",JIS(D1))+1)))))」

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

=MID(LEFT(D1,MIN(FIND({")",")"},D1&"))"))-1),MIN(FIND({"(","("},D1&"(("))+1,LEN(D1)) 先頭の"("がない場合は空白を返します。 後方の")"がない場合は、"("以降の文字を返します。 "()"がそろっている場合は()内の文字を返します。

yastaro
質問者

お礼

ありがとうございます。mshr1962さんのご指導からはいつも教えられるのですが、関数の可能性ってすごいですね。式の内容がいまだにまだ読みきれていませんが、勉強していみます。ありがとうございました。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

カッコについては、作業列で、手作業の置換やSUBSTITUTEで全角か半角かにそろえて、それに対し関数を考えてはどうですか。JIS関数を使うと元のデータと文字が、変わると思いますので、一般には望ましくないように思う。 余り仮定((は全角とか、()は必ずあるとか)を置けないようなので、VBA向きの問題のように思います。 私ならカッコの全角半角を統一して =IF(OR(ISERROR(FIND("(",A1)),ISERROR(FIND(")",A1))),"",MID(A1,FIND("(",A1)+1,FIND(")",A1)-FIND("(",A1)-1))

yastaro
質問者

お礼

imogasiさん、ご指導ありがとうございます。 正統的なご指導を心より受け止めさせていただき、勉強してみます。ありがとうございました^^

  • cockerel
  • ベストアンサー率46% (253/548)
回答No.4

No2です。嘘を書いてしまいました。 SEARCHにも半角/全角の区別があります。ごめんなさい。恥! とりあえず、こんな感じです。 =IF(ISERROR(SEARCH("(*)",ASC(D1))),"",REPLACE(LEFT(D1,FIND(")",ASC(D1))-1),1,FIND("(",ASC(D1)),"")) もう少しすっきりした形を思いついたらまた書きます。

yastaro
質問者

お礼

ありがとうございます。今日は検証する時間なく退社しますので、また明日、あらためてお礼申し上げますね。

  • cockerel
  • ベストアンサー率46% (253/548)
回答No.2

可能性として、 右括弧 全角 右括弧 半角 左括弧 全角 左括弧 半角 すべてなし が考えられるようです。その場合、半角および全角の左右括弧がある場合だけ、その中身を抽出、それ以外は空白文字を返す、ということであれば、質問者の式でよいと思いますが、FINDではなくSEARCHを使用する方が簡単です。 SEARCHには、半角/全角の区別がありません。またワイルドカードを使用できます。条件式は次のようになります。 ISERROR(SEARCH("(*)",D1))

yastaro
質問者

お礼

No.4のご回答の内容のお礼です。 ばっちり確認できました。 2度もご親切に教えてくださってありがとうございました。

  • hirumin
  • ベストアンサー率29% (705/2376)
回答No.1

ちょっと自分で作って見ました =IF(ISERROR(FIND("(",D1,1)),"(空白)",MID(D1,FIND("(",D1,1)+1,FIND(")",D1,1)-FIND("(",D1,1)-1)) (空白)はスペースの事だと思いますが、表示上「(空白)」としています。 これとyastaroさんとの式を比較して違うのは、ISERRORによる判断箇所ですね。 ISERRORでは、「表示する結果」のエラーではなく、最初の「(」の有無だけ判断すればいいと思いますよ。

yastaro
質問者

お礼

ご回答ありがとうございます。ずいぶんすっきりしました。ありがとうございました。

関連するQ&A