Excel (一般機能)

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

 
(Windows 8.1 Pro : Excel 2007)
文字列編集について
投稿日時: 20/01/16 18:16:06
投稿者: FILETUBE

こんばんは。
文字列の編集で1つ教えて下さい。
 
 
A は A
A-B は A
A-B-C はA-B
AAAAAAAAAA-BBBB-CCC はAAAAAAAAAA-BBBB
 
 
文字列に
ハイフンが無い場合はそのまま
ハイフンが1つの場合はハイフン以降は削除
ハイフンが2つの場合は2つ目のハイフン以降は削除
 
ハイフンが3つ以上になる事はありません。
 
=LEFT(A1,IFERROR(LOOKUP(10,(FIND("-",A1,{1,2,3,4,5,6,7,8,9}))),LEN(A1)+1)-1)
のような式を教えて頂き
 
A-B-C は A-BとなりOKなのですが
AAAAAAAAAA-BBBB-CCCの場合正しく編集できません。
 
どのようにすると良いのか
分かる方おられましたら宜しくお願いします。

回答
投稿日時: 20/01/16 20:28:38
投稿者: んなっと

https://www.moug.net/faq/viewtopic.php?t=78948
前のスレッドでHALさんが回答した式ですね。すばらしい考え方です。
「(9文字限定)」と書かれていますので、そのあたりを変更するだけです。
=IFERROR(LEFT(A1,LOOKUP(10^9,(FIND("-",A1,ROW($1:$500))))-1),A1)
 
 
式が長くなりますが、こんなのも。
=IFERROR(LEFT(A1,LOOKUP(10^9,FIND(CHAR(1),SUBSTITUTE(A1,"-",CHAR(1),{1,2})))-1),A1)

投稿日時: 20/01/16 21:05:29
投稿者: FILETUBE

んなっとさん、回答ありがとうございます。
 
LookUpを使うのですね。
とても難しくどういう理論なのか説明して頂けると
ありがたく思います。
 

回答
投稿日時: 20/01/16 21:45:57
投稿者: んなっと

最初の式、余計な(  )がありました。
 
     A   B
1 AA-BB-CC AA-BB
 
 LEFT(A1,LOOKUP(10,FIND("-",A1,ROW($1:$9)))-1)
 内側から見ていきましょう。
 
【1】FIND("-",A1,ROW($1:$9))
→FIND("-","AA-BB-CC",{1,2,3,4,5,6,7,8,9})
 
 FIND("-",A1,1) →1文字目以降 AA-BB-CC で、最初の"-"の位置→3
 FIND("-",A1,2) →2文字目以降 .A-BB-CC で、最初の"-"の位置→3
 FIND("-",A1,3) →3文字目以降 ..-BB-CC で、最初の"-"の位置→3
 FIND("-",A1,4) →4文字目以降 ...BB-CC で、最初の"-"の位置→6
 FIND("-",A1,5) →5文字目以降 ....B-CC で、最初の"-"の位置→6
 FIND("-",A1,6) →6文字目以降 .....-CC で、最初の"-"の位置→6
 FIND("-",A1,7) →7文字目以降 ......CC で、最初の"-"の位置→#VALUE!
 FIND("-",A1,8) →8文字目以降 .......C で、最初の"-"の位置→#VALUE!
 FIND("-",A1,9) →9文字目以降 ........ で、最初の"-"の位置→#VALUE!
 
→{3,3,3,6,6,6,#VALUE!,#VALUE!,#VALUE!} という配列が得られます。
 
 
【2】LOOKUP(10,FIND("-",A1,ROW($1:$9)))
→LOOKUP(10,{3,3,3,6,6,6,#VALUE!,#VALUE!,#VALUE!})
 エラーは無視して、10以下の最後の数値→「最後の数値」6
 つまり、10「絶対に現れない大きい数」であれば何でもいいわけです。100でも1000でもOK。
 
【3】LEFT(A1,LOOKUP(10,(FIND("-",A1,ROW($1:$9))))-1)
→LEFT("AA-BB-CC",6-1)
 
 AA-BB-CCの左6-1=5文字を取り出します→AA-BB

投稿日時: 20/01/16 23:06:56
投稿者: FILETUBE

んなっとさん、すいません
ここまで丁寧な説明を頂き。
 
おかげで少しは理解できましたが
どういう発想でこの様な事を考えられるのでしょうか。
 
しかしすごいですね。
本当にありがとうございました。

投稿日時: 20/01/17 08:02:33
投稿者: FILETUBE

 んなっとさん、おはようございます。
早速、やってみました。
 
完璧です。
ありがとうございました。