• ベストアンサー

エクセル セル内並び替え その後 セル同士並び替え

お世話になります。 エクセルの並び替えについてです。 セル内で並び替えをして、さらにセル同士で並び替えをすることは 可能でしょうか? (添付画像を参照してください) ※行数が多いので、手動で並び替えをしないことを前提とさせてください。 基本的な質問になるかと思いますが、 どうぞよろしくお願いいたします。

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

  • ベストアンサー
回答No.4

>基本的な質問になるかと思いますが 基本は一つのセルに(並び替えが必要となるような)複数のデータは入れないことです。 セル内に3つの日付が入っているとして =TEXT(SMALL(MID(A1,{1,12,23},10)*1,1),"yyyy/mm/dd")&CHAR(10)& TEXT(SMALL(MID(A1,{1,12,23},10)*1,2),"yyyy/mm/dd")&CHAR(10)& TEXT(SMALL(MID(A1,{1,12,23},10)*1,3),"yyyy/mm/dd") 下へオートフィル コピーして 形式を選択して貼り付け ●値 昇順で並び替え

bigbigman
質問者

お礼

シンプルな方法ですね。 解決しました。 ありがとうございました☆ お盆を挟んでしまい、お礼が遅くなってしまいました(≧≦)

その他の回答 (4)

noname#204879
noname#204879
回答No.5

[No.2補足]へのコメント 》 列がA以外にも複数行あり、この図のようにA、B、Cというように 》 行を列に置き換えるということはできない それを想定して、私が同じシートを使用していないことを理解すべきです。 Sheet4 の右側(最終結果)を[コピー]して、それを Sheet1 のA列に[値の貼り付け]を行えば済むことでは? なお、貴方の質問は[並び替え]の「基本的なこと」を逸脱しています。

bigbigman
質問者

お礼

返事が遅く成りましたが、 ご協力ありがとうございました☆

bigbigman
質問者

補足

確かにおしゃる通り、逸脱しているのかもしれません。

  • MASUKUBO
  • ベストアンサー率22% (4/18)
回答No.3

お示しの表がA1セルからA3セルにあるとします。 入力されている日付はいずれも文字列になっていますのでこれをシリアル値に変えることがます初めに必要なことでしょう。 A1セルからA3セルを選択してから「データ」タブの「区切り位置」をクリックします。 表示の画面で「スペースによって…」にチェックをして「次へ」 日付と日付の間のスペースにカーソルを移しクリックしたのちに「次へ」 「列のデータ形式」では「日付」にチェックをしてから右側で「YMD]を選択します。 「表示先」を$A$1から$B$1に変更します。 日付にする操作は三つに区切られたそれぞれの列について行います。 最後に「完了」をクリックします。 これでシート状のB1セルからD3セルの範囲に日付が表示されますね。 そこで作業列としてEおよびF列を使います。 E1セルには次の式を入力してE3セルまでオートフィルドラッグします。 =MIN(B1:D1) F1セルには次の式を入力してF3セルまでオートフィルドラッグします。 =TEXT(SMALL(B1:D1,1),"yyyy/mm/dd")&CHAR(10)&TEXT(SMALL(B1:D1,2),"yyyy/mm/dd")&CHAR(10)&TEXT(SMALL(B1:D1,3),"yyyy/mm/dd") G列にお求めの表を表示させるとしてG1セルには次の式を入力してG3セルまでオートフィルドラッグします。 =INDEX(F$1:F$3,MATCH(SMALL(E$1:E$3,ROW(A1)),E$1:E$3,0)) なおG列については「セルの書式設定」の「配置」のタブで「折り返して全体を表示する」を選択します。列の幅も十分にとってください。

bigbigman
質問者

お礼

区切り位置を利用する方法は使えると思います。 ただ、入力情報によってうまくいったり、いかなかったりするケースがありました。 丁寧な説明ありがとうございます。

noname#204879
noname#204879
回答No.2

添付図参照 Sheet2!A1: =MID(Sheet1!$A1,(COLUMN(A1)-1)*10+COLUMN(A1),10)+0 Sheet3!A1: =SMALL(Sheet2!$A1:$C1,COLUMN(A1)) Sheet4!A1: “折り返して全体を表示する”に書式設定       =TEXT(Sheet3!A2,"yyyy/mm/dd")&CHAR(10)&TEXT(Sheet3!B2,"yyyy/mm/dd")&CHAR(10)&TEXT(Sheet3!C2,"yyyy/mm/dd")       この結果を添付図の Sheet4 に左側に示す 最後に Sheet4 のA列を昇順に[並べ替え]       この結果を添付図の Sheet4 に右側に示す

bigbigman
質問者

補足

図がわかりやすくて素晴らしいです。 ありがとうございます。 ただし、列がA以外にも複数行あり、この図のようにA、B、Cというように行を列に置き換えるということはできない制約があるのです。 その説明が不足していました。

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

 1個のセル内に入っている日付が、9つまでである場合に対応している方法です。(10以上の日付が1個のセル内に存在している場合には、正しく並べ替える事が出来ません)  今仮に、元データがSheet1のA列に並んでいて、Sheet3を作業用Sheetとして用いて、Sheet2のA列に並べ替えた結果を表示するものとします。  まず、Sheet3のC1セルに次の数式を入力して下さい。 =IF(AND(OR(ISNUMBER(Sheet1!$A1),ISNUMBER(FIND(CHAR(10),Sheet1!$A1))),COLUMNS($C:C)<=LEN(Sheet1!$A1)-LEN(SUBSTITUTE(Sheet1!$A1,CHAR(10),))+1),REPLACE(LEFT("0"&Sheet1!$A1,FIND("゛",SUBSTITUTE(Sheet1!$A1&CHAR(10),CHAR(10),"゛",COLUMNS($C:C)))),1,FIND("゛",SUBSTITUTE(CHAR(10)&Sheet1!$A1,CHAR(10),"゛",COLUMNS($C:C))),)+0,"")  次に、Sheet3のC1セルをコピーして、Sheet3のD1~K1の範囲に貼り付けて下さい。  次に、Sheet3のA1セルに次の数式を入力して下さい。 =IF(ISNUMBER($C1),MIN(OFFSET($C1,,,1,LEN(Sheet1!$A1)-LEN(SUBSTITUTE(Sheet1!$A1,CHAR(10),))+1)),"")  次に、Sheet3のB1セルに次の数式を入力して下さい。 =IF($A1="","",TEXT($A1,"yyyy/mm/dd")&IF(LEN(Sheet1!$A1)-LEN(SUBSTITUTE(Sheet1!$A1,CHAR(10),))<1,"",CHAR(10)&TEXT(SMALL($C$1:$K$1,2),"yyyy/mm/dd"))&IF(LEN(Sheet1!$A1)-LEN(SUBSTITUTE(Sheet1!$A1,CHAR(10),))<2,"",CHAR(10)&TEXT(SMALL($C$1:$K$1,3),"yyyy/mm/dd"))&IF(LEN(Sheet1!$A1)-LEN(SUBSTITUTE(Sheet1!$A1,CHAR(10),))<3,"",CHAR(10)&TEXT(SMALL($C$1:$K$1,4),"yyyy/mm/dd"))&IF(LEN(Sheet1!$A1)-LEN(SUBSTITUTE(Sheet1!$A1,CHAR(10),))<4,"",CHAR(10)&TEXT(SMALL($C$1:$K$1,5),"yyyy/mm/dd"))&IF(LEN(Sheet1!$A1)-LEN(SUBSTITUTE(Sheet1!$A1,CHAR(10),))<5,"",CHAR(10)&TEXT(SMALL($C$1:$K$1,6),"yyyy/mm/dd"))&IF(LEN(Sheet1!$A1)-LEN(SUBSTITUTE(Sheet1!$A1,CHAR(10),))<6,"",CHAR(10)&TEXT(SMALL($C$1:$K$1,7),"yyyy/mm/dd"))&IF(LEN(Sheet1!$A1)-LEN(SUBSTITUTE(Sheet1!$A1,CHAR(10),))<7,"",CHAR(10)&TEXT(SMALL($C$1:$K$1,8),"yyyy/mm/dd"))&IF(LEN(Sheet1!$A1)-LEN(SUBSTITUTE(Sheet1!$A1,CHAR(10),))<8,"",CHAR(10)&TEXT(SMALL($C$1:$K$1,9),"yyyy/mm/dd")))  次に、Sheet3のA1~K1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。  次に、Sheet2のA1セルに次の数式を入力して下さい。 =IF(ROWS(A$1:A1)>COUNT(Sheet2!$A:$A),"",VLOOKUP(SMALL(Sheet2!$A:$A,ROWS(A$1:A1)),Sheet2!$A:$B,2,FALSE))  次に、Sheet2のA1セルをコピーして、Sheet2のA2以下に貼り付けて下さい。  これで、並べ替えた結果がSheet2のA列に表示されます。

bigbigman
質問者

お礼

ご教授ありがとうございます。 なるべくシンプル方法でいけたらと思っていました。 少し、コード?が長いと思いましたが、 可能性の一つを教えていただいて、感謝しています。

関連するQ&A

専門家に質問してみよう