Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11全般 : Microsoft 365)
固定桁数ではない数字の抽出
投稿日時: 23/02/06 18:51:21
投稿者: 春麗

以下の様に複数の括弧を含むデータがあります。
後ろの括弧の中の数字を括弧付きで抽出したいです。
桁数は不定です。
 
                A            B
1 (A)XXXX(BBB)XXXX(0123)        (0123)
2 XXXX(45678)             (456789)
3 (AAA)XXXX(456789)            (56123)
 
 
右から追って最初の ( が見つかるまでを抽出すれば良いかと思い
=RIGHT(A1,FIND("(",A1))
としたのですが,以下の様になります.
 
 
                A            B
1 (A)XXXX(BBB)XXXX(0123)        
2 XXXX(45678)             678)
3 (AAA)XXXX(456789)            )

回答
投稿日時: 23/02/06 19:15:11
投稿者: んなっと

            A     B
1 (A)XXXX(BBB)XXXX(0123)  (0123)
2       XXXX(45678)  (45678)
3    (AAA)XXXX(456789) (456789)
4  XX(BB)X(123)XX(AAAA)  (AAAA) ★
5     XX(BB)X(124)XX  (124)XX ★
 
B1
=IFERROR(REPLACE(A1,1,MATCH(1,0/(MID(A1,SEQUENCE(LEN(A1)),1)="("))-1,),"")
下方向・↓
とか
=IFERROR(REPLACE(A1,1,XMATCH("(",MID(A1,SEQUENCE(LEN(A1)),1),,-1)-1,),"")
 
★の場合は(数字)ではなくなりますが、大丈夫ですか?

回答
投稿日時: 23/02/06 20:35:30
投稿者: 半平太

これでいけるかも知れない。
 
B1セル =IFERROR("("&TEXTAFTER(A1,"(",-1),"")

回答
投稿日時: 23/02/06 21:19:34
投稿者: んなっと

なるほど、半平太さんの式のほうがいいですね。私のはなしで。
 
一応最後の(数字)に限定する方法。
 
             A     B
1 XX(5)XXXX(BBB)XXXX(0123)  (0123)
2        XXXX(45678)  (45678)
3     (AAA)XXXX(456789) (456789)
4   XX(BB)X(123)XX(AAAA)   (123) ★
5      XX(BB)X(124)XX   (124) ★
6            XX     
 
B1
=LET(a,A1,b,SEQUENCE(,LEN(a)),d,MID(a,b,1),
g,LOOKUP(1,0/(d="(")/ISNUMBER(1*DROP(d,,1)),b),
F,LAMBDA(F,i,IF(ISERR(1*CHOOSECOLS(d,i+1)),i,F(F,i+1))),
IF(ISNUMBER(g),MID(a,g,F(F,g)-g+2),""))
下方向・↓

回答
投稿日時: 23/02/06 21:33:01
投稿者: Mike

       A        B
1 (A)XXXX(BBB)XXXX(0123)  (0123)
2 XXXX(45678)       (45678)
3 (AAA)XXXX(456789)    (456789)
 
B1: =TRIM(RIGHT(SUBSTITUTE(A1,"(",REPT(" ",100)&"("),100))
B列の[配置]は“右詰め(インデント)”に書式設定すれば好いだけのことッ!

回答
投稿日時: 23/02/06 21:49:26
投稿者: んなっと

これも。
 
             A     B
1 XX(5)XXXX(BBB)XXXX(0123)  (0123)
2        XXXX(45678)  (45678)
3     (AAA)XXXX(456789) (456789)
4   XX(BB)X(123)456(AAAA)   (123)
5      XX(BB)X(124)XX   (124)
6            XX     
 
B1
=LET(a,TEXTSPLIT(A1,{"(",")"}),XLOOKUP(TRUE,ISNUMBER(a*FIND("("&a&")",A1)),"("&a&")","",,-1))
下方向・↓

回答
投稿日時: 23/02/06 22:38:45
投稿者: んなっと

ごめんなさい、最後のはダメですね...

投稿日時: 23/02/09 10:43:54
投稿者: 春麗

んなっとさん
半平太さん
Mikeさん
 
いろんな書き方で実現できるのですね。
SEQUENCE関数をこの様な使い方をすることを初めて知りました。
 
どうもありがとうございました。勉強になりました。