シート1のテーブルを次のように並べ替えるにはどうすればよいですか
A B C D E
3 7 3 6 5
シート2の別のテーブルに
A C E D B
3 3 5 6 7
関数のみを使用して?
さて、これが追加の一時的な列のない「1つの数式がすべてを行う」ソリューションです。
A6の式:
= INDEX($ A $ 2:$ E $ 2、MATCH(SMALL($ A $ 3:$ E $ 3 + COLUMN($ A $ 3:$ E $ 3)/ 100000000、COLUMN())、$ A $ 3:$ E $ 3 + COLUMN ($ A $ 3:$ E $ 3)/ 100000000,0))
配列数式として入力します。つまり、--Ctrlを押します。次に、それを隣接する列にコピーします。ShiftEnter
数値も取得するには、A7で次の数式を使用します(これも配列数式として)。
= ROUND(SMALL($ A $ 3:$ E $ 3 + COLUMN($ A $ 3:$ E $ 3)/ 100000000、COLUMN())、6)
両方の式は、潜在的な重複も処理する必要があるため、少し肥大化しています。解決策は、並べ替えを適用する前に、列のごく一部を追加するだけです(SMALL関数)-次に、それを再度削除します...
これを行う非常に簡単な方法の1つは、ランクインデックスを作成し、HLOOKUPを使用して対応する値を見つけることです。
=RANK(A4,$A$4:$E$4,1)
=IF(COUNTIF($A$1:A$1,A1)>1,RANK(A4,$A$4:$E$4,1)+COUNTIF($A$1:A$1,A1)-1,RANK(A4,$A$4:$E$4,1))
=HLOOKUP(COLUMN(),$A$2:$E$4,2,FALSE)
=HLOOKUP(COLUMN(),$A$2:$E$4,3,FALSE)
それは実行可能です!:-)
これがサンプルファイルです。
説明
データが Sheet1 の行 1 にあり、データを別のシートの列 1 から並べ替える必要があると仮定します。そうでない場合は、それに応じて調整します。
この数式をターゲット シートの列 1、たとえば行 2 に配置します。
=ROUND(SMALL(Sheet1!$A$1:$E$1+COLUMN(Sheet1!$A$1:$E$1)/100000000,COLUMN()),6)
数式を配列数式として入力する必要があります。つまり、Ctrl-Shift-Enter を押します。
1列目以外の列に配置する場合は、セル自体への参照である必要があるCOLUMN()
場所COLUMN()-COLUMN($A$2)+1
に置き換える必要があります。$A$2
この数式は、範囲内の最小の数値を返します。それを次の 4 列にコピーすると、数値の順序リストが得られます。
これを列番号に戻すには、次の 2 つの手順を実行する必要があります。
=MATCH(SMALL(Sheet1!$A$1:$E$1+COLUMN(Sheet1!$A$1:$E$1)/100000000,COLUMN()),Sheet1!$A$1:$E$1+COLUMN(Sheet1!$ A$1:$E$1)/100000000,0)- ここでも、配列数式として入力します。ソース データが列 A で始まらない場合は
+COLUMN(Sheet1!$A$1)-1
、$A$1 をソース データの左端のセルに置き換える必要がある場所を追加する必要があります。=LEFT(ADDRESS(1,A6,2),SEARCH("$",ADDRESS(1,A6,2))-1)
もちろん、ステップ 1 と 2 を組み合わせることもできます。これにより、次のメガフォーミュラが生成されます。
=左( 住所( 1、 マッチ( SMALL(Sheet1!$A$1:$E$1+COLUMN(Sheet1!$A$1:$E$1)/100000000,COLUMN()), Sheet1!$A$1:$E$1+COLUMN(Sheet1!$A$1:$E$1)/100000000, 0)、 2)、 探す( "$", 住所( 1、 マッチ( SMALL(Sheet1!$A$1:$E$1+COLUMN(Sheet1!$A$1:$E$1)/100000000,COLUMN()), Sheet1!$A$1:$E$1+COLUMN(Sheet1!$A$1:$E$1)/100000000,0), 2) )-1 )ここでも、配列数式として入力します。