グッドデザイン賞を受賞したウォーターサーバー >>

Excelで「8:00:00」のように時刻が入っているセルがあります。
時刻は昇順にすると[0:00:00」~「23:59:59」の順で並ぶと思いますが
これを「7:00:00」~「6:59:59」といったように、7時始まりの昇順にしたいです。
関数でもマクロでも構いません。
教えてください。

ちなみに時刻の入っているセルはQ列です。
よろしくお願いします。

A 回答 (8件)

こんにちは



対象の時刻はシリアル値と仮定します。
作業列を用意し、「時刻+17時間」を計算して、その時刻部分だけを取り出します。
(シリアル値の少数点以下だけを取り出すか、一旦文字列表示にして再度時刻化するなど)

これによって、
 7:00:00 → 0:00:00
 6:59:59 → 23:59:59
に置き換わることになりますので、この作業列の値をキーにして並べ替えれば宜しいかと。


上記は手操作で行っても大したことはないと思いますが、そのまんまの処理をマクロ化するなら以下のような感じでしょうか。
(対象範囲はQ列の最終行までとしてあります)

Sub Sample()
Const targetCol = "Q1"

Set rg = Range(targetCol)
rg.Offset(, 1).EntireColumn.Insert
Set rg = rg.Resize(Cells(Rows.Count, rg.Column).End(xlUp).Row)
rg.Offset(, 1).FormulaR1C1 = "=TIMEVALUE(TEXT(RC[-1]+17/24,""h:m:s""))"
rg.Resize(, 2).Sort key1:=rg.Offset(, 1), order1:=xlAscending
rg.Offset(, 1).EntireColumn.Delete

End Sub
    • good
    • 0

それはつまり、今日の朝7時から翌朝の7時になるまでという時間ですか?


タイムシートとかなら日付データを足すことはできないのでしょうか?
    • good
    • 0

作業列を用意する方法やマクロでの設定による回答がありますが、


色による並べ替えを使う方法も検討されてはいかが。
http://www4.synapse.ne.jp/yone/excel2010/excel20 …
設定手順の例
時刻が入っているQ列に[条件付き書式]を設定します。
 =Q2<TIME(7,0,0)
[塗りつぶしの色]を判りやすい色で設定。
これで、7:00:00未満の時刻のセルに色がついています。

[並べ替え]ダイアログにて[並べ替えのキー]で[セルの色]を指定、
[セルの色なし]が[上]になるようにし[ OK ]します。
これで7時始まりの並べ替えができていると思います。

条件付き書式の色を淡い色にすれば、気になるようなこともないと
思いますので、試してみてください。
「Excel 時刻の並び替え」の回答画像7
    • good
    • 0

少し勘違いが含まれがちな内容なので補足を入れておきます


通常時間をソートする場合記載の通り「0:00:00」~「23:59:59」となりますが、これに補数を加えても結果は変わりません。その理由は加算した値が「23:59:59」を超える場合にはDATETIMEとしては翌日になるからです。
以上を踏まえて検討した数式は
=IF(Q2<TIMEVALUE("7:00"),Q2+"41:00",Q2+"17:00")
時間がQ2にあるものと想定して、7時未満の時には翌日の時間を、それ以外の時には当日の時間になるように設定しています。表示形式を日付を含む形にしていただくと結果が分かりやすいかと思いますが、「YYYY/MM/DD HH:MM」で表記すると全て1900/01/01の時刻で補正する形となっています。
こちらの関数をR列にでも記載して、並べ替えを行えば問題ないかと思います。
    • good
    • 0

こんにちは!



VBAになりますが、一例です。
尚、データはA列からあり1行目が項目行になっているという前提です。

Sub Sample1()
 Dim lastRow As Long, lastCol As Long
  lastRow = Cells(Rows.Count, "A").End(xlUp).Row
  lastCol = Cells(1, Columns.Count).End(xlToLeft).Column+1
   Columns(lastCol).Insert
    Cells(1, lastCol) = "ダミー"
    With Range(Cells(2, lastCol), Cells(lastRow, lastCol))
     .Formula = "=Q2+IF(Q2<""7:00""*1,1)"
     .Value = .Value
    End With
   Range("A1").CurrentRegion.Sort key1:=Cells(1, lastCol), order1:=xlAscending, Header:=xlYes
   Columns(lastCol).Delete
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0

こういった物でも 構わないのですか?




作業セルでは、
0:00:00〜23:59:59
なのだけど、

表示セルで 作業セルを、
参照する際に、

7/24を 足しては、
どうでしょうか?
「Excel 時刻の並び替え」の回答画像3
    • good
    • 0

未検証情報ですみません


以下が参考になりませんか
https://dekiru.net/article/15202/
    • good
    • 0

降順で良いんじゃ?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング