Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2013)
日付と文字列(と空白)が混在している列から、日付のみをソート
投稿日時: 20/08/14 03:03:42
投稿者: OkabeS

日付と文字列(と空白)が混在している列から、日付のみをソートするには
どうしたら良いでしょうか?
 
私の発想では、日付はシリアル値が出ていることから>0 フィルタで出来るのでは。
と思いましたが、駄目でした。
ご教授いただきたくお願いします。
 
Range("A1").CurrentRegion.AutoFilter Field:=3, Criteria1:=">0"
 
例:(日付のみフィルタしたい)
■フィルタ実行前
  A B C
1 8/14
2 9/18
3 5/15
4 未定
5     空白
6 4日後に入手
 
■フィルタ実行後
  A B C
1 8/14
2 9/18
3 5/15

回答
投稿日時: 20/08/14 06:39:10
投稿者: WinArrow
投稿者のウェブサイトに移動

>Range("A1").CurrentRegion.AutoFilter
と、CurrentRegionを使用していますが、
連続したセル範囲が、意図した範囲になりますか?
 
ActiveSheet.UsedRabge..AutoFilter
に変更してみたら
 
それから
未定

空白
の違いは?

回答
投稿日時: 20/08/14 07:55:26
投稿者: WinArrow
投稿者のウェブサイトに移動

質問
 
掲示の表では、
日付がA列に入っているように見えますが、
Field:=3・・・・はC列
で間違いはないでしょうか?
 

投稿日時: 20/08/14 11:54:11
投稿者: OkabeS

WinArrow様
 
ご回答ありがとうございます。
例の並び方が投稿時の見え方と違っていたようです。失礼しました。
以下に訂正いたします。
 
・連続したセル範囲は、意図した範囲にはなっています。
・未定と空白の違いについては、未定は文字列で、空白は何も記載が無いセルです。
 
Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:=">0"
■フィルタ実行前
 A     
1 8/14    
2 9/18   
3 5/15
4 後で入手
5 空欄
  
■フィルタ実行後
 A     
1 8/14    
2 9/18   
3 5/15   
 

回答
投稿日時: 20/08/14 13:51:36
投稿者: WinArrow
投稿者のウェブサイトに移動

>Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:=">0"
を実行の結果は、どのようになるのでしょうか?

回答
投稿日時: 20/08/14 14:09:47
投稿者: WinArrow
投稿者のウェブサイトに移動

>日付のみをソートするには
この部分が目に入りませんでした。
  
でオートイルタを使えばソートできると考えたのですか?
 
地中に空白セルはないという条件で。
セルA1の連続したセル範囲で
普通に並べ替えすれば、可能です。
オートイルタは不要です。

回答
投稿日時: 20/08/14 21:46:53
投稿者: simple

補助列を使ってはどうですか?
一行目は見出しとして、
2行目以降に
=OR(ISTEXT(A2),ISBLANK(A2))
といった式を入れ、
B列がFALSEのものという条件を追加して抽出すれば、日付だけになるのでは?
 
あとのソートはフィルタ付属のもので普通に。

投稿日時: 20/08/15 00:14:33
投稿者: OkabeS

WinArrow様
simple様
 
アドバイス頂きありがとうございました。
また、タイトルにソートと書いたのは誤りで、正しくは文面の通りフィルタです。
失礼しました。
 
初歩的だと思いますが、そもそもシリアル値に戻すのをしていませんでした。
例でいうところの、A列を以下のようにシリアルに戻すことで解決いたしました。
Selection.NumberFormatLocal = "G/標準"