• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル関数について再質問)

エクセル関数について再質問

このQ&Aのポイント
  • エクセル関数について再質問します。エクセル2007を使用しています。詳細な説明をお願いします。
  • セルに値が入っているエクセルシートで、特定の条件で値を自動的に移動する方法を知りたいです。
  • 優先キーとして設定した値を基準に、降順で別のセルに値を移動する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.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関数では処理に時間が掛かり過ぎる様になってきますから、注意して下さい。

handenasi
質問者

お礼

私には、大変でしたがなんとか出来ました。 見事に並び替えできるものですね。感動しました。 これで、寝ることができます。 ありがとうございました、・・・・・おやすみなさい!!!!

その他の回答 (1)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 何故、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の範囲に貼り付けて下さい。  以上です。

関連するQ&A