• ベストアンサー

行の数値をまとめて並べ替える方法

例えば 1 A列の1行から50行に「スカート」「シャツ」「靴」「靴下」「ダウン」「コート」などの品目を入力 2 B列からF列にそれぞれの品目の最高値から最安値をランダムに入力 3 すべての価格をまとめて「降順」あるいは「昇順」に並べ替える  B列からF列を50行まとめて簡単に並べ替えたいです。 以上の作業を簡単にできる方法はありますか 「データ」「並べ替え」「オプション」「行選択」しかないでしょうか 使用しているのは2003になります。 よろしくお願いします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.8

またまたお邪魔します。 なかなかご希望通りにならないようですが・・・ もう一度画像をアップしておきます。 Sheet1は前回と全く同じように作ってみました。 すべてのセルの数式を載せておきますので、この画面から各セルにコピー&ペーストしてみてください。 尚、Sheet2にはやはり社名があった方が数式が短くなりますので、画像のように1行目に敢えて社名を入れています。 Sheet2のB2・C2セルを結合して「A社」と入力 Sheet2のD2・E2セルを結合して「B社」と入力 Sheet1の作業列は前回同様です。 Sheet1の作業列D2セル =IF(COUNTIF($B$2:B2,B2)=1,ROW(),"") E2セル =A2&B2 という数式を入れ、D2・E2セルを範囲指定しE2セルのフィルハンドルでオートフィルで下へずぃ~~~!っとコピーしておきます。 Sheet2のA3セル =IF(COUNT(Sheet1!D:D)<ROW(A1),"",INDEX(Sheet1!B:B,SMALL(Sheet1!D:D,ROW(A1)))) B3セル → 配列数式になってしまいますので、前回同様セルに貼り付け後、数式バー内で一度クリック → Shift+Ctrlキーを押しながらEnterキーで確定! =IF(OR($A3="",COUNTIF(Sheet1!$E:$E,B$1&$A3)=0),"",MAX(IF(Sheet1!$E$1:$E$1000=B$1&$A3,Sheet1!$C$1:$C$1000))) C3セル(これも配列数式) =IF(OR($A3="",COUNTIF(Sheet1!$E:$E,B$1&$A3)=0),"",MIN(IF(Sheet1!$E$1:$E$1000=B$1&$A3,Sheet1!$C$1:$C$1000))) B3・C3セルを範囲指定 → C3セルのフィルハンドルで右へ2列まとめてオートフィルでコピー(E3セルまでコピー) 最後にA3~E3セルを範囲指定 → E3セルのフィルハンドルで下へコピー! 尚、数式が入っているセルは並び替えしてもデータが変化しませんので、画像のように別列に並び替えをしています(黄色い列) (別Sheetに「形式を選択して貼り付け」 → 「値」にチェック・「行列を入れ替える」にチェック で並び替えは可能になりますが、今回はSheet2でやってみました。) F3セル(配列数式ではありません) =IF(COUNT($B3:$E3)<COLUMN(A1),"",LARGE($B3:$E3,COLUMN(A1))) としてI3セルまでオートフィルでコピー! ついでに・・・ J3セルは =IF(A3="","",MAX(F3:I3)) K3セルは =IF(A3="","",MIN(F3:I3)) としてF3~K3セルを反指定 → K3セルのフィルハンドルで下へコピーすると画像のような感じになります。 以上、長々と書いてしまいましたが、何か参考になるものがあったでしょうか?m(__)m

atokun
質問者

お礼

ありがとうございます。 そうです!! これが欲しかったのです。 すごく、嬉しいです。 3月からの運用ですので、 tom4様の回答を使わせていただき、 頑張ります。 面倒くさくて分かりにくい質問に付き合っていただき、 本当にありがとうございました。助かりました。 また、何かありましたら、力をお貸しください。

その他の回答 (8)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.9

回答8のシート2、A列~E列がもともとの状態で、この4列を並べ替えしたら最高値最安値わかるのでは?、との質問だったのかと。 これは BとDを比較するだけで最高値 CとEを比較するだけで最安値 と出せるのでは?。 4つから求めても良い。 仮に並べ替えしておいて、G4が空欄のI4に表示されたら、並べ替えしてF列I列表示、G列H列非表示でもよい。 4つでどれが1番高い安いかは他3つと比較で求まる。 なので tom4様既存回答2でどうなの?、 と この大小比較や最大最小の関数を確認したら、あとは自己解決できると思います。

atokun
質問者

お礼

めんどうで分かりにくい質問に お付き合い頂き、ありがとうございます。 layy様の質問への質問のお陰で 質問を整理することが出来ました。 こちらで質問してよかったです。 実際の運用が3月からなので、 こちらを参考にしながら、業務を行います。 本当に助かりました。 ありがとうございました。 また、何かありましたら力をお借りします。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.7

tom04様のシート2回答が 現在のイメージということで解釈していますが・・・。 補足をお願いします。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

No.2・3・4です。 何度もごめんなさい。 layyさんのお礼欄に >必要なのは2箇所のデータを合体した場合の >「最高値」と「最安値」です。 >2箇所のデータをコピペして並べ替え >「最高値」「最安値」をそのままデータとして残したいのです とありましたのでまたまたお邪魔します。 今までの投稿は無視してください。大きく外していると思います。 今までの方法は単純にB~F列に数値を昇順・降順に並び替えるだけの方法です。 たぶん↓のようなことだろうと思います。 Sheet1にA社・B社のデータが羅列してあるとします(並び替えする必要はありません) その社別最高値・最安値をSheet2に表示するようにしてみました。 とりあえずSheet1の100行目まで対応できる数式にしています。 尚、こちらで勝手に画像のように列の配置を変えています(オートフィルでコピーをやりやすくするためです) Sheet1に作業用の列を2列設けています。 作業列1のD2セルに =IF(COUNTIF($B$2:B2,B2)=1,ROW(),"") 作業列2のE2セルに =A2&B2 という数式を入れ、D2・E2セルを範囲指定しE2セルのフィルハンドルで下へオートフィルでずぃ~~~!っとコピーします。 (作業列1はSheet2に商品の重複なしに表示するためのものですので、Sheet2の商品が決まっているのであれば必要ありません。) そして、Sheet2のA3セルに =IF(COUNT(Sheet1!D:D)<ROW(A1),"",INDEX(Sheet1!B:B,SMALL(Sheet1!D:D,ROW(A1)))) B3セルに =IF(OR($A3="",COUNTIF(Sheet1!$E$2:$E$100,B$2&$A3)=0),"",MAX(IF(Sheet1!$E$2:$E$100=B$2&$A3,Sheet1!$C$2:$C$100))) これは配列数式になってしまいますので、この画面からSheet2のB3セルにコピー&ペーストした後に数式バー内で一度クリックします。 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 このB3セルを隣のCD3セルまでオートフィルでコピー! 次にD3セルに =IF(OR($A3="",COUNTIF(Sheet1!$E$2:$E$100,D$2&$A3)=0),"",MIN(IF(Sheet1!$E$2:$E$100=D$2&$A3,Sheet1!$C$2:$C$100))) (これも配列数式ですので、前述の操作方法と同じです。) これを隣のE3セルまでオートフィルでコピー! 最後にA3~E3セルを範囲指定し、E3セルのフィルハンドルで下へオートフィルでコピーすると 画像のような感じになります。 以上、長々と書きましたが参考になれば幸いです。 今回も的外れならごめんなさいね。m(__)m

atokun
質問者

補足

表まで作成し、画像までつけていただきありがとうございます。 補足をつける度に混乱をさせてしまったようで、 こちらこそすみません。 tom4様とlayy様が最初に質問を読まれて 「こういうことか」と考えて回答いただいたイメージが 多分正解なのだと思います。 すごく分かりやすいので 画像を使わせていただいて 再度 説明します。 説明が下手で申し訳ありません。 sheet2の形が こちらが受け取るデータの形に近いものです。 違うところは まず「最高値」「最安値」の文字がありません。 A列1行目に「商品」と入ります。 A列には表の通り、品目が入ります。 (以下すべて行は3行目です) B列にはA社のスカート最高値「300」(B列には必ずA社の最高値) C列にはA社のスカート最安値「230」(C列には必ずA社の最安値・空欄の場合もあり) D列にはB社のスカート最高値「450」(D列には必ずB社の最高値) E列にはB社のスカート最安値「450」(E列には必ずB社の最安値・空欄の場合もあり) 以上の「」内の数値が入ります。 この4つの「」内の数値の中から 「最高値」「最安値」が欲しいのです。 上記の場合ですと B社の450とA社の230がデータとして必要になりますので B列450 c列450 D列300 E列230と並べ替えが出来ればと。 以下、シャツは250の数値がB、C列に 靴は320がB、C列、130がD、E列に 靴下は440がB、C列、360がD、E列 ダウンは500がB、C列、300がD列、250がE列 コートは540がB、C列、360がD、E列 と数値がくるように並べ替えたいのですが。 素人考えで tom4様が最初に回答いただいた方法で大丈夫なのかと思っていたのですが。 (SHEET1から2へはあまりにも高度すぎて何かすごいです) 説明すればするほど混乱させてしまい、 本当にすみません。 tom4様とlayy様が見捨てず回答して頂いてるのですごく嬉しいです。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

A社の最高値をB列 A社の最安値をC列 B社の品目をD列 B社の最高値をE列 B社の最安値をF列 こんな感じ?。 後で元のどちらから来た、がわからなくなると困る、ならB~F列は並べ替えしないで、G列より右に作業列のが無難です。 2個から4個集まる要素で、最高値と最安値だけなら並べ替えしなくても関数かと。 ちなみに 並べ替えは、4人縦に並んで背の低い順にする、と同じ。1番目と2番目見てどっち、それと3番目見てどっち、としていく繰り返しプログラム。

atokun
質問者

補足

ご回答ありがとうございます A社の最高値をB列 A社の最安値をC列 B社の品目をD列 B社の最高値をE列 B社の最安値をF列 B社の品目は入りませんので A社の最高値をB列 A社の最安値をC列 B社の最高値をD列 B社の最安値をE列 となります。 A社とB社を合わせた4つの数値の中から 「最高値」「最安値」が必要なのですが、 「関数」というのは NO2、3の方が回答されているような 数式を入れればいいのでしょうか lavv様から質問されて 何を聞きたいのか、どうしたいのかが分かり 内容を整理していただき大変助かりました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.2・3です! >(コピペで大丈夫ですよね) とありましたので・・・ No.2に書いているように、 数式データをコピー → B1セルをアクティブ → 右クリック → 「形式を選択して貼り付け」 → 「値」にチェックを入れOK にしてくださいね。 単にコピー&ペーストだけではエラーになります。 尚、余計なお世話かもしれませんが、B~F列すべてが数値で埋まっていればよいのですが、万一空白がある場合は =IF(COUNT($B1:$F1)<COLUMN(A1),"",LARGE($B1:$F1,COLUMN(A1))) といった数式にしてください。 お役に立てばよいのですが・・・m(__)m

atokun
質問者

補足

何度もありがとうございます。 コピペではだめだったのですね。 よく回答を読まず申し訳ありません。 数式データをコピー → B1セルをアクティブ → 右クリック → 「形式を選択して貼り付け」 → 「値」にチェックを入れOK ですね。 おっしゃるように空欄がありますので =IF(COUNT($B1:$F1)<COLUMN(A1),"",LARGE($B1:$F1,COLUMN(A1))) 簡単に考えていたのですが、結構高度テクニックのようで…。 実際の作業は3月からなのですが、それまでにマスターしようと思います。 丁寧に回答いただきありがとうございました。 こちらで質問してよかったです。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! たびたびごめんなさい。 前回の降順の数式が間違っていました。 =LARGE($B1:$F1,COLUMN(A1)) に訂正してください。 何度も失礼しました。m(__)m

atokun
質問者

お礼

何度も投稿いただきありがとうございます 明日会社で =LARGE($B1:$F1,COLUMN(A1)) の数式をここからコピペして試してみます。 (コピペで大丈夫ですよね)   ありがとうございます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 外していたらごめんなさい。 列方向の数値だけを昇順・または降順に並べ替えたいということですよね? 一応そういうことだとして・・・ 一例です。 昇順の場合は 使っていない列を利用します。仮にG列以降を使っていないとして、 G1セルに =SMALL($B1:$F1,COLUMN(A1)) という数式を入れ、5列右までオートフィルでコピー! そのまま行方向(下)へコピー! そして範囲指定されたままの状態で → 右クリック → コピー → B1セルを選択 →  「形式を選択して貼り付け」 → 「値」にチュエックを入れOK 最後に先ほどのG列以降を削除して完了です。 尚、降順にしたい場合の数式は =LARGE($B11:$F11,COLUMN(C11)) として上記と同様の操作を行います。 的外れならごめんなさいね。m(__)m

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

左から右へ並べたい、ということか?。 形式を選択して貼り付け、で行列を反転する方法は考えてみたか。 B列からF列での 最高値をG列、最安値をJ列、というのはできる話。 2番目と3番目はG列にもJ列にもないもの、になるので別途判定でH列かI列、 こんなのでできそうか、検討。 必ずB~F列の4つに値を埋めるのか、 無い場合は同じ値で埋めておくことはあるのか、(それでも良いか)、 B列とC列が同じことはあるのか、 50行とは言わず増減することはあるのか、 等、補足で欲しい。 並べ替えのアルゴリズムを知っていれば、 4つしかないので簡単であり、VBAで関数化すれば特に問題ない。

atokun
質問者

お礼

早速回答いただきありがとうございます。 おっしゃる通り 「左から右へ並べたい」のです。 データが2箇所から来ます。 それぞれに「最高値」「最安値」がありますが、 「最安値」がない場合もあります。 その場合は空白になります。 また同じ値の場合もあります。 必要なのは2箇所のデータを合体した場合の 「最高値」と「最安値」です。 2箇所のデータをコピペして並べ替え 「最高値」「最安値」をそのままデータとして残したいのです。 行は固定になります。 以上で大丈夫でしょうか 形式を選択して貼り付け、で行列を反転する方法は簡単でしょうか 並べ替えのアルゴリズムを知っていれば、 4つしかないので簡単であり、VBAで関数化すれば特に問題ない の部分は全くわかりません。 ご回答の中の質問が的を射て(的を得て)いたので 感動しました。 おっしゃることが聞きたかったのです。 ど素人ですのでよろしくお願いします

関連するQ&A