データの分析、グラフ作成、および通信のためのツールを備えた Microsoft 表計算ソフトウェアのファミリ。
こんにちは。
VBA(マクロ)ではなく、ワークシート関数を使った数式での並べ替えをご希望でしょうか?。
以下、数式を使っての並べ替え方法の一例です。
VBA(マクロ)ではないので、並べ替え前の数値に並べ替え後の数値を上書きするようなことは出来ませんので、ご紹介するのは、並べ替え後の数値を他のシートに表示させる方法です。
ここでは、並べ替え前の数値データは Sheet1 の A列と E列に並んでいるものとし、並べ替え後の数値データは Sheet2 の A列と D列に表示させるものとします。
尚、複数列に渡る数値の並べ替え自体は比較的容易にできますが、並べ替えた数値をどのように分配するかで数式が異なってきますので、数式を大きく 2つのグループに分けてみました。
【 列の数値の個数を元データの個数に合わせる場合の数式 】
- Sheet2 の A1セルに入れる数式(下記の数式をコピー・貼り付け)
=IF(ROW(A1)>COUNT(Sheet1!A:A),"",SMALL((Sheet1!A:A,Sheet1!E:E),ROW(A1)))
※この数式を下方向(行方向)に必要なだけコピーします。
※コピーする行数は任意ですが、元データが最大 100個になる予定があるのでしたら 100行分コピーしておけば良いかと思います。
- Sheet2 の D1セルに入れる数式(下記の数式をコピー・貼り付け)
=IFERROR(SMALL((Sheet1!A:A,Sheet1!E:E),COUNT(Sheet1!A:A)+ROW(A1)),"")
※この数式を下方向(行方向)に必要なだけコピーします。
※コピーする行数は任意ですが、元データが最大 100個になる予定があるのでしたら 100行分コピーしておけば良いかと思います。
<並べ替えの結果例>
※ A列と D列の数値の個数は元データの個数に合わせるように並べ替えられます。
・図1(例1)
・図2(例2)
・図3(例3)
【 列の数値の個数を他の列と均等にする場合の数式 】
- Sheet2 の A1セルに入れる数式(下記の数式をコピー・貼り付け)
=IF(ROW(A1)>ROUND(COUNT(Sheet1!A:A,Sheet1!E:E)/2,0),"",SMALL((Sheet1!A:A,Sheet1!E:E),ROW(A1)))
※この数式を下方向(行方向)に必要なだけコピーします。
※コピーする行数は任意ですが、元データが最大 100個になる予定があるのでしたら 100行分コピーしておけば良いかと思います。
- Sheet2 の D1セルに入れる数式(下記の数式をコピー・貼り付け)
=IFERROR(SMALL((Sheet1!A:A,Sheet1!E:E),ROUND(COUNT(Sheet1!A:A,Sheet1!E:E)/2,0)+ROW(A1)),"")
※この数式を下方向(行方向)に必要なだけコピーします。
※コピーする行数は任意ですが、A列のコピー数と同数にしてください。
<並べ替えの結果例>
※ A列と D列の数値の個数が均等になるように並べ替えられます。
・図4(例4)
・図5(例5)
・図6(例6)
※この場合、総個数が奇数になり均等に出来ないので、自動的に A列の表示個数を 1つ増やしています。
以上です。
各数式の動作説明は長くなるので省略します。
ご希望があれば書いてみたいと思いますが・・・。
ご参考になれば幸いです。
<分かりにくい表現の修正と下線の追加>
・わかりにくい表現の修正
【 1列の・・・】を【 列の・・・】に修正。( 2箇所)
・下線の追加
『※A列と D列の数値の個数は元データの個数に合わせるように並べ替えられます。』の文章に下線を追加。