プロが教える店舗&オフィスのセキュリティ対策術

お願いいたします。
エクセルの「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)))))」

A 回答 (5件)

=MID(LEFT(D1,MIN(FIND({")",")"},D1&"))"))-1),MIN(FIND({"(","("},D1&"(("))+1,LEN(D1))



先頭の"("がない場合は空白を返します。
後方の")"がない場合は、"("以降の文字を返します。
"()"がそろっている場合は()内の文字を返します。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/17 16:17

カッコについては、作業列で、手作業の置換やSUBSTITUTEで全角か半角かにそろえて、それに対し関数を考えてはどうですか。

JIS関数を使うと元のデータと文字が、変わると思いますので、一般には望ましくないように思う。
余り仮定((は全角とか、()は必ずあるとか)を置けないようなので、VBA向きの問題のように思います。
私ならカッコの全角半角を統一して
=IF(OR(ISERROR(FIND("(",A1)),ISERROR(FIND(")",A1))),"",MID(A1,FIND("(",A1)+1,FIND(")",A1)-FIND("(",A1)-1))
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/17 17:01

No2です。

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

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

お礼日時:2006/01/16 20:48

可能性として、


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

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

お礼日時:2006/01/17 16:58

ちょっと自分で作って見ました



=IF(ISERROR(FIND("(",D1,1)),"(空白)",MID(D1,FIND("(",D1,1)+1,FIND(")",D1,1)-FIND("(",D1,1)-1))

(空白)はスペースの事だと思いますが、表示上「(空白)」としています。

これとyastaroさんとの式を比較して違うのは、ISERRORによる判断箇所ですね。
ISERRORでは、「表示する結果」のエラーではなく、最初の「(」の有無だけ判断すればいいと思いますよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/16 20:51

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