VBA dátum probléma
2022-02-04T10:35:28+01:00
2022-02-04T14:54:44+01:00
2022-08-12T07:10:31+02:00
Wilson kapitány
Sziasztok!

Olyan gondom van, hogy van két mezőm, egy start date és egy end date mező, ezek eredetiben egyéni formátumban szerepelnek, a cellákban pl. az van, hogy 2023.01.01. és 2023.12.31. (az eslő a start date mezőben, a második meg az end date mezőben). Szeretném, ha egy for ciklus végigfutna az összes soron és egy következő, 3. oszlopba a két dátum alapján beírna konkrét szövegeket, pl a lenti módon, de egyelőre ezzel nem igen csinálja, valami nagyon hiányzik még ebből:

Dim lr2 As Integer lr2 = wsDest.Cells(Rows.Count, "A").End(xlUp).Row Dim i As Integer For i = 2 To lr2 If Cells(i, 15) = "2013.01.01." And Cells(i, 16) = "2013.12.31." Then Cells(i, 26) = "2023 ÉV" End If Next i
Segítségeteket előre is köszönöm.
Mutasd a teljes hozzászólást!
Szia!
Az elküldött mintában egyetlen 2013-as dátum sincs, így a vizsgált 

If Cells(i, 15) >= DateValue("1/1/2013") And Cells(i, 16) <= DateValue("12/31/2013") Then
feltétel biztosan nem teljesül egyetlen sorra.
Nézd meg a dátomokat az O és P oszlopban és aszerint alkosd meg a feltételt a vizsgálathoz.
Ha átírod a 12/31/2013 feltételt 2023-ra, akkor ez az eredmény.
Üdv.
Mutasd a teljes hozzászólást!
Csatolt állomány

  • Szia!
    Eldönthetnéd, hogy dátumok vagy szövegek vannak a cellákban és annak megfelelően kezelnéd a feltételeket.
    Ha dátumok vannak, akkor dátummal hasonlítsd a feltételben. Ezt munkalap dátum függvényekkel (DateValue vagy DateSerial) tudod elérni.
    De ha pl. az évre vagy kíváncsi, akkor a Year munkalap függvényt is használhatod és akkor számhoz kell hasonlítani.
    Üdv.
    Mutasd a teljes hozzászólást!
  • Most a két egyéni dátumos mezőből csináltam dátumot, nem fut hibára, de nem is írja be a 3. mezőbe a kívánt tartalmat:

    Dim lr2 As Integer lr2 = wsDest.Cells(Rows.Count, "A").End(xlUp).Row Range("O2:P" & lr2).Select Range(Selection, Selection.End(xlDown)).Select Selection.NumberFormat = "m/d/yyyy" Dim i As Integer For i = 2 To lr2 If Cells(i, 15) = "1/1/2013" And Cells(i, 16) = "12/31/2013" Then Cells(i, 26) = "2023ÉV" End If Next i
    Mutasd a teljes hozzászólást!
  • Szia!
    Továbbra is áll:
    Dátumot dátummal hasonlíthatsz csak. Most dátumot szöveggel szeretnél hasonlítani:
    A cellában  dátum van (csak egyéni formátumú, de dátum!) az "1/1/2013" pedig szöveg.
    Csinálj a szövegből dátumot vagy a cella legyen szövegformátumú. Az egyéni formátum még nem teszi szöveggé a cellában levő értéket!

    Üdv.
    Mutasd a teljes hozzászólást!
  • Most próbáltam ezzel a DateValue-val, egyelőre nincs siker.

    Dim lr2 As Integer lr2 = wsDest.Cells(Rows.Count, "A").End(xlUp).Row Range("O2:P" & lr2).Select Range(Selection, Selection.End(xlDown)).Select Selection.NumberFormat = "m/d/yyyy" Dim i As Integer For i = 2 To lr2 If Cells(i, 15) = DateValue("1/1/2013") And Cells(i, 16) = DateValue("12/31/2013") Then Cells(i, 26) = "2023ÉV" End If Next i
    Mutasd a teljes hozzászólást!
  • Szia!
    1. A dátum hasonlításnál mindegy a dátumformátum, a lényeg, hogy mindkettő dátum legyen.
    2. Szerintem a feltételnél van még probléma. Most azt vizsgálod, hogy az egyik cella január 1-e és a másik cella december 31-e. Azaz pontosan 1 évet nézel. Gondolom a köztes időszak (is) érdekelne.
    Ezért az első feltétel a >= a második pedig <= legyen.
    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia!

    Sajnos bár szerintem most dátum van mindenhol, valahogy mégsem érem el a kívánt hatást.

    Most már a start date és end date mezőben (azaz az O és P oszlopok, ezt a kódból látni) dátumok szerepelnek, ezt ellenőriztem, átalakítja. De a for ciklus mégsem csinálja azt, hogy amennyiben az O -ban megtalálja a 2023.01.01-et és a P-ben a 2023.12.31-et, akkor a Z mezőbe beírja azt, hogy "2023ÉV"... Ezekkel a kisebb vagy nagyobb egyenlőkkel sem csinál semmit sajnos.

    Lefut, de nem ad értéket a 26-os oszlopba.

    Dim lr2 As Integer lr2 = wsDest.Cells(Rows.Count, "A").End(xlUp).Row Range("O2:P" & lr2).Select Range(Selection, Selection.End(xlDown)).Select Selection.NumberFormat = "m/d/yyyy" Dim i As Integer For i = 2 To lr2 If Cells(i, 15) >= DateValue("1/1/2013") And Cells(i, 16) <= DateValue("12/31/2013") Then Cells(i, 26) = "ÉV23" End If Next i
    Mutasd a teljes hozzászólást!
  • Szia!
    Így távolból már nincs több ötletem. Nem tudnál egy rövid mintát közzétenni?
    Üdv.
    Mutasd a teljes hozzászólást!
  • De, az lesz :)
    Mutasd a teljes hozzászólást!
  • Szia, küldöm.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Szia!
    Az elküldött mintában egyetlen 2013-as dátum sincs, így a vizsgált 

    If Cells(i, 15) >= DateValue("1/1/2013") And Cells(i, 16) <= DateValue("12/31/2013") Then
    feltétel biztosan nem teljesül egyetlen sorra.
    Nézd meg a dátomokat az O és P oszlopban és aszerint alkosd meg a feltételt a vizsgálathoz.
    Ha átírod a 12/31/2013 feltételt 2023-ra, akkor ez az eredmény.
    Üdv.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Aztamindenit, természetesen a kódban 2023-at akartam írni, nem 2013-at, csak sok minden miatt annyira fáradt vagyok, hogy fejben 10 évvel visszatekertem ezeket a dátumokat és hiába néztem volna estig, nem vettem volna észre h mást írok a kódban és mást szeretnék valójában.

    Nagyon köszönöm.
    Mutasd a teljes hozzászólást!
  • Szia!
    Ezért jó a minta - vagy a kép - , mert enélkül bizony nehéz lett volna kitalálni az elírást.
    Hiszen a feltételed amúgy életszagú - pl. 10 éves lejáratú kötvény 2013-ban kibocsátva pont 2023-ban jár majd le. :)
    Üdv.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd