Monika Krawczyk

Monika Krawczyk Analyst, Getin Noble
Bank

Temat: znowu daty :(

Witam,

excela się dopiero zaczynam uczyć, a widzę, że tutaj sami eksperci, dlatego stwierdziłam, że Was poproszę o pomoc :)

Zad.1
Mając daną datę, jak policzyć:
1. datę ostatniego dnia miesiąca
2. dzień tygodnia ostatniego dnia miesiąca

Zad.2
Mając w jednej kolumnie 500 dat, jak znaleźć pierwszą datę, która się powtarza?

konto usunięte

Temat: znowu daty :(

Dla daty w A1

=DATA(ROK(A1);MIESIĄC(A1)+1;0)

=DZIEŃ.TYG(DATA(ROK(A1);MIESIĄC(A1)+1;0);2)
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: znowu daty :(

Witaj. Andrzej już przedstawił dobre rozwiązania. Ja dorzucę coś od siebie.
Zad.1
Mając daną datę, jak policzyć:
1. datę ostatniego dnia miesiąca

=DATA(ROK(A1);MIESIĄC(A1)+1;1)-1

2. dzień tygodnia ostatniego dnia miesiąca

=TEKST(DATA(ROK(A1);MIESIĄC(A1)+1;1)-1;"dddd")

Zad.2
Mając w jednej kolumnie 500 dat, jak znaleźć pierwszą datę, która się powtarza?

Tutaj można to zrobić dwuetapowo. Najpierw do komórki B1 wpisz sobie formułę
=LICZ.JEŻELI($A$1:A1;A1)>1
i przeciągnij ją w dół.

Następnie wpisz sobie taka formułkę, która zwróci Ci pierwszą datę, która się powtarza:
=ADR.POŚR("A"&PODAJ.POZYCJĘ(PRAWDA;$B:$B;0))
Mariusz Jankowski edytował(a) ten post dnia 19.10.08 o godzinie 17:44
Monika Krawczyk

Monika Krawczyk Analyst, Getin Noble
Bank

Temat: znowu daty :(

Za zadanie 1 dziękuję :)

Natomiast jeśli chodzi o zadanie 2 i proponowane rozwiązanie. Nie jestem pewna, czy zostałam dobrze zrozumiana.. W tych 500-set komórkach, nie ma dwóch takich samych dat. Ma być taki sam dzień i miesiąc, rok się różni :)
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: znowu daty :(

Rozumiem. W takim razie ustaw sobie pierwszy format daty np. 2008-10-19 i formułę z LICZ.JEŻELI zamień na:
=LICZ.JEŻELI($A$1:A1;PRAWY(A1;5))>1
- druga formuła pozostaje bez zmian :-).Mariusz Jankowski edytował(a) ten post dnia 19.10.08 o godzinie 19:11
Monika Krawczyk

Monika Krawczyk Analyst, Getin Noble
Bank

Temat: znowu daty :(

Cały czas coś nie pasuje... W drugiej kolumnie wypisuje wszędzie FAŁSZ, przez co w trzeciej #N/D!
Mariusz Jankowski

Mariusz Jankowski Programista
Excel/VBA

Temat: znowu daty :(

Działa, działa tylko pewnie masz inaczej sformatowane komórki z datami. W takim razie wysyłam rozwiązanie w załaczniku - nieco inne, bardziej uniwersalne, z kolumnami pomocniczymi

http://www.speedyshare.com/762557754.htmlMariusz Jankowski edytował(a) ten post dnia 19.10.08 o godzinie 19:43
Monika Krawczyk

Monika Krawczyk Analyst, Getin Noble
Bank

Temat: znowu daty :(

Ślicznie dziękuję za pomoc :)
Monika Krawczyk

Monika Krawczyk Analyst, Getin Noble
Bank

Temat: znowu daty :(

Mam jeszcze 2 problemy :(

Mam podane dwie daty:
(A1) 2001-03-01 (B1) 1951-01-31
i mam policzyć ile upłynęło pełnych lat, miesięcy i dni.

Użyłam funkcji:
=DATA.RÓŻNICA(B1;A1;"y") -> 50
=DATA.RÓŻNICA(B1;A1;"ym") -> 1
=DATA.RÓŻNICA(B1;A1;"md") -> -2

Jak poprawić, by liczył poprawnie.. i dlaczego, w tym przypadku wychodzą dni ujemne, a w każdym innym liczy dobrze?

----

Znając datę urodzin mam wyznaczyć 10 kolejnych rocznic urodzin przypadających w tym samym dniu tygodnia co dzień urodzin.

Policzyłam to, ale niezbyt efektywną metodą. Ciekawi mnie, czy jest jakiś sensowny sposób liczenia takich rzeczy.

konto usunięte

Temat: znowu daty :(

<cut>
mi wyszlo tak dla problemu nr 1:

Private Sub CommandButton1_Click()
Data1 = Cells("1", "A").Value
Data2 = Cells("2", "A").Value

Cells("3", "A").Value = DateDiff("yyyy", Data1, Data2, vbMonday, vbFirstJan1)
Cells("4", "A").Value = DateDiff("m", Data1, Data2, vbMonday, vbFirstJan1)

' Ile dni to musimy sprawdzac dodatkowo godziny, minuty i sekundy... = brak danych
' Cells("3", "A").Value = DateDiff("d", Data1, Data2, vbMonday, vbFirstJan1)

' Przypadek kiedy miesiac poczatkowy jest wiekszy od koncowego ("nie urodzilismy sie" jeszcze)
If Month(Data1) > Month(Data2) Then
Cells("3", "a").Value = Cells("3", "a").Value - 1
Cells("4", "a").Value = Cells("4", "a").Value - 1
' Przypadek kiedy miesiac poczatkowy jest rowny koncowemu ale dni sie roznia
ElseIf Month(Data1) = Month(Data2) Then
' Kiedy dzien urodzenia jest wiekszy od koncowego czyli niepelny rok
If Day(Data1) > Day(Data2) Then
Cells("3", "a").Value = Cells("3", "a").Value - 1
Cells("4", "a").Value = Cells("4", "a").Value - 1
End If
End If

End Sub

konto usunięte

Temat: znowu daty :(

Sprawdź czy o to chodzi

=DATA.RÓŻNICA(B1;A1;"y")
=DATA.RÓŻNICA(B1;A1;"m")
=DATA.RÓŻNICA(B1;A1;"d")


i inna metoda

=ROK(A1)-ROK(B1)
=MIESIĄC(A1)-MIESIĄC(B1)+12*(ROK(A1)-ROK(B1))-1
=A1-B1

konto usunięte

Temat: znowu daty :(

<cut>
przypadek drugi:
Dim getBDate As Date
Dim interval, x As Byte
Dim curdate As Variant

getBDate = Cells("1", "B").Value
interval = 10

x = Weekday(getBDate, vbMonday)
a = Month(getBDate)
B = Day(getBDate)
j=0
For i = Year(getBDate) + 1 To Year(getBDate) + 10
curdate = Str(i) + "-" + Str(a) + "-" + Str(B)
If x = Weekday(curdate, vbMonday) Then
Cells(2+j, "B").Value = curdate
j=j+1
End If
Next i
End Sub

konto usunięte

Temat: znowu daty :(

Do calosci pasuje jak znalazl rekurencja ;>
Monika Krawczyk

Monika Krawczyk Analyst, Getin Noble
Bank

Temat: znowu daty :(

Mają być PEŁNE lata, miesiące i dni, czyli
miesiąc < 13,
dzień < 32.

konto usunięte

Temat: znowu daty :(

Ad2.

Wpisz daty urodzin od A1 (data urodzin) w pionie

np w B1 formuła tablicowa zatwierdzana Ctrl+Shift+Enter

=INDEKS($A$1:$A$94;MIN.K(JEŻELI(DZIEŃ.TYG($A$1:$A$100;2)=DZIEŃ.TYG(A$1;2);WIERSZ($A$1:$A$100);"");WIERSZ(1:1)))

i przeciągasz do 10 wystąpień.Andrzej Jankowski edytował(a) ten post dnia 21.10.08 o godzinie 15:24

konto usunięte

Temat: znowu daty :(

Monika Krawczyk:
Mają być PEŁNE lata, miesiące i dni, czyli
miesiąc < 13,
dzień < 32.
czyli ma dodatkowo sprawdzac sensownosc wpisanej daty?
Janusz K.

Janusz K. Ekspert rozwoju i
przyszłości firm,
struktur, systemów
or...

Temat: znowu daty :(

Fryderyk Czarnecki:

Wplątało Ci się "j" jako licznik....

konto usunięte

Temat: znowu daty :(

Janusz K.:
Fryderyk Czarnecki:

Wplątało Ci się "j" jako licznik....
bo tak ma byc, lubie nic nie znaczace zmienne ktore zapychaja pamiec ;>
j jest po to aby w przypadku znalezienia wiekszej ilosci wynik nie nakladal sie na jedna komorke tylko wypisywal nizej...
Janusz K.

Janusz K. Ekspert rozwoju i
przyszłości firm,
struktur, systemów
or...

Temat: znowu daty :(

A tak wpisze się znacząco niżej... ;-))

konto usunięte

Temat: znowu daty :(

Janusz K.:
A tak wpisze się znacząco niżej... ;-))
wlasnie nie wpisze, zaczynam od j=0 dla bazy =2 i zwiekszam j o 1 przy trafieniu wiec obnizam poziom co 1 jednostke, jak dla mnie to nie jest znaczace a raczej zamierzone, ale byc moze masz racje jako ze jest juz prawie 16 i mysle raczej o tym co bede robil w wolnym czasie ;>

edit:
hym mimo oczekiwania z niecierpliwoscia upragnionej godziny zachowalem przytomnosc umyslu i moje "j" jest dobrze umieszone i spelania swoja funkcje ;>
jedynym bledem ktory widze teraz to brak uzycia zmiennej "interval" ktora powinna byc wpisana zamiast +10 (+interval)
Oczywiscie nie ma tez obslugi bledow np. jak ktos wpisze babol zamiast daty albo nic nie wpisze (no coz kochane On Error Resume Next zalatwi problem ;>) ale nie o to chyba chodzilo w tym zadaniu, chociaz przez chwile mialem wrazenie ze powinno byc.Fryderyk Czarnecki edytował(a) ten post dnia 21.10.08 o godzinie 15:28

Następna dyskusja:

daty w Excelu




Wyślij zaproszenie do