- ベストアンサー
エクセルで並べ替え
エクセルで、以下のような表を作っています。 No. 名前 時刻 1 山田花子 8:28 2 鈴木敏雄 8:15 3 大田大輔 8:44 4 田村昌一 8:21 ・ ・ ・ 毎回違う時間に入室されるお客様リストです。 この表で、毎回違う時刻を入力して、毎回早い者順に並べ替え表示をさせています。 質問なのですが、この時刻を入力した時点で、自動で並べ替えを行う方法はあるのですか? 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
並べ替えたあと、Noも1から順番に振り直すのでしょうか? 一応そのように仮定して作ってみました。 No.、名前、時刻がそれぞれA列、B列、C列と仮定しています。 シートタブを右クリックして「コードの表示」を選択すると、VBAの入力画面が開きます。 右の白い画面に以下のマクロをコピーして貼り付けます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Integer If Target.Cells(1, 1).Column <> 3 Then Exit Sub Application.EnableEvents = False Columns("A:C").Sort Key1:=Range("C2"), Header:=xlYes '***ここから次の***までは、自動的にA列が自動的に採番されるように 'なっていれば不要 For i = 2 To Cells(Rows.Count, "C").End(xlUp).Row Cells(i, "A").Value = i - 1 Next i '*** Application.EnableEvents = True End Sub これで、時刻を入力した時点で並べ替えが行われます。 No.は自動的に入力されます。 もしNo.が =ROW()-1 のように、並べ替えても自動的に正しい数字になるように入力されているのであれば、上記マクロの***で囲まれた部分は不要なので削除してください。
その他の回答 (2)
A B C D E F G 1 No. 名前 時刻 No. 名前 時刻 2 1 山田花子 8:28 1 鈴木敏雄 8:15 3 2 鈴木敏雄 8:15 2 田村昌一 8:21 4 3 大田大輔 8:44 3 山田花子 8:28 5 4 田村昌一 8:21 4 大田大輔 8:44 6 5 7 6 G2: =IF(ISERROR(SMALL(C:C,E2)),"",SMALL(C:C,E2)) F2: =IF(G2="","",INDEX(B:B,MATCH(G2,C:C,0)))
- imogasi
- ベストアンサー率27% (4737/17069)
そういうデータ入力をしたときなどに、ある作業を行わせるのはVBAでイベントという概念で捉えてコードを書くと実現できます。 質問例では、セルの値のChangeイベントです。 ソート(並べ替え)そのもののVBAコードは、実際に1例の操作をして、マクロの記録をとれば簡単に知れます。 VBAでイベントという概念は学習の第二ステップなので、質問者が勉強しようと思うかどうか。