- Home » 
 - エクセル関数の技 » 
 - 文字列の中の数字で並べ替えたい?
 
  - 当サイトの掲示板にて質問されたものです。
  
 - 質問内容:下図のように、A列の値をB列へ並べ替えたい。
  
   - 並べ替えの規則は?
  
    - 上記の並べ替えはまず左の2桁の数字の昇順、次いで右側の数字の昇順で並べ替えられているようです。
    下図のように、左の数字を数値にしたものをB列へ、右の数字を数値にしたものをC列に取り出して、「並べ替え」をすることで期待するように並べ替えることができまます。
    
   
 
  - 並べ替えのキーが2つあるとちょっと面倒ですので、2組の数字を1つの数値へ変換します
    
      - 幸いなことに、この例では左の文字列は LEFT(A1,2) 、右の数字は RIGHT(A1,3) で取り出すことができます。
      これを一つの数値にするために =LEFT(A1,2)*1000+RIGHT(A1,3) とします。
      これは、右の数字が999まで入る可能性があるので、左の数値を1000倍してから加算しています。
      
        - =(LEFT(A1,2)&RIGHT(A1,3))*1 とすることもできます。
      
 
      
       - 作成した数値の順番を求めます。
      順番はRANK関数で昇順とします。 =RANK(D1,$D$1:$D$5,1) とします。
      
     
   - 順番(E列)の1から順番にA列の値を取り出します。
    
      - INDEX関数とMATCH関数の完全一致検索で値を取り出します。
      =INDEX($A$1:$A$5,MATCH(ROW(A1),$E$1:$E$5,0)) としました。
      
   
 
  - 作業列を使いたくない・・・といったケースでは?
  
    - このような↓数式を考えました。
    =INDEX($A$1:$A$5,MATCH(SMALL(INDEX(LEFT($A$1:$A$5,2)*1000+RIGHT($A$1:$A$5,3),0),ROW(A1)),INDEX(LEFT($A$1:$A$5,2)*1000+RIGHT($A$1:$A$5,3),0),0))
     - まず取り出したい範囲のセルを INDEX関数に入れます。
    =INDEX($A$1:$A$5,・・・・
    ここからキーとなるものの一番小さい値から順番に取り出すことにしました。
     - キー(Key)は LEFT($A$1:$A$5,2)*1000+RIGHT($A$1:$A$5,3) としました。(上記の作業列D列の値と同じです)
    これを INDEX(Key,0) という配列に入れます。
    このKeyの一番小さい値は SMALL(INDEX(Key,0),ROW(A1)) となります。
     - これが、INDEX(Key,0) の何番目にあるのか? というのをMatch関数で調べます。
    MATCH(SMALL(INDEX(Key,0),ROW(A1)),INDEX(Key,0),0)
     - これと基のINDEX部分を合わせると
    =INDEX($A$1:$A$5,MATCH(SMALL(INDEX(Key,0),ROW(A1)),INDEX(Key,0),0))
    となります。
     - 説明上 Key とした部分を元に戻すと、最初に書いた数式になります。
    
   
 
スポンサードリンク
よねさんのWordとExcelの小部屋 » 
エクセル関数の技 » 
文字列の中の数字で並べ替えたい?
 PageViewCounter
 
 Since2006/2/27