- ベストアンサー
エクセル セル内並び替え その後 セル同士並び替え
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (4)
[No.2補足]へのコメント 》 列がA以外にも複数行あり、この図のようにA、B、Cというように 》 行を列に置き換えるということはできない それを想定して、私が同じシートを使用していないことを理解すべきです。 Sheet4 の右側(最終結果)を[コピー]して、それを Sheet1 のA列に[値の貼り付け]を行えば済むことでは? なお、貴方の質問は[並び替え]の「基本的なこと」を逸脱しています。
お礼
返事が遅く成りましたが、 ご協力ありがとうございました☆
補足
確かにおしゃる通り、逸脱しているのかもしれません。
- MASUKUBO
- ベストアンサー率22% (4/18)
お示しの表が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列については「セルの書式設定」の「配置」のタブで「折り返して全体を表示する」を選択します。列の幅も十分にとってください。
お礼
区切り位置を利用する方法は使えると思います。 ただ、入力情報によってうまくいったり、いかなかったりするケースがありました。 丁寧な説明ありがとうございます。
添付図参照 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 に右側に示す
補足
図がわかりやすくて素晴らしいです。 ありがとうございます。 ただし、列がA以外にも複数行あり、この図のようにA、B、Cというように行を列に置き換えるということはできない制約があるのです。 その説明が不足していました。
- kagakusuki
- ベストアンサー率51% (2610/5101)
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列に表示されます。
お礼
ご教授ありがとうございます。 なるべくシンプル方法でいけたらと思っていました。 少し、コード?が長いと思いましたが、 可能性の一つを教えていただいて、感謝しています。
お礼
シンプルな方法ですね。 解決しました。 ありがとうございました☆ お盆を挟んでしまい、お礼が遅くなってしまいました(≧≦)