Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6658 / 13646 ツリー ←次へ | 前へ→

【43966】ソートについて Yoshi 06/10/31(火) 12:14 質問[未読]
【43970】Re:ソートについて ひげくま 06/10/31(火) 12:51 発言[未読]
【43973】Re:ソートについて Jaka 06/10/31(火) 15:04 発言[未読]
【43975】Re:ソートについて Jaka 06/10/31(火) 15:13 発言[未読]
【43976】Re:ソートについて Kein 06/10/31(火) 15:47 回答[未読]

【43966】ソートについて
質問  Yoshi  - 06/10/31(火) 12:14 -

引用なし
パスワード
   ここで質問する内容ではないかもしれません。
本題に入ります。

10.4.19
11.3.26
12.3.20
14.5.2
5.10.7
6.4.22
8.9.15
9.3.14

上の数字はそれぞれ年.月.日を表しています。ソートをマクロで組んで古い順番に並べ替えを実行した結果なのですが、本来なら、5.10.7が一番上に来るはずなのに、期待した結果になりませんでした(マクロではなく、普通にエクセルの機能としてのソートでやっても同じ結果)。そこで、元号が一桁の数字を二桁にして実行してみたら(5を05、6を06・・・)うまくいったのですが、なんとしても一桁の数字は一桁のままで古い順番にソートをかけたいのですが、何かいい方法はないでしょうか?

【43970】Re:ソートについて
発言  ひげくま  - 06/10/31(火) 12:51 -

引用なし
パスワード
   ▼Yoshi さん:
こんにちは。

値が、数字扱いではなく、文字列扱いになっている可能性が大きいと思いますが、セルの書式がどうなっているのか、と、実際のマクロを見ないと、何とも言えません。

実際に組んだマクロを載せてみてはいかがですか?

【43973】Re:ソートについて
発言  Jaka  - 06/10/31(火) 15:04 -

引用なし
パスワード
   作業列を使って作業列に
=TEXT(LEFT(A1,FIND(".",A1,1)-1),"00")
この列を第1キーとしてソート。

追加
上記は年用だけですから、月、日の作業列も使えば万全かと...。

月の作業列用
=TEXT(LEFT(MID(A1,FIND(".",A1,1)+1,10),
FIND(".",MID(A1,FIND(".",A1,1)+1,10),1)-1),"00")

日の作業列用
=TEXT(SUBSTITUTE(RIGHT(A1,2),".",""),"00")

【43975】Re:ソートについて
発言  Jaka  - 06/10/31(火) 15:13 -

引用なし
パスワード
   作業列を使うなら、こっちのほうが簡単でしたね。
この列をキーにしてソートすれば良いです。
(意味不明の場合は、関数を入れたセルの表示形式を日付にすればわかります。)

=--("H" & SUBSTITUTE(A1,".","/"))

【43976】Re:ソートについて
回答  Kein  - 06/10/31(火) 15:47 -

引用なし
パスワード
   実データは数値もピリオドも半角ですね ? で、日付形式になっているわけ
ではなくて、単に数値とピリオドを打ち込んだだけの値であるとします。
その範囲を選択して、以下のコードを実行してみて下さい。
長くて分かりにくいコードですが、いちおうこちらのテストは成功しています。

Sub MySort()
  Dim C As Range
  Dim Ary As Variant
 
  If TypeName(Selection) <> "Range" Then Exit Sub
  With Selection
   If .Columns.Count > 1 Then Exit Sub
   If .Areas.Count > 1 Then Exit Sub
   If InStr(1, .Cells(1).Value, ".") = 0 Then Exit Sub
   Application.ScreenUpdating = False
   .Offset(, 1).EntireColumn.Resize(, 2).Insert xlShiftToRight
   .TextToColumns DataType:=xlDelimited, Other:=True, _
   OtherChar:="."
   .Resize(, 3).Sort Key1:=.Columns(1), Order1:=xlAscending, _
   Key2:=.Columns(2), Order2:=xlAscending, Key3:=.Columns(3), _
   Order3:=xlAscending, Header:=xlGuess, _
   Orientation:=xlSortColumns
  End With
  For Each C In Selection
   With WorksheetFunction
     Ary = .Transpose(.Transpose(C.Resize(, 3).Value))
   End With
   C.Value = Join(Ary, ".")
  Next
  Selection.Offset(, 1).EntireColumn.Resize(, 2).Delete xlShiftToLeft
  Application.ScreenUpdating = True
End Sub

6658 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free