|    | 
     お世話になっております。 
 
kanabun氏 
 
今回の件で質問がまた出来てしまいました。 
お手数をかけてすいません。 
 
以前記載していただいたソースでソートをした場合 
日付を跨いだ際に時間が逆になってしまうことです。 
 
エクセルのデータを確認し、TypeNameでDoubleを確認しました。 
日付形式を見たところ、yyyymmddhhmmでした。 
表示ではhhmmと表示されていたので、誤認しました。 
それが原因で下記、マクロが上手く認識してくれなかったようです。 
年月日付を考慮したシリアル値の場合、 
>>If v(i, 1) > 0# And v(i, 1) < 1# Then 
の部分を修正すれば、上手く認識するでしょうか? 
 
度々、質問してしまい申し訳ありませんが、 
よろしくお願いします。 
 
 
Sub Try1() 
 Dim v, u, i As Long 
 Dim r As Range 
 Set r = Range("A1", Cells(Rows.Count, 1).End(xlUp).Offset(1)) 
 v = r.Value2 
 For i = 1 To UBound(v) 
   If v(i, 1) > 0# And v(i, 1) < 1# Then 
     u = v(i, 1) 
   Else 
     v(i, 1) = u 
   End If 
 Next 
 r.Offset(, 2).Value = v 
 r.Resize(, 3).Sort r.Columns(3), Header:=xlNo 
 Stop 
 Columns(3).Clear 
  
End Sub 
 
 
▼kanabun さん: 
>▼シンク さん: 
>>kanabun氏、返信ありがとうございます。 
>> 
>>下記の件について、試してみたところ問題があるようです。 
> 
>>If文の表現に問題があるのかと思いました。 
>>すべてElseにいっているようです。 
>>> For i = 1 To UBound(v) 
>>>   If v(i, 1) > 0# And v(i, 1) < 1# Then 
>そこのIf文は A列のデータが 9:00 や 8:12 など「時刻」データである 
>かどうかを判定しているところです。 
>もし 9:00 とかの時刻データであれば、そのセルの Valueは 9:00 で、  
>そのセルの Value2 は 0.375 です。(Value = 9:00 のセルの Value2 は 
>0.375 つまりシリアル値 です ) 
>したがって 
>>   If v(i, 1) > 0# And v(i, 1) < 1# Then 
>の行は 時刻の代入されているセルかどうかを調べているわけです。 
>時刻は 0:00 〜 24:00 の値をとりますから、Value2としては 
>0.0 〜 1.0 の範囲になります。それを判定しているわけです。 
>(ただし、空白セルも、時刻 00:00 のセルも 数値にすると 0 ですから 
>00:00 というデータがあると、ほんとはちょっとまずいのですが) 
>  
>で、 9:00 とか 8:12 とかのセルを選択して 以下を実行してDebugして 
>もらえないですか? 
>Sub checkDataType() 
> MsgBox TypeName(ActiveCell.Value) 
>End Sub 
>こちらで、9:00 とか 8:12 とかのセルをポイントして ↑を実行しますと 
>MsgBox には Double と表示されます。 
>そちらではどうですか? 
>もし String とか表示されてるとすると、これでは 
>>   If v(i, 1) > 0# And v(i, 1) < 1# Then 
>の範囲に入りません(文字列です)ので Else のほうに行っちゃって、 
>If文の判定に失敗してます。 
 
 | 
     
    
   |