エクセルでとても困っています。日付による降順の並べ替えをするマクロを作ったのですが、うまく行きません。出来上がりが下のようになってしまうのです。
2006年4月7日
2006年4月6日
2006年4月5日
2006年4月4日
2006年4月3日
2006年4月28日
2006年4月27日
2006年4月26日
2006年4月25日
2006年4月24日
2006年4月21日
2006年4月20日
2006年4月19日
2006年4月18日
2006年4月17日
2006年4月14日
2006年4月13日
2006年4月12日
2006年4月11日
2006年4月10日
下記はそのマクロです。
Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
ちなみにセルA1には”日付”と入っています。
マクロを使わずにシートの上でデータ→並べ替えで行うと下のようにうまく行きます。
2006年4月28日
2006年4月27日
2006年4月26日
2006年4月25日
2006年4月24日
2006年4月21日
2006年4月20日
2006年4月19日
2006年4月18日
2006年4月17日
2006年4月14日
2006年4月13日
2006年4月12日
2006年4月11日
2006年4月10日
2006年4月7日
2006年4月6日
2006年4月5日
2006年4月4日
2006年4月3日
色々といじってみたのですがどうしても解決できません。お力添えをお願いします!
No.4ベストアンサー
- 回答日時:
>DataOption1:=xlSortNormal
これは、テキストモードで並べ替えを行うモードです。
そのために日付順に並ばなくなっています。
「, DataOption1:=xlSortNormal」を削除して見てください。
------------------
DataOption1~DataOption3 は、1 番目~3 番目のキーのテキストを並べ替える方法を指定します。省略可能。
使用できる定数は、次に示す XlSortDataOption クラスの定数のいずれかです。 xlSortTextAsNumbers テキストを数値データとして並べ替えます。 xlSortNormal 既定値。数値データとテキスト データを別々に並べ替えます。
この回答への補足
無事解決いたしました。感謝いたします。
質問でも書きましたが、マクロではなくシート上で普通にソートすると出来るので、それをマクロの記録を使って記録したものが質問に書いたマクロです。よろしければ参考のためお教えいただきたいのですが、なぜ普通のシート上の操作を記録したマクロを実行すると違う処理になるのでしょうか。お時間があればよろしくお願い致します。
No.5
- 回答日時:
>なぜ普通のシート上の操作を記録したマクロを実行すると違う処理になるのでしょうか。
MSに聞かないと解りません・・・
仕様(バグ?)と思って割り切ることかも知れません。
Excel2000 しか使える環境に無い(DataOptionは2002以降の機能)ので何とも言えませんが、記録時に並べ替えのオプションを設定すれば、きちんと反映されるのかも知れません。
2000 では、記録マクロで xl~ と設定された値をそのまま使うとエラーになるものがあります。
変わりに数値で設定するとOKとか・・・
VBA作成者がエラーの原因を追及できる能力も必要でしょうね。
No.3
- 回答日時:
不思議ですね。
まったく自信無しですが、DateValueで値を入れ直してから実行してみたらどうなるでしょう?
Sub Test()
Dim tr As Range, r As Range
Set tr = Range(Range("A2"), Range("A65536").End(xlUp))
tr.NumberFormat = "yyyy年m月d日"
For Each r In tr
r.Value = DateValue(r.Value)
Next r
Range("A1").CurrentRegion.Sort Key1:=Range("A1"), _
Order1:=xlDescending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, SortMethod :=xlPinYin
End Sub
No.2
- 回答日時:
#1です。
そうですか。判っておられる方だったですね。
補足に上げていただいた、日付シリアル値を、質問文のSortのマクロ記録らしいコードで実行すると、正しく並びました。
もう一度テストをやり直してみてください。
同じ結果になるか。
私は下記を疑います。
●範囲指定(Selection)を全データもれなく(手操作で)指定して実行のこと。
それを手操作でしないなら、Range(○○).Select
を(カッコ内の○○に当たる部分を特に)最初に正しくコードで入れること。
ーーー
これ以上の原因究明は難物ですね。
No.1
- 回答日時:
質問にもならない問題と思います。
データが原因でしょう。
日付列が文字列で入っていませんか。
普通は日付列は、普通に入力すると、日付シリアル値という整数値に
なります。日付のソートは、何のこと無い整数での並べ替えに過ぎないです。
ところが何かの事情で文字列で入力されていると、文字列の最左桁文字から、右への1文字ずつ比べるソートになります。
データのどの行かをポイントして、数式バー部分に2006/12/1のように表示されるか見てください。
表示されないでしょう。その場合は日付シリアル値に
関数 かまたは
VB変換するのが良いでしょう。
A1の 2006年6月12日
を関数 =DATEVALUE(A1) でB1に
38880
に変えられます。B1の書式は日付書式で 例
yyyy年m月d日
で設定しておきましょう。
VBAならVBのDateValue関数があります。
実際データを見ずに独断してますが、万が一見当違いの場合はご容赦を。
この回答への補足
実はその点に関してはすでに調べてあり、すべて数式バー部分に2006/12/1のように表示され、またDATEVALUEもきちんと出ます。ですからシート上の操作で並べ替えを行うときちんとできるのだと理解しています。
ちなみに、マクロを使って並べ替えをした日付をyyyy年m月d日と日付シリアル値で表示しなおすと下のようになります。
38814
38813
38812
38811
38810
38835
38834
38833
38832
38831
38828
38827
38826
38825
38824
38821
38820
38819
38818
38817
2006年4月7日
2006年4月6日
2006年4月5日
2006年4月4日
2006年4月3日
2006年4月28日
2006年4月27日
2006年4月26日
2006年4月25日
2006年4月24日
2006年4月21日
2006年4月20日
2006年4月19日
2006年4月18日
2006年4月17日
2006年4月14日
2006年4月13日
2006年4月12日
2006年4月11日
2006年4月10日
何か見落としている点があるのでしょうか?お助け下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(エンターテインメント・スポーツ) 推しは、足りてますか? 2 2023/01/22 10:48
- 建設業・製造業 いつ家が建ったと思いますか? 1 2023/02/23 17:00
- サッカー・フットサル 北海道コンサドーレ札幌の話 1 2022/10/30 06:44
- 野球 北海道日本ハムファイターズの話 1 2022/08/11 19:58
- 野球 北海道日本ハムファイターズの話 1 2022/06/07 19:19
- 野球 北海道日本ハムファイターズの話 1 2022/08/25 17:12
- ヨーロッパ みなさん、旅行好きですか? 3 2023/02/16 12:25
- 野球 北海道日本ハムファイターズの話 1 2022/12/22 00:16
- 野球 北海道日本ハムファイターズの話 1 2023/01/05 17:18
- 野球 北海道日本ハムファイターズの話 1 2023/01/12 01:23
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
入力後に日付順になるように自動で並び替えしたいのです。
Excel(エクセル)
-
1の行を固定した上でVBAを用いて日付順に自動並べ替え
その他(Microsoft Office)
-
Excel 時刻の並び替え
Excel(エクセル)
-
-
4
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
5
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
6
エクセルVBA 最終行を選んで並び替え (空白セルを一番上に表示したい)
Excel(エクセル)
-
7
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
8
【Excel関数】別シートに日付順でデータを抽出する方法
Visual Basic(VBA)
-
9
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
10
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
11
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
i=cells(Rows.Count, 1)とi=cells(Rows.Count, 2)の違い
Visual Basic(VBA)
-
14
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
15
WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】
Excel(エクセル)
-
16
VBA:日付を配列に入れ別セルに転記するとデータ型が変わる
Visual Basic(VBA)
-
17
E列のセルに数値が入れば(空白でなければ)B列の同じ行のセルに色がつく
その他(Microsoft Office)
-
18
VBAにて 文字と数字が混在してるデータの並び替え
Excel(エクセル)
-
19
日付を昇順で並び替えし、空白は最後にしたいです。
その他(データベース)
-
20
Excel VBAにてソートが上手くいかない
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLサーバで和暦から西暦に変換...
-
エクセル 日付による並べ替え...
-
Accessの数値から時間に変換す...
-
SQLで部分的にGROUP BYしたいとき
-
テーブルの主キーをdate型...
-
エクセルのヘッダーを変数で指...
-
今日の日付が入った行のデータ...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
SQLite3のtext→date変換について
-
Excelの並び替え(先頭の文字以...
-
指定した年月までのデータを取...
-
日数算出SQL
-
oracle 文字列 01:45 を時間に...
-
一秒ごとに更新をかける方法
-
日付の最大値レコードを取得す...
-
SELECT結果の縦と横の入れ替え
-
WHERE句にて「30日前から今日ま...
-
wordの差し込み印刷での日付表示
-
日付型なら変数の先頭になん...
-
23時59分59秒までのデータを抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessの数値から時間に変換す...
-
今日の日付が入った行のデータ...
-
エクセル 日付による並べ替え...
-
SQLサーバで和暦から西暦に変換...
-
SQLで部分的にGROUP BYしたいとき
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
ExcelのSUMPRODUCTで日付の範囲...
-
テーブルの主キーをdate型...
-
Excelグラフの日付軸の日付がず...
-
oracle 文字列 01:45 を時間に...
-
23時59分59秒までのデータを抽...
-
SQL スクリプトのご相談
-
WHERE句にて「30日前から今日ま...
-
指定した年月までのデータを取...
-
DB2のSQL(日付)について
-
yyyy/M/dをyyyy/MM/ddに変換
-
重複するIDのデータを1行にま...
-
日付型なら変数の先頭になん...
-
日付書式に変換でこまっています!
-
Excelの並び替え(先頭の文字以...
おすすめ情報