• ベストアンサー

範囲内の数字を取り出す

例えば、 数字A(1か2けた)+数字B(6か7けた)+(数字C(6か7けた))内で下記のような場合、 数字Bのみ取り出したい時どうすればよいかのご相談です。 また、下記のようなパターンがあります。 145,800(45,800)→この場合は45,800がとれるか 3145,800(45,800)→この場合は45,800がとれるか 21145,800(145,800)→この場合は145,800がとれるか 6145,800(145,800)→この場合は145,800がとれるか 5145,800→この場合は145,800がとれるか 3145,800→この場合は45,800がとれるか といった、上記のパターンがあります。 1つのセルにかますにはどのような関数を使えばよいでしょうか。 バージョンはWIN2000です。 よろしくお願いします。

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

  • ベストアンサー
noname#204879
noname#204879
回答No.5

=IF(ISERROR(FIND("(",A1)),MID(A1,2+(LEFT(A1,2)+0<32),99)+0,-MID(A1,FIND("(",A1),99))

ismt7980
質問者

お礼

mike_gさんご回答ありがとうございます。 できました。 感謝しています。 また、何かありましたらよろしくお願いします。

その他の回答 (4)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.4

>最後が )以外の場合は、最初の1桁を省いた数字 >>>最初の1桁OR2桁は日付を表しています。 >例えば、3114,500は(31日は14,500)と5145,800(5日は145,800) >といった具合ですので月(1~31日)になり、貼り付けた時点で識別できるようになっています。 >よろしくお願いします。 結論:「絶対に無理」 理由: 3番目の「()」が無いパターンで、もし「3日に113,600、31日に15,800」だったら、頭が1桁か2桁か、区別が付かないから。 コンピュータは 3113,600(3日に113,600) 3115,800(31日に15,800) の区別が出来ません。 人間がこれらを区別出来るのは「他のセルに既に『3113,600(113,600)』ってのがあってそれは『3日に113,600』って意味だから、こっちの『3115,800』ってのは3日じゃなくて31日のデータだから、これは『31日に15,800』って意味だな」と言う、経験に基いた、高度な検索と複雑な条件判断を重ねているからです。 高度な人工知能ででもなければ「経験に基いた、高度な検索と複雑な条件判断」は無理です。

ismt7980
質問者

補足

ご回答ありがとうございます。 HPのカレンダーから貼り付けた時点で、 145.800 245,800 345,800 ・ ・ 2945,800 3045,800 31145,800 といった具合になっています。 なので、頭1桁引いたら 145,800→45,800(1日は45,800) 頭2桁引いたら 3145,800→145,800(31日は145,800) となり、識別が可能となります。 よろしくお願いします。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.3

>5145,800→この場合は145,800がとれるか >3145,800→この場合は45,800がとれるか この両者の違いが明確にならない限り、どんな言語、関数を使っても無理。 つまり「頭1文字が5であれば、数字Aは1桁である」「頭2文字が31であれば、数字Aは2桁である」「頭1文字が3であって次の1文字が1でなければ、数字Aは1桁である」などの「明確な規則が細かく定義されている必要がある」と言う事。 もし「人間が目で見て判断しなければならない」としたら「どんな関数、どんな言語を用いたとしても、絶対に自動化するのは無理。人間が目で見て判断するしかない」です。 例えば、ある時は 4235,800→4と235,800 だけど、別のある時は 4235,800→42と35,800 などのように「同じパターンが場合により2通りになる時」は「絶対に自動化するのは無理。人間が目で見て判断するしかない」です。 因みに、上記の「明確な規則」が「文字で説明するのが不可能なくらいに複雑」だと、関数で書くのは不可能です。VBマクロを用いても無理かも知れません。 はっきり言って「桁数が不定なのに、区切り文字が無い」場合には「自動での切り分けは不可能」です。 今後は「自動での切り分けが不可能なデータは作らない」ようにご注意下さい。

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

B2=TEXT(IF(RIGHT(A2,1)=")",-MID(A2,FIND(A2,"("),LEN(A2)),+RIGHT(A2,LEN(A2)-1))),"#,##0")

ismt7980
質問者

お礼

ご回答ありがとうございます。 今回は#5さんの関数を採用させていただきますが、 十分、参考になりました。 ありがとうございます。 また、何かありましたらよろしくお願いします。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

条件を具体的にしませんか? 例えば 最後が ) の場合は、数字Bと数字cは同じで、()でくくられた中の数値 最後が )以外の場合は、最初の1桁を省いた数字 でしょうか?

ismt7980
質問者

補足

早速のご回答ありがとうございます。 説明不足で申し訳ありません。 最後が ) の場合は、数字Bと数字cは同じで、()でくくられた中の数値 >>(数字C)は数字Bといっしょの数字になりますが、(数字C)は必要ありません。 最後が )以外の場合は、最初の1桁を省いた数字 >>最初の1桁OR2桁は日付を表しています。 例えば、3114,500は(31日は14,500)と5145,800(5日は145,800) といった具合ですので月(1~31日)になり、貼り付けた時点で識別できるようになっています。 よろしくお願いします。

関連するQ&A

専門家に質問してみよう