VBA, Problem med argument i loop

Permalänk
Medlem

VBA, Problem med argument i loop

Det står helt still verkar det som.
Hur gör jag här?

Filen innehåller GPS data, i kolumn F har vi hastighet, i kolumn K klockslag.

i = 230 While Range("F" & i).Value < 100 And (Minute(Range("K" & i).Value) - Minute(Range("K" & i - 1).Value)) * 60 + Second(Range("K" & i).Value) - Second(Range("K" & i - 1).Value) < 2 i = i + 1 Wend Range(Cells(5, 1), Cells(i - 11, 1)).EntireRow.Delete

Tanken är att loopen ska köra så länge hastigheten är under 100 och tiden mellan "denna cell" och förra är en sekund.
Problemet är att GPS datan "hickar" ibland och då kan jag ha flera sekunder mellan datan, detta gör att hastigheten blir högre än 100.
Den långa koden efter And i whileraden kollar antalet sekunder, men om jag skriver =1 så hoppar den ur eftersom det inte är 1 sekund.
Om jag som ovan skriver < 2 så händer samma sak.

Det är säkert busenkelt men hur får jag programmet att stanna i loopen om det är mer än 1 sekund mellan tidscellerna?

Permalänk
Medlem
Permalänk
Medlem

detta kanske funkar?

i = 230 While Range("F" & i).Value < 100 And DateDiff("s", Range("K" & i - 1).Value, Minute(Range("K" & i).Value) < 2 i = i + 1 Wend Range(Cells(5, 1), Cells(i - 11, 1)).EntireRow.Delete

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem

EDIT: Problemet löst

Funkade inte så heller.
Lägger upp allt här så ni kan se.

Lägg detta som en modulkod och gör en breakpoint på rad ~70 (range.value = Avg).
Om ni sätter i=230 så går det lite snabbare till felet, felet uppkommer på rad 238 om jag inte minns fel i arket.
Om koden fungerar som den ska så borde i vara 266 när loopen är klar.

Filen som jag försöker köra koden på.
http://www.hellis.me/20100424_1257.csv
Högerklicka spara som

Sub test() Dim A As Double Dim wkbName As String wkbName = Application.Workbooks(1).Name extension = Mid(wkbName, InStr(wkbName, ".")) If extension = ".csv" And Range("A1").Value = "LATITUDE" And Range("B1").Value = "LONGITUDE" And Range("C1").Value = "ALTITUDE" And Range("D1").Value = "SPEED" Then Response = MsgBox(prompt:="Run GPS-Script?", Buttons:=vbYesNo) If Response = vbNo Then Exit Sub End If Else Exit Sub End If Columns(1).Insert Rows(2).Insert Rows(2).Insert Rows(2).Insert LastRow = Range("B" & Rows.Count).End(xlUp).Row Range("B5", "E" & LastRow).NumberFormat = "@" For Each Dcell In Range("B5", "E" & LastRow) A = Replace(Dcell.Value, ".", ",") Dcell.Value = A Next Columns(4).Insert Range("D:D").NumberFormat = "0" Range("D6").Value = "=ACOS(COS(RADIANS(90-B5)) *COS(RADIANS(90-B6)) +SIN(RADIANS(90-B5)) *SIN(RADIANS(90-B6)) *COS(RADIANS(C5-C6))) *6371000" Range("D7").Value = "=D6+ACOS(COS(RADIANS(90-B6)) *COS(RADIANS(90-B7)) +SIN(RADIANS(90-B6)) *SIN(RADIANS(90-B7)) *COS(RADIANS(C6-C7))) *6371000" Range("D7", "D" & LastRow).FillDown Columns(6).Insert Range("E:G").NumberFormat = "0" Range("F6").Value = "=((E5-E6)/1000)*60*60" Range("F6", "F" & LastRow).FillDown Columns(8).Insert Range("H:H").NumberFormat = "0" Range("H6").Value = "=SQRT(F6*F6+G6*G6)" Range("H6", "H" & LastRow).FillDown Columns(9).Insert Range("I:I").NumberFormat = "0.000" Range("I6").Value = "=G6/F6" Range("I6", "I" & LastRow).FillDown Range("J:J").TextToColumns Destination:=Range("J1"), DataType:=xlDelimited, Other:=True, OtherChar:="Z" Range("J:J").TextToColumns Destination:=Range("J1"), DataType:=xlDelimited, Other:=True, OtherChar:="T" Range("A1", "L1").ClearContents Range("B1").Value = "Latitude" Range("C1").Value = "Longitude" Range("D1").Value = "H-Distance" Range("E1").Value = "Altitude" Range("F1").Value = "V-Speed" Range("G1").Value = "H-Speed" Range("H1").Value = "3D-Speed" Range("I1").Value = "Glide" Range("J1").Value = "Date" Range("K1").Value = "Time" Range("A2").Value = "Max" Range("A3").Value = "Min" Range("A4").Value = "Avg" i = 120 While Range("F" & i).Value < 100 And (Minute(Range("K" & i).Value) - Minute(Range("K" & i - 1).Value)) * 60 + Second(Range("K" & i).Value) - Second(Range("K" & i - 1).Value) <> 1 i = i + 1 Wend Range(Cells(5, 1), Cells(i - 11, 1)).EntireRow.Delete i = 20 While Range("F" & i).Value > 100 i = i + 1 Wend Range(Cells(i + 8, 1), Cells(LastRow, 1)).EntireRow.Delete Rows("5:5").Select ActiveWindow.FreezePanes = True Range("A1").Select Cells.Columns.AutoFit Range("F5").ClearContents Range("H5", "I5").ClearContents Range("D5", "D9").Value = "0" i = Range("B" & Rows.Count).End(xlUp).Row While Range("E" & i).Value < 1400 i = i - 1 Wend FreefallEnd = i + 1 i = 10 While Range("F" & i).Value < 140 i = i + 1 Wend FreefallStart = i - 1 Range("D2").Value = Range("D" & FreefallEnd).Value Range("F2").Value = "=MAX(F" & FreefallStart & ":F" & FreefallEnd & ")" Range("F3").Value = "=MIN(F" & FreefallStart & ":F" & FreefallEnd & ")" Range("F4").Value = "=AVERAGE(F" & FreefallStart & ":F" & FreefallEnd & ")" Range("G2").Value = "=MAX(G" & FreefallStart & ":G" & FreefallEnd & ")" Range("G3").Value = "=MIN(G" & FreefallStart & ":G" & FreefallEnd & ")" Range("G4").Value = "=AVERAGE(G" & FreefallStart & ":G" & FreefallEnd & ")" Range("H2").Value = "=MAX(H" & FreefallStart & ":H" & FreefallEnd & ")" Range("H3").Value = "=MIN(H" & FreefallStart & ":H" & FreefallEnd & ")" Range("H4").Value = "=AVERAGE(H" & FreefallStart & ":H" & FreefallEnd & ")" Range("I2").Value = "=MAX(I" & FreefallStart & ":I" & FreefallEnd & ")" Range("I3").Value = "=MIN(I" & FreefallStart & ":I" & FreefallEnd & ")" Range("I4").Value = "=AVERAGE(I" & FreefallStart & ":I" & FreefallEnd & ")" End Sub

Permalänk
Medlem

Har löst det själv
Tack ändå