serpico75 Δημοσιεύτηκε Φεβρουάριος 18, 2021 #1 Κοινοποίηση Δημοσιεύτηκε Φεβρουάριος 18, 2021 Ήθελα μία βοήθεια στο excel. Ας πούμε ότι έχω καθορίσει μία στήλη να γράφει τις ημηρομηνίες ως εξής (παραθέτω 5 γραμμές σε αυτή τη στήλη): 10/01/2021 15/01/2021 25/01/2021 10/02/2021 11/02/2021 Αυτή τη στιγμή, όταν γράφω π.χ για την πρώτη γραμμή 10/1, και πατήσω Enter, το γράφει ολόκληρο 10/01/2021. Αυτό που θέλω να κάνω, είναι να μου γράφει για έτος το 2020. π.χ. γράφοντας σε αυτή τη στήλη 10/01 και πατώντας Enter, να γράφεται αυτόματα 10/01/2020. Να με γυρνάει ένα χρόνο πίσω. Να μη χρειάζεται να πληκτρολογήσω ολόκληρη την ημερομηνία με το 2020. Πώς θα μπορούσα να το κάνω αυτό, χωρίς να αλλάξω ημερομηνία συστήματος; Μέσα από το Excel. Link to comment Share on other sites More sharing options...
slalom Φεβρουάριος 18, 2021 #2 Κοινοποίηση Φεβρουάριος 18, 2021 Και γιατι να μη γραφει 10/01/2019, εννοω πού να ξερει οτι θες το 2020, αν δεν το γραψεις? Link to comment Share on other sites More sharing options...
Oric Φεβρουάριος 18, 2021 #3 Κοινοποίηση Φεβρουάριος 18, 2021 2 Link to comment Share on other sites More sharing options...
IOANNISTSA Φεβρουάριος 18, 2021 #4 Κοινοποίηση Φεβρουάριος 18, 2021 πριν 2 ώρες, το μέλος Oric έγραψε: Με Custom Format βλέπεις 2020 αλλά το κελί έχει τιμή 2021 .. 2 Link to comment Share on other sites More sharing options...
IOANNISTSA Φεβρουάριος 18, 2021 #5 Κοινοποίηση Φεβρουάριος 18, 2021 (edited) Εισαγωγή του Κώδικα (copy/paste) σε ένα Module Sub ApplicationActivateEvents() Application.ScreenUpdating = True Application.EnableEvents = True End Sub Εισαγωγή του Κώδικα (copy/paste) στο Worksheet που γίνεται η εισαγωγή. Private Sub Worksheet_Change(ByVal Target As Range) Dim AC_Value As Date Dim Datev As Variant On Error GoTo Exit_Sub AC_Row = ActiveCell.Row AC_Column = ActiveCell.Column AC_Value = Cells(ActiveCell.Row - 1, ActiveCell.Column) Datev = AC_Value On Error GoTo 0 Input_Col = 3 Input_Row1 = 4 Input_Row2 = 10 Application.ScreenUpdating = False Application.EnableEvents = False Do While Target.Column = Input_Col Do While Target.Row >= Input_Row1 And Target.Row <= Input_Row2 On Error Resume Next Cells(AC_Row - 1, AC_Column).NumberFormat = "dd/mm/yyyy" On Error Resume Next If DatePart("m", Datev) <= 2 Then Cells(AC_Row - 1, AC_Column) = DateValue(AC_Value) - 366 Else Cells(AC_Row - 1, AC_Column) = DateValue(AC_Value) - 365 End If Application.ScreenUpdating = True Application.EnableEvents = True Exit Sub Loop Exit Sub Loop Exit_Sub: Application.ScreenUpdating = True Application.EnableEvents = True End Sub Η εισαγωγή (ημερομηνίες) γίνεται στα κελιά C4 έως C10, στο Macro αλλάζεις τις μεταβλητές Ιnput κατά το δοκούν. Input_Col = 3 Input_Row1 = 4 Input_Row2 = 10 Το Workbook πρέπει να γίνει Save As Excel Binary Workbook (*.xlsb) για να λειτουργούν οι Μακροντολές. Έγινε επεξεργασία Φεβρουάριος 18, 2021 από IOANNISTSA 1 Link to comment Share on other sites More sharing options...
tassoss Φεβρουάριος 19, 2021 #6 Κοινοποίηση Φεβρουάριος 19, 2021 16 hours ago, serpico75 said: Ήθελα μία βοήθεια στο excel. Ας πούμε ότι έχω καθορίσει μία στήλη να γράφει τις ημηρομηνίες ως εξής (παραθέτω 5 γραμμές σε αυτή τη στήλη): 10/01/2021 15/01/2021 25/01/2021 10/02/2021 11/02/2021 Αυτή τη στιγμή, όταν γράφω π.χ για την πρώτη γραμμή 10/1, και πατήσω Enter, το γράφει ολόκληρο 10/01/2021. Αυτό που θέλω να κάνω, είναι να μου γράφει για έτος το 2020. π.χ. γράφοντας σε αυτή τη στήλη 10/01 και πατώντας Enter, να γράφεται αυτόματα 10/01/2020. Να με γυρνάει ένα χρόνο πίσω. Να μη χρειάζεται να πληκτρολογήσω ολόκληρη την ημερομηνία με το 2020. Πώς θα μπορούσα να το κάνω αυτό, χωρίς να αλλάξω ημερομηνία συστήματος; Μέσα από το Excel. δύο στήλες; 4 Link to comment Share on other sites More sharing options...
IOANNISTSA Φεβρουάριος 25, 2021 #7 Κοινοποίηση Φεβρουάριος 25, 2021 Θα μπορούσε ο serpico75 να μας ενημερώσει εάν τον βοηθησε κάποια απάντηση στο πρόβλημά του. 1 Link to comment Share on other sites More sharing options...
serpico75 Φεβρουάριος 27, 2021 Author #8 Κοινοποίηση Φεβρουάριος 27, 2021 (edited) Ευχαριστώ για τις απαντήσεις, και με καλύψατε πλήρως. Ακριβώς αυτό που ήθελα. Έδωσαν στις απαντήσεις τους @Oric και @IOANNISTSA. Το είχα σκεφτεί και δοκιμάσει και γω. Απλά δεν μου δούλεψε διότι δεν έβαζα το 2020 σε εισαγωγικά. Δηλαδή: αντί dd/mm/"2020" (σωστό) έβαζα mm/dd/2020 (δεν δουλεύει). Αυτό ακριβώς ήθελα. Επίσης, το δούλεψα ως εξής (όπως δείχνει ο @tassoss). Ας πούμε ότι στη στήλη A έχω τις ημερομηνίες με 2021. Έκανα τις καταχωρήσεις, λοιπόν, με 2021 στην Α. Στην Β, είχα φτιάξει τον τύπο π.χ. για την πρώτη γραμμή =DATE(YEAR(A1)-1; MONTH(A1); DAY(A1)) (είχα φτιάξει και πώς θέλω να φαίνονται οι ημηρομηνίες - άλλο ο τύπος άλλο η προβολή) Ετσι στην B, ερχόντουσαν οι ημερομηνίες με 2020 με βάση τον τύπο. Εάν ήθελε κάποιος να έχει τις ημερομηνίες με το 2020 όχι με τον τύπο, αλλά με τις τιμές-ημερομηνίες, σε μία άλλη στήλη π.χ. στην C, πάει και κάνει copy την στήλη B, και στην C κάνει paste values. @tassoss Το δοκίμασα ακριβώς όπως το δείχνεις στη φωτό και χτυπάει λάθος μήνυμα στο Excel. Σίγουρα δε σου χτυπάει error? Μήπως δίνεις κάτι λάθος? Σας ευχαριστώ ! Έγινε επεξεργασία Φεβρουάριος 27, 2021 από serpico75 2 Link to comment Share on other sites More sharing options...
IOANNISTSA Φεβρουάριος 28, 2021 #9 Κοινοποίηση Φεβρουάριος 28, 2021 Δοκίμασα το Function EDATE του @tassoss και λειτουργεί, το ενσωμάτωσα και στο Macro σαν Application.WorksheetFunction και λειτουργεί καλύτερα απο την αφαίρεση ημερών ανεξαρτήτως έτους. Εάν θέλεις η αλλαγή να γίνεται στο κελί εισαγωγής και η ημερομηνία (οπτικά) και η τιμή κελιού να είναι ίδια μόνο με Macro υπάρχει λύση. Private Sub Worksheet_Change(ByVal Target As Range) Dim AC_Value As Date Dim Datev As Variant On Error GoTo Exit_Sub AC_Row = ActiveCell.Row AC_Column = ActiveCell.Column AC_Value = Cells(ActiveCell.Row - 1, ActiveCell.Column) Datev = AC_Value On Error GoTo 0 Input_Col = 3 Input_Row1 = 4 Input_Row2 = 10 Application.ScreenUpdating = False Application.EnableEvents = False Do While Target.Column = Input_Col Do While Target.Row >= Input_Row1 And Target.Row <= Input_Row2 On Error Resume Next Cells(AC_Row - 1, AC_Column).NumberFormat = "dd/mm/yyyy" Cells(AC_Row - 1, AC_Column).Formula = Application.WorksheetFunction.EDate(Datev, -12) Exit Do Loop Exit Do Loop Exit_Sub: Application.ScreenUpdating = True Application.EnableEvents = True End Sub 1 Link to comment Share on other sites More sharing options...
serpico75 Φεβρουάριος 28, 2021 Author #10 Κοινοποίηση Φεβρουάριος 28, 2021 (edited) @IOANNISTSA Δεν ξέρω μήπως του @tassoss δε μου δουλεύει, λόγω του ότι δουλεύω σε Excel 2003. Αν και δε νομίζω να είναι αυτό. Έγινε επεξεργασία Φεβρουάριος 28, 2021 από serpico75 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now