- ベストアンサー
エクセル 文字の前後にある文字の抜き出し 並べ替え
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
セルC1 =IF(IFERROR(FIND(LEFT(A1,1)&MID(A1,FIND("~",A1)+1,1),"SA_SA_AB"),0)>0,LEFT(A1,FIND("~",A1)-1),IF(IFERROR(FIND(LEFT(A1,1)&MID(A1,FIND("~",A1)+1,1),"AS_BS_BA"),0)>0,MID(A1,FIND("~",A1)+1,LEN(A1)),IF((MID(A1,2,FIND("~",A1)-2))*1<=(MID(A1,FIND("~",A1)+2,LEN(A1)))*1,LEFT(A1,FIND("~",A1)-1),MID(A1,FIND("~",A1)+1,LEN(A1))))) セルD1 =SUBSTITUTE(SUBSTITUTE(A1,C1,""),"~","") S、A、Bの3種ですよね。よ~く見るとパターンがあります。 3パターンに分けて、S、A、Bが同じなら数値部分を数値として判定しています。多分、前提通りと思います。 S、A、Bと数字は半角文字、「~」は全角文字としています。
その他の回答 (3)
- googoo900
- ベストアンサー率44% (82/184)
No.3です。 先程の回答ではG2とJ2が3行目の式になっていました。2行目の式は以下のようになります。 (他の4つは間違ってませんが、すべて記載しておきます) F2 =LEFT(C2,1) G2 =IF(F2="S","_",F2) H2 =MID(C2,2,3) I2 =LEFT(D2,1) J2 =IF(I2="S","_",I2) K2 =MID(D2,2,3) 失礼しました。
お礼
回答ありがとうございます。 諸所の事情により、英字を数字に置換し結合、LARGR関数で並び替えて英字に戻しました。 回答ありがとうございます。
- googoo900
- ベストアンサー率44% (82/184)
それぞれをソートできるように分割すればできます。 まず、ハイフン(~マーク?)の左右を分けます。 式はNo1の方の回答どおりです。 次に、アルファベットと数字を分けます。C列→F列とH列、D列→I列、K列 そして、アルファベットが"S"の場合のみ、昇順並べ替えで上位になる記号に置き換えます。(この例ではアンダーバーに置き替えています) F列→G列、I列→J列 式は以下のようになります。(No1の方に合わせて2行目のセルの式とします) F2 =LEFT(C2,1) G2 =IF(F3="S","_",F3) H2 =MID(C2,2,3) I2 =LEFT(D2,1) J2 =IF(I3="S","_",I3) K2 =MID(D2,2,3) 最後に、エクセルの並べ替えでG,H,J,K列をお好みの優先度で並べ替えれば完了です。 ※アルファベットは必ず1ケタ、数字は1~3ケタとして回答しています。
- mshr1962
- ベストアンサー率39% (7417/18945)
関数で出来るのは分離までですね。 C2=LEFT(A2,FIND("~",A2&"~")-1) D2=SUBSTITUTE(A2,C2&"~","") 並べ替えの方は、S,A,Bは並べ替えのオプションに登録すれば可能ですが 数値の部分の並べ替えは無理です。 例にでてるB120とB180のように桁数が同じなら問題ないですが B120とB18となった場合、数値部分だけでの並べ替えができません。 もしやるとすれば、ユーザー定義関数(マクロ)を組むしかないでしょう。。。
お礼
ありがとうございます、分割は出来る様になりました!
お礼
回答ありがとうございます! 自分では解らないので、英字を一度777とかに変更して、数字と&で結合して・・・と悩んでいた所でした。 本当に助かりました、ありがとうございます!