Wpis z mikrobloga

#excel #vba

Hejka,

co tu jest zle.

'Range("E6").Value = "00:00"
'For i = 1 To 95
' Range("e6").Offset(i, 0) = Range("e6").Offset(i, 0) + "00:15"
'Next i

chce zeby od E6 w dol co komorke dodawal 15 minut a mi wychodzi cos a la

00:15
00:15
00:15
00:15
00:15
00:15

gdzie zwalilem?
  • 10
'Range("E6").Value = "00:00"

'For i = 1 To 95

' Range("e6").Offset(i, 0) = Range("e6").Offset(i, 0) + "00:15"

'Next i


@Nemootji: w drugim offsecie powinno byc cos typu offset(-1+i,0) ale nie chce przyjac takiego kodu :/
@Koliber86:
No generalnie błąd masz taki, że do komórki Range("e6").Offset(i, 0) w każdej interacji bierzesz jej wartość (czyli 0), zamiast wartość komórki wyżej i dodajesz 00:15, więc w efekcie masz 00:15.

Ale do dodawania czasu jest DATEADD -- podmień sobie w swoim kodzie 00:00 na 1, 00:15 na 2, a w pętli odwołuj się do komórki wyżej (czyli Range("e6").Offset(i - 1, 0)), to zobaczysz, że dodawanie liczb działa (kod niżej).

Sub
w drugim offsecie powinno byc cos typu offset(-1+i,0) ale nie chce przyjac takiego kodu :/


@Koliber86: to coś słabo się starałeś, bo kod jest prawidłowy i by rozwiązał problem.
W takich przypadkach zamiast pętli znacznie lepiej (przy małej ilości danych - mała różnica, ale przy większej - kod zadziała dużo szybciej) użyć wbudowaną funkcjonalność - na przykład seria danych:

Sub test()
Range("E6").Value = "00:00"
Range("E6").Resize(96).DataSeries , , , "00:15"
End Sub
@Koliber86:

bo kod jest prawidłowy i by rozwiązał problem.

no i oczywiście zamiast + "00:15" musisz to zamienić na czas (liczbę), a sposobów jest sporo:

+TimeValue("00:15")
+CDate("00:15")
+15/60/24
W ostatniej wersji korzystamy z tego, że czas to po prostu liczba w zakresie 0-1 (część doby),