- ベストアンサー
エクセル関数について再質問
- エクセル関数について再質問します。エクセル2007を使用しています。詳細な説明をお願いします。
- セルに値が入っているエクセルシートで、特定の条件で値を自動的に移動する方法を知りたいです。
- 優先キーとして設定した値を基準に、降順で別のセルに値を移動する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
回答No.1とは別の方法として、作業列を使わずに済む、次の様な方法もあります。 まず、A20セルに次の関数を入力して下さい。 =IF(ROWS($20:20)>COUNT($E$10:$E$13),"",IF(INDEX($A$10:$E$13,SUMPRODUCT(ISREF($E$10:$E$13)*(COUNTIF(OFFSET($E$10,,,ROW($E$10:$E$13)-ROW($E$10)+1),LARGE($E$10:$E$13,ROWS($20:20)))<ROWS($20:20)-COUNTIF($E$10:$E$13,">"&LARGE($E$10:$E$13,ROWS($20:20)))))+1,COLUMNS($A:A))="","",INDEX($A$10:$E$13,SUMPRODUCT(ISREF($E$10:$E$13)*(COUNTIF(OFFSET($E$10,,,ROW($E$10:$E$13)-ROW($E$10)+1),LARGE($E$10:$E$13,ROWS($20:20)))<ROWS($20:20)-COUNTIF($E$10:$E$13,">"&LARGE($E$10:$E$13,ROWS($20:20)))))+1,COLUMNS($A:A)))) そして、A20セルをコピーして、A20~E23の範囲に貼り付けて下さい。 以上です。 尚、上記の関数の中で使用されているSUMPRODUCT関数は、繰り返し処理を行う関数であるため、行数が多くなりますと処理が重くなるという短所があります。 10~13行の場合、その中に含まれている行数は4行しかありませんから、SUMPRODUCT関数を使用しても処理が重くなりはしませんが、もし、処理の対象とする行範囲が2000行以上にもなる様な場合には、SUMPRODUCT関数では処理に時間が掛かり過ぎる様になってきますから、注意して下さい。
その他の回答 (1)
- kagakusuki
- ベストアンサー率51% (2610/5101)
何故、1行目~4行目に入力されているデータと同一のデータを、態々10行目~13行目に表示させてから、並べ替えの元データとして扱うのか解りませんが、取り敢えずその事は横に置いておいておきます。 御質問文内の例の様に、E列に入力されている値は全て数値データであるとしますと、次の様な方法となります。 まず、使用していない列の中の適当な列(ここでは仮にG列とします)を作業列として使用するものとし、その列の10行目のセル(G10セル)に次の関数を入力して下さい。 =IF(ISNUMBER(INDEX($E:$E,ROW())),RANK(INDEX($E:$E,ROW()),$E$10:$E$13,0)*10000000+ROW(),"") 次に、G10セルをコピーして、G11~G13の範囲に貼り付けて下さい。 次に、A20セルに次の関数を入力して下さい。 =IF(ROWS($20:20)>COUNT($G$10:$G$13),"",IF(INDEX($A:$E,MOD(SMALL($G$10:$G$13,ROWS($20:20)),10000000),COLUMNS($A:A))="","",INDEX($A:$E,MOD(SMALL($G$10:$G$13,ROWS($20:20)),10000000),COLUMNS($A:A)))) そして、A20セルをコピーして、A20~E23の範囲に貼り付けて下さい。 以上です。
お礼
私には、大変でしたがなんとか出来ました。 見事に並び替えできるものですね。感動しました。 これで、寝ることができます。 ありがとうございました、・・・・・おやすみなさい!!!!