- 締切済み
EXCELで横に並んだセルを同期して並び替えたい
気象庁発表の潮位予想データ(TEXTデータ)を加工して次の表(EXCEL)を作りました。 満 潮 干 潮 月 日 時刻 潮位(cm) 時刻 潮位(cm) 時刻 潮位(cm) 時刻 潮位(cm) 3 17 6:54 131 20:08 109 0:57 58 13:42 24 3 18 7:21 126 21:00 100 1:23 67 14:26 31 3 19 7:51 118 22:19 93 1:52 75 15:22 37 これを更に加工して横軸(日毎)の時間経過の順番に並び替えたいのです。 「例」 3 17 0:57 (58) 6:54 (131) 13:42 (24) 20:08 (109) 3 18 1:23 (67) 7:21 (126) 14:26 (31) 21:00 (100) 3 19 1:52 (75) 7:51 (118) 15:22 (37) 22:19 (93) 自分なりに「時刻」と「潮位(cm)」を一つのセルに結合して横軸でソートをかけて見ましたが 3 17 0:57 (58) 13:42 (24) 20:08 (109) 6:54 (131) 3 18 1:23 (67) 14:26 (31) 21:00 (100) 7:21 (126) 3 19 1:52 (75) 15:22 (37) 22:19 (93) 7:51 (118) となり、正しくソートされません。 しからばと、時刻と潮位を入れ替えて一つのセルに結合して再度ソートしてみたところ 3 17 109 (20:08) 131 (6:54) 24 (13:42) 58 (0:57) 3 18 100 (21:00) 126 (7:21) 31 (14:26) 67 (1:23) 3 19 118 (7:51) 37 (15:22) 75 (1:52) 93 (22:19) なんだかわからない結果となってしまいました。 また、このような横軸方向のソートでは縦軸方向に一括でソートすることは出来ず、一行毎のソートをしなければなりません。 つきましては前述の「例」のように時間軸でのソート結果を得る方法を教えていただけませんでしょうか? なお、当方まだ古いOffice 2000ユーザーです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- KURUMITO
- ベストアンサー率42% (1835/4283)
横方向のソートはできません。 次のように関数で処理すればよいでしょう。 例えばお示しの表がシート1に有ってA1セルには月日、B1セルには時刻、C1セルには潮位、D1セルには時刻、E1セルには潮位・・・・I1セルは潮位の文字列がそれぞれ入力されており、2行目から下方にはお示しのようなデータが並んでいるとします。 そこでお求めの表をシート2に表示させるとしてA1セルからH1セルにはシート1の1行目をコピーして貼り付けます。 A2セルには次の式を入力して下方にドラッグコピーします。 =IF(Sheet1!A2="","",Sheet1!A2) B2セルには次の式を入力して右横方向にI2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 =IF($A2="","",IF(MOD(COLUMN(A1),2)=1,SMALL(Sheet1!$B2:$I2,ROUNDUP(COLUMN(A1)/2,0)),INDEX(Sheet1!$B2:$I2,MATCH(A2,Sheet1!$B2:$I2,0)+1))) 最後に時刻の列はシリアル値で表示されますのでそれらの列をCtrlキーを押しながら選択したのちに右クリックして「セルの書式設定」の「表示形式」のタブから時刻の表示に変えます。
- A88No8
- ベストアンサー率52% (836/1606)
こんにちは > 満 潮 干 潮 > 月日 時刻 潮位(cm) 時刻 潮位(cm) 時刻 潮位(cm) 時刻 潮位(cm) > 317 6:54 131 20:08 109 0:57 58 13:42 24 > 318 7:21 126 21:00 100 1:23 67 14:26 31 > 319 7:51 118 22:19 93 1:52 75 15:22 37 上記のデータを調べてみると「干潮~満潮~干潮~満潮」のパターンがはっきり していますので利用したらいかがでしょう? (1)項目に列番号A~Iを振って説明します。データは3行目からとします。 列A B C D E F G H I 月日 時刻 潮位(cm) 時刻 潮位(cm) 時刻 潮位(cm) 時刻 潮位(cm) (2)これを加工して横軸(日毎)の時間経過の順番に並び替えるならデータの入っているシート(あるいは全く違うシートでも良い)のデータの無い部分に新しい表を作るのが楽かと。 難しい関数はいりません。コレをリンクで実現します。 「例」 列A F G B C D E H I 月日 時刻 潮位(cm) 時刻 潮位(cm) 時刻 潮位(cm) 時刻 潮位(cm) (3)新しいSheetのA1セルにデータSheetのA1セルをリンク(新しいSheetのセルA1に'='を入力してデータSheetのA1セルをWクリックする)します。すると下記のようなイメージに入力されますよ。 =[シート名]!A1 (4)上記のセルを新しいSheetのI列までコピーします。I1セルは下記の式になります。 =[シート名]!I1 (5)これでデータSheetの入力された1行目の項目と全く同じものがリンクで表示出来ました。 (6)この1行目を次の項目行にあたる2行目にコピーします。 A2セルには下記の式がコピー出来たと思います。 =[シート名]!A2 (7)いよいよデータ行の3行目です。準備として2行目を3行目に行コピーしましょう。 3行目のデータがデータSheetと同じデータにコピーされたように見えるでしょうか? (8)いよいよ式の編集です。 セルの中の式に書かれたセル名を欲しい順番になるように書き換えます。 列A3 B3 C3 D3 E3 F3 G3 H3 I3 こうなっているのを 列A3 F3 G3 B3 C3 D3 E3 H3 I3 このように入れ替える式の書き換え編集をする。 編集後のセルの中は下記のイメージになります。 A列 B列 C列 =[シート名]!A3 =[シート名]!F3 =[シート名]!G3 ...以下同じ H列とI列は同じなので編集不要ですね (9)このあと編集した3行目をデータの数だけ行コピーすれば出来上がりです(^-^)v
お礼
A88No8 様 速いご回答有難うございました。 まず、当方の説明不十分をお詫びしなければなりません。 干潮~満潮~干潮~満潮」のパターンがはっきりとおっしゃっておりますが、例を挙げた、今年3月中旬はたまたま「干潮~満潮~干潮~満潮」とそろってしまいました。 「実際には「満潮~干潮~満潮~干潮」と逆のパターンもありますし、日によっては最後の「満」又は「干」が無いときもあります。 このようなわけで、これを前提とした解決は出来ないのではないかと思います。 ただ、シートリンクをして別のシートで操作をするということは初心者の私には経験の無い手法ですので、一度今回ご指導をいただいた手法をじっくり試してみて今後生かしてみたいと思います。 本当に有難うございました。
補足
KURUMITO様 早速のご回答有難うございました。ご回答にあわせて表を作成しなおし、下記のSheet1とSheet2を作りました。 Sheet1 A B C D E F G H I 1 月日 時刻 潮位 時刻 潮位 時刻 潮位 時刻 潮位 2 1/1 7:10 138 18:13 137 0:26 11 12:40 73 Sheet2 1行目はSheet1のコピー貼り付け A列はA2に =IF(Sheet1!A2="","",Sheet1!A2)を貼り付けそのまま下方へコピーし出力は問題ありません。 B2に=IF($A2="","",IF(MOD(COLUMN(A1),2)=1,SMALL(Sheet1!$B2:$I2,ROUNDUP(COLUMN(A1)/2,0)),INDEX(Sheet1!$B2:$I2,MATCH(A2,Sheet1!$B2:$I2,0)+1))) を貼り付け、更にC2:I2の間にこれをドラッグコピーした結果、下記の通り出力されました。 A B C D E F G H I 1 月日 時刻 潮位 時刻 潮位 時刻 潮位 時刻 潮位 2 1/1 11 12:40 73 #REF! 137 0:26 138 18:13 何故か時刻のところに潮位、潮位のところに時刻が出力されているようです。恐らく関数の記述が一部違うのだろうと思いますが、私が使ったことの無い関数ばかりですので、関数辞書を片手に悪戦苦闘しております。 お手数をおかけしますがもう少々教えていただけませんでしょうか?