2017-05-22 4 views
0

Ich versuche, den verwendeten Bereich einer Spalte zu stündlichen Daten mit Boden zu konvertieren.Excel VBA - Floor on Column verwendete Zeilen

als Funktion in Excel habe ich =FLOOR(A2, "1:00")

So 2016.07.01 07: 59: 59,0000000 würde 01-07/2016 7:00

Ich möchte tun dies in VBA für nur Spalte A, wo die erste Zeile ein Header ist. Ich denke, ich müsste später zu dateTime konvertieren, aber ich habe noch nicht darüber nachgedacht (sollte nicht schwierig sein).

Ich habe dies versucht:

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

Aber falsche Anzahl an Argumenten Fehler.

Dieses:

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

gibt einen Typenkonflikt.

Nicht sicher, wie es weitergeht.

+2

Sie zirkuläre Referenz Fehler erhalten, wenn Sie versuchen, eine Formel und verweisen auf die gleiche Zelle. –

+1

Sie müssen die Formel in B2 eingeben, die Floor basiert auf A2 Wert –

+0

Meine Excel-Formel funktioniert, wie ich es in einer anderen Zelle eingeben. Ich möchte jetzt stattdessen VBA verwenden, um die Datumsspalte zu konvertieren. Oder sogar eine neue erstellen, das wäre in Ordnung. – Jamsandwich

Antwort

1

Die WorksheetFunction.Floor Method in VBA ist ein wenig anders als die Arbeitsblätter =Floor Funktion:

WorksheetFunction.Floor(Arg1, Arg2) 

Beide Argumente Arg1 und Arg2 des Typs double sein müssen.

So müssen Sie 1/24 verwenden, anstatt "1:00" (was dasselbe ist, weil 1 Stunde 1/24 eines Tages ist) und einen Wert .Cells(i, "A").Value statt einen Zellenreferenznamen "A:A". Auch finden Sie eine Schleife brauchen es für jede verwendete Zelle in der ganzen Spalte 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 
zu erreichen
+0

Thakn Sie für die Hintergrundinformationen über die Methode selbst @peh. Ich habe irgendwie versucht, das selbst zu finden. Ich fing an zu denken, dass eine Schleife erforderlich sein könnte. Ich denke, das ist Standard, wenn man versucht, an Spalten mit irgendeiner Funktion zu arbeiten. Ich werde es ausprobieren und als korrekt markieren, sobald ich es bestätigt habe. – Jamsandwich

+1

Perfekt. Ich änderte den Wert von i auf 2 und ignorierte den Header in Zeile 1. – Jamsandwich