2017-05-22 2 views
0

フロアを使用して、列の使用範囲を時間別データに変換しようとしています。 59::私は=FLOOR(A2, "1:00")ExcelのVBA - フロアの列の使用済み行

ので2016年7月1日07を持っているExcelの機能として

59.0000000は私がやりたい01-07/2016 7時

なります最初の行がヘッダーである列AだけのVBAでこれ。私はdateTimeに後で変換する必要があると思うが、それについてはまだ考えていない(困難ではない)。

.Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp)) = _ 
    Application.WorksheetFunction.Floor(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp), "1:00") 

をしかし、引数エラーの間違った番号を取得:

私はこれを試してみました。

この:

.Range("A:A") = Application.WorksheetFunction.Floor("A:A", "1:00") 

は、型の不一致を示します。

どのように進むかわかりません。

+2

全体列A内のすべての使用のセルのためにそれを達成するためのループが必要になります。 –

+1

A2の値に基づいて階であるB2に数式を入力する必要があります。 –

+0

別のセルに入力するとMy Excelの式が機能します。代わりにVBAを使用して、日付列を変換したいと思います。または、新しいものを作成することもできます。 – Jamsandwich

答えて

1

VBAでWorksheetFunction.Floor Methodはワークシート=Floor関数とは少し異なっている:

WorksheetFunction.Floor(Arg1, Arg2) 

両方引数Arg1Arg2タイプdoubleである必要があります。

だから、1/24の代わり"1:00"(1時間は、一日の1/24であるため、同じである)と値.Cells(i, "A").Valueの代わりに、セルの参照名"A:A"を使用する必要があります。 また、あなたは、あなたが数式を入力して、同じセルを参照しようとするあなたは、循環参照エラーが発生します

Option Explicit 'First line at your module ensures you declare any variables 

Public Sub FloorFormat() 
    Dim lastRow As Long 

    With Worksheets("Sheet1") 'Your sheet name here 
     lastRow = .Range("A" & .Rows.Count).End(xlUp).Row 'find last used row 

     Dim i As Long 
     For i = 1 To lastRow 'do the following for all used rows in column A 
      .Cells(i, "A").Value = Application.WorksheetFunction.Floor(.Cells(i, "A").Value, 1/24) 
     Next i 
    End With 
End Sub 
+0

メソッドそのものの背景情報@pehをThaknしてください。私は自分自身を見つけるのに苦労しました。私はループが必要かもしれないと考え始めました。私はこれが標準的な慣行だと思います。私はこれを試して、私が確認したら正しいものとしてマークします。 – Jamsandwich

+1

パーフェクト。私は行1のヘッダーを無視するように私は2に値を変更しました。 – Jamsandwich

関連する問題