• ベストアンサー

ECXELで並べ替え

たくさんのデータが入っているのですが、これを逆の順に並べ替えたいのです。 一行ダミーに行番号をつけて、並べ替えたらと提案したのですが、何度もいろいろなデータが送られてくるので、いちいち そういう操作をするのではなく、何か簡単に出来る方法はないかと言われました。 良い方法かありましたら教えてください。

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.5

> 簡単に出来る方法はないかと言われました。 その方は、Excelのことを全く知らないか、すごく詳しい方ではないでしょうか? いちいち番号を振って並べ替えするのは面倒だから、簡単に出来るようにしろ と言うことだと思います。 試されているのかも・・・? 下記のVBAコードを設定すると、セルA1をWクリックするだけで、 見出しに指定した行を除いて、上下を逆順に表示します。 多分、こういうことだと解釈しましたが、もし、そうであれば、詳しい手順を 書くますので、テストしてみてください。 ・使用しているシートのシート名タブを右クリックして「コードの表示」を選択します。 ・開いたコードウィンドウに下記コードをコピーして貼り付けます。 ・3行目の数字に見出し行数(固定する行数で1行目から数える。)を指定します。 ・Alt+ Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。 ・メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を  「中」にして[OK]します。 ・以上で設定完了です。  セルA1を「ダブルクリック」してみてください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _   Cancel As Boolean) Const MidashiGyousu = 1 '<---- 見出し行数を指定(固定行数) Dim Rw As Long If Target.Address <> "$A$1" Then Exit Sub Cancel = True Application.ScreenUpdating = False Rw = Range("A65536").End(xlUp).Row Range("IV" & MidashiGyousu + 1).Select ActiveCell.FormulaR1C1 = "1" Selection.AutoFill Destination:=Range("IV" & _ MidashiGyousu + 1 & ":IV" & Rw), Type:=xlFillSeries Rows(MidashiGyousu + 1 & ":" & Rw).Select Selection.Sort Key1:=Range("IV" & MidashiGyousu + 1), _   Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, _   MatchCase:=False, Orientation:=xlTopToBottom Columns(256).Delete Application.ScreenUpdating = False Range("A1").Select beep: beep: beep End Sub

pochi0413
質問者

お礼

ありがとうございました。あなたがおっしゃるように、依頼者は、Excelのことを全く知らないに近いです。 だから、こういう質問ができるのかもしれません。 そういう私はというと、プログラムはまったく分かりませんので、Excelが提供しているコマンドや、せいぜいマクロの記録を使った程度のことしかできません。 おかげで助かりました。本当にありがとうございました。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

>入っているデータを、全く逆に並べたいということなのです 「入っている」であって「入ってくる」ではないのですか。 #5のご解答のように、入った都度即座にある順序に並べるのですか。 データを入れ終わってから、さてソートしようで良いのでしょうか。 >全く逆に並べたいということなのです 「逆に」とは「降順」のことですか。 >全く逆に並べたいということなのです データがABCDとこの順序に入ってきてセルの、上から (または左から)DCBAのセルの上下順序にセルにデータをセットしたいと言うことでしょうか。 ---- (1)データを入れ終わってから、さてソートしようで良い. (2)DCBAのセルの上下順序にする と言うことでVBAで Sub test01() d = Range("A1").CurrentRegion.Rows.Count 'MsgBox d For i = 1 To Int(d / 2) w = Cells(i, "A") Cells(i, "A") = Cells(d, "A") Cells(d, "A") = w d = d - 1 Next i End Sub A列A1からの内容が上下反転します。 C列ならAをCに全て置換えてください。

pochi0413
質問者

お礼

ありがとうございました。 できました。

  • mabibobi
  • ベストアンサー率50% (1/2)
回答No.3

こんにちは… 何度も色々なデータが送られてくるという事は、いちいち データの並べ替えという処理をしたくないという事でしょうか? だとるすと、マクロを組む以外はないのではと思うのですが…?? Private Sub Worksheet_Change(ByVal Target As Range) ********************************************* Columns("A:A").Select Selection.Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin ********************************************** End Sub そのデータを入れるシートに次のマクロを入れると、 セルの値が変更される度に、並べ替えが実行されるのですが???

  • shiga_3
  • ベストアンサー率64% (978/1526)
回答No.2

並べ替えの中で昇順と降順を選択できると思いますので、降順にすれば逆になると思いますが、そういう解釈でよろしいでしょうか。

pochi0413
質問者

補足

データはランダムなので、ダミーの行に番号をつければ簡単に降順、昇順はできるのですが、 それ以外の方法で、入っているデータを、全く逆に並べたいということなのです。

回答No.1

>たくさんのデータが入っているのですが いくつぐらい? >何度もいろいろなデータが送られてくるので 具体的に頻度は? >これを逆の順に並べ替えたいのです。 何を基準に? >一行ダミーに行番号をつけて 使用目的は? 具体的にどんなフィールドがあって、どのフィールドで何をしたいか書いた方がいいと思いますよ。

関連するQ&A

専門家に質問してみよう