[[20080303161753]] 『vbaで30分⇒0.5に変換』(まこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『vbaで30分⇒0.5に変換』(まこ)

セルCに10:30と書いてあれば10.5に変換するマクロを作成しています。
毎回最終行が違うのでCUNTAを使用して変数Bにいれて
do whileでAとBを比較させてループさせる予定です。

30分⇒0.5に変換は
= DAY(A1) * 24 + HOUR(A1) + MINUTE(A1) / 60
上記の式を入れた後、セルの書式で標準に設定で可能です。

で今回の質問ですが
セルC の10:30を取得して計算し
また、セルCに戻す作業をするにはどうすればよいのでしょうか?

  
Sub Macro1()
'
' Macro1 Macro
'
 
'
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
 
a = 1
b = WorksheetFunction.CountA(Range("C:C"))
Range("c" & a) = "= Day("c" & a) * 24 + Hour("c" & a) + Minute("c" & a) / 60
 
Columns("C:C").Select
    Selection.NumberFormatLocal = "G/標準"
End Sub

 これだけでもOKですか?(ROUGE)
'----
With Range("C1", Range("C" & Rows.Count).End(xlUp))
    .Value = Evaluate("=TRANSPOSE(TRANSPOSE(IF(" & _
        .Address & "="""","""",TEXT(" & .Address & ",""[h]:mm"")*24)))")
    .NumberFormatLocal = "G/標準"
End With

 時刻を表すシリアル値を時間単位の数値に変換するには、24倍すればOK。
Range("c" & a)へ、計算式を入力し、時間を取得し、計算式をクリアして
定数として入力する、という手順をお考えのようですが、直接C列の値×24倍
の値を入力しても良いように思われます。
また、繰り返しもFor〜Nextループがシンプルか。
 
Sub Macro1()
Dim a As Long
Dim b As Long
 
b = WorksheetFunction.CountA(Range("C:C"))
For a = 1 to b
Range("c" & a) = Range("C" & a) * 24
Next a
 
Range("C:C").NumberFormatLocal = "G/標準"
End Sub
 
(みやほりん)(-_∂)b


ありがとうございます!!
試してみます

(まこ)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.