大文字が3個以上含まれている場合にも対応する関数です。
今仮に、A1セルに元の文字列が存在していて、2番目に現れる大文字よりも、前にある部分の文字列を、B列上のセルに表示するものとします。
その場合の数式の一例は以下の様になります。
=LEFT($A1,SUMPRODUCT(ROW(OFFSET(B$2,,,LEN($A1)-1))*(CODE(MID($A1,ROW(OFFSET(B$2,,,LEN($A1)-1)),1))>64)*(CODE(MID($A1,ROW(OFFSET(B$2,,,LEN($A1)-1)),1))<91)*EXACT(MID($A1,2,ROW(OFFSET(B$2,,,LEN($A1)-1))-2),LOWER(MID($A1,2,ROW
(OFFSET(B$2,,,LEN($A1)-1))-2))))+IF(EXACT(MID($A1,2,LEN($A1)),LOWER(MID
($A1,2,LEN($A1)))),LEN($A1),-1))
尚、この数式は、元の文字列の最初の文字が、大文字であるか小文字であるかには関係なく、2文字目以降に現れる最初の大文字よりも、前にある部分の文字列を、取り出しますから、もしも、英文の常識から外れた、小文字から始まる文字列の場合には、最初に現れる大文字よりも、前にある部分の文字列を、取り出す事になります。
又、元の文字列の2文字目以降に大文字が存在しない場合には、元の文字列の全文が表示される様にしています。
因みに、元の文字列の2文字目以降に大文字が存在しない場合には、何も表示しない様にする数式は、次の様になります。
=LEFT($A1,SUMPRODUCT(ROW(OFFSET(B$2,,,LEN($A1)-1))*(CODE(MID($A1,ROW(OFFSET(B$2,,,LEN($A1)-1)),1))>64)*(CODE(MID($A1,ROW(OFFSET(B$2,,,LEN($A1)-1)),1))<91)*EXACT(MID($A1,2,ROW(OFFSET(B$2,,,LEN($A1)-1))-2),LOWER(MID($A1,2,ROW
(OFFSET(B$2,,,LEN($A1)-1))-2))))+IF(EXACT(MID($A1,2,LEN($A1)),LOWER(MID
($A1,2,LEN($A1)))),0,-1))
それから、上記の数式のままでは、元の文字列の文字数が1文字のみの場合と、文字列が無い場合には、エラーになります。
エラーにならない様にするためには、作業用のセル(ここでは仮にC1セルを使用する事にします)を使用します。
まず、C1セルに次の数式を入力して下さい。
=IF(OR(LEN($A1)<2,EXACT(MID($A1,2,LEN($A1)),LOWER(MID($A1,2,LEN($A1))))),LEN($A1),SUMPRODUCT
(ROW(OFFSET(C$2,,,LEN($A1)-1))*(CODE(MID($A1,ROW(OFFSET(CB$2,,,LEN($A1)-1)),1))>64)*(CODE(MID($A1,ROW(OFFSET(C$2,,,LEN($A1)-1)),1))<91)*EXACT(MID($A1,2,ROW(OFFSET(C$2,,,LEN($A1)-1))-2),LOWER(MID($A1,2,ROW
(OFFSET(C$2,,,LEN($A1)-1))-2))))-1)
次に、取り出した部分を表示するセルに、次の数式を入力して下さい。
=LEFT($A1,$C1)
これで、1文字以下にも対応する事が出来ます。
お礼
再度のご投稿ありがとうございます。 できました! ありがとうございます!! 皆様のおかげをもちまして、作業を進めることが出来ます。 この場をお借りして、お礼を申し上げます。 また、質問させて頂くと思いますので、今後ともよろしくお願い致します。 ありがとうございましたm(__)m。