@canyon611ultimate (kg)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

excel vbaにてある列の範囲で秒数を時刻変換したい場合

excel vbaにてある列の範囲で秒数を時刻変換したいと思い、以下のコードを反映しようと思ったのですが、type mismatchのエラーが起きてしまいました。おそらくrangeの中のtypeがおかしいのだとは思いますが、適切な設定方法が分かりませんでしたので、お分かりの方がいればよろしくお願いします。

Sub sample()

Range("b7:b200") = WorksheetFunction.Text(Range("b7:b200") / 24 / 60 / 60, "hh : mm : ss")

End Sub

1 likes

2Answer

ある列の範囲で秒数を時刻変換

エクセルの日時は1900/1/1 0:0:0から日で起算したシリアル日と呼ばれる「数値」です。

NumberFormatLocal 書式プロパティがセルに設定され、数値が画面では日付に変換表示されます。(値はそのまま)

Range("B7:B200")
B7    数値(秒 or シリアル日)
B8  テキスト ・・・エラー
B9  空行   ・・・エラー
...
B200

WorksheetFunctionはVBAからエクセル関数を利用するクラスです。Textにて数値をテキストに変換するエクセル関数です。

セルのシリアル日の数値を書式("hh : mm : ss",NumberFormatLocal)でテキストに変換します。

ある列の範囲でシリアル日をテキスト時刻変換

さて、
エクセルにて、一度、"C7"に  = B7 / (24*60*60) の式を
入れ、"C8:C200"へコピペし、
"hh : mm : ss"の書式を設定し、想定される画面表示がされるか?シリアル日であるか?確認してください。

1Like

変更値が不定なのが原因だと思われます。
ForやFor Each等で行毎に処理したら如何でしょうか。

併せて、元の値が示されていないので分かりませんが
日付分を除算すると元の値の秒数等まで変わってしまう様に思うので、
下記例では抜いてあります。

Sub sample()
    For Each Rng In Range("B7:B200")
        Rng.Value = WorksheetFunction.Text(Rng.Value, "hh : mm : ss")
    Next
End Sub
0Like

Your answer might help someone💌