『日付の並び替え』(masayo) よろしくお願いします。os xp バージョン07です。 日付入力のとき20.5.1と入力していました。並び替えをしたとき、20.5.13の方が、先に来るのです。10こくらいだと手直しをと思いましたが、200こ以上あるのに気づきマクロで何とかならないものかと思いおねがいします。 ---- >20.5.1 これは、H20.5.1のことですよね。 別の列にでも =("H"&A1)*1 の様な式で日付に変更した後 この列で並べ替えをするのはどうでしょう。 (HANA) ---- 衝突しましたがそのままアップします。 日付けデータではなく、文字列ということはないですか? データ→区切り位置 で日付けデータに一括変換できます。 そうしたら、きちんと並び変わってくれるはずです。 (MARBIN) ---- >日付けデータではなく、文字列ということはないですか? 文字列でも、ソートしたら 20.5.1 20.5.13 と並びますね。 もし文字列でしたら、↓の方法で文字列の日付けを日付けデータに変換できます。 セル(同時複数可 一列に限る)を選択した状態で データ→区切り位置→「カンマやタブ・・」にチェック→次へ→次へ →列のデータ形式:日付け→完了 (MARBIN) ---- やばい。 「20.5.1」は「2020/5/1」に変換されますね。 私のレスはパスしてください・・・。 失礼しました。 (MARBIN) ---- ありがとうございました。 ---- すいません。説明不足でした、 日付の入力を、20.1.1と入力しました。20.01.01と入力すると並び替えができるようですが入力し直すしですと数が多すぎて・・・・ 現状 19.1.10       19.1.16 19.1.4 19.11.22 19.2.14 となっています。どうしたらいいでしょうか。 また入力する人が、変わるので、できれば、19.1.1と入力しても19.01.01と入力してもOKに出来ないでしょうか。 お願いします。 ---- HANAさんの方法は試されたのでしょうか?(ROUGE) ---- ぶつかりました。 日付の入力に関しては、略さずにちゃんと書いた方が良いと思いますが。 まちまちだと後で治すときに苦労すると思います。 厚生年金のようにあやふやにならないように・・・。 私事ですが、4百個以上あるファイルの連番ずらすのに1個1個手作業で直しました。 あれこれ方法を考えているより、そっちのが速いから。 ま、ろくに確認しないで間違えたのだからしょうがないかなって感じでした。 BJ ---- >日付入力のとき20.5.1と入力していました。 今回苦労している原因はこの部分です。 正確には「日付入力のつもりで20.5.1と入力して」いたということになります。           ^^^^^^^^ エクセルはその入力の仕方では「日付とは関係のない文字列」にしかなりません。 後の処理を楽にしようと思ったら、元号を含めた入力をするべき。   >入力する人が、変わるので、できれば、19.1.1と入力しても19.01.01と入力してもOKに出来ないでしょうか。   入力する日付が必ず平成である、と限定できるのならマクロである程度は可能ですが、 入力規則で元号を入力するように強制するか、 オートコレクトのオプションで例えば、「+++」を入力すると「h」に変換させるなど、 確実に日付として入力させる工夫をするのが良いかもしれません。   一応サンプル程度で(あまり変わった入力には堪えられない)。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("A2")).Count = 0 Then Exit Sub Application.EnableEvents = False Target.Value = DateValue("h" & Replace(Target.Text, ".", "-")) Target.NumberFormatLocal = "ge.m.d" Application.EnableEvents = True End Sub   (みやほりん)(-_∂)b ---- 同じくマクロでやっつけてしまう方法です。 ボタンに登録してもよろしいなぁ。 範囲を選択して実行します。 みやほ大明神のと違って標準モジュールにコピペします。      (弥太郎) '--------------------- Sub 並べ替え() Dim tbl As Variant Application.ScreenUpdating = False tbl = Selection.Value Sheets.Add With ActiveSheet .Range("b1").Resize(UBound(tbl, 1), UBound(tbl, 2)) = tbl .Range("a1").Resize(UBound(tbl, 1)).Formula = "=(""H"" & b1) * 1" .Range("a1").Resize(UBound(tbl, 1), UBound(tbl, 2) + 1).Sort _ key1:=.Range("a1"), order1:=xlAscending tbl = .Range("b1").Resize(UBound(tbl, 1), UBound(tbl, 2)) Application.DisplayAlerts = False .Delete Application.DisplayAlerts = True End With Range(Selection.Address(1, 1)).Resize(UBound(tbl, 1), UBound(tbl, 2)) = tbl Application.ScreenUpdating = True End Sub ---- そうそう、複数列の範囲を指定する際には日付が左端に来るよう選択します。        (弥太郎)