Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Συναρτήσεις] Εύρεση και διατύπωση ημέρας συγκεκριμμένης ημερομηνίας. (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/2124-eiresi-kai-diatiposi-imeras-sygkekrimmenis-imerominias.html)

Fotis1991 17-10-12 21:35

Εύρεση και διατύπωση ημέρας συγκεκριμμένης ημερομηνίας.
 
Καλησπέρα σας.

Στο Α1, βάζουμε μια ημερομηνία. Π.χ 22/01/2013.
Ζητούμενο είναι_χρησιμοποιώντας τύπους_στο D1, να μας ενημερώνει "λέγοντας"

"Είναι η 4τη Τρίτη του μήνα Γενάρη"

Αν η ημερομηνία είναι 29/01/2013, τότε το αποτέλεσμα θα πρέπει να είναι"

"Είναι η τελευταία Τρίτη του μήνα Γενάρη"

Αν η ημερομηνίες είναι Σάββατο(π.χ 19/01/13 και 26/01/2013, θα πρέπει αντίστοιχα οι απαντήσεις να είναι"

"Είναι το 3το Σάββατο του μήνα Γενάρη"

"Είναι το τελευταίο Σάββατο του μήνα Γενάρη"

Tasos 18-10-12 10:56

1 Συνημμένο(α)
Καλημέρα Φώτη!
Έστω ότι η ημερομηνία βρίσκεται στο κελί Β2.

Ο βασικός τύπος που θα σου επιστρέψει το αριθμό 1,2,3,4 ή 5 είναι:

=SUMPRODUCT((WEEKDAY(ROW(INDIRECT("A"&B2-DAY(B2)+1&":"&"A"&B2));2)=WEEKDAY(B2;2))*1)

Ο τελικός τύπος που επιστρέφει βρίσκεται στο συνημένο και παίρνει λέξεις από λίστες που έχω δημιουργήσει.

Οι λίστες αυτές μπορεί κατά βούληση να μετατραπούν ή να καταργηθούν (αφού προηγουμένως τροποποιηθεί ο τελικός τύπος).
Διατηρώντας τις λίστες το αποτέλεσμα θα είναι πιο αξιόπιστο ως προς τα ονόματα ημερών και μηνών.

Καλή συνέχεια!

Τάσος

Edit: Το συνημμένο αντικαταστάθηκε με νέο βελτιωμένο (Περαιτέρω επεξεργασία τύπου)

kapetang 18-10-12 15:11

1 Συνημμένο(α)
Καλησπέρα στην παρέα

Μια άλλη προσέγγιση.

Σ’ αυτήν για να προσδιορίσουμε τη σειρά εμφάνισης μιας μέρας μέσα στο μήνα, χρησιμοποιούμε τον τύπο: INT((DAY(A1)-1)/7)+1, στον οποίο το κελί A1 περιέχει την ημερομηνία.

Για να βρούμε αν μια μέρα είναι η τελευταία στο μήνα, χρησιμοποιούμε τον τύπο:

MONTH(A1)<>MONTH(A1+7).

Το αρχείο που επισυνάπτω δείχνει μια εφαρμογή των παραπάνω σχέσεων.

Φιλικά/Γιώργος

Lefteris 18-10-12 15:29

1 Συνημμένο(α)
Καλησπέρα.

Στην λογική του Γιώργου ο βασικός τύπος.

Αν και βλέπω ότι αυτό που έδωσε ο Γιώργος είναι καλύτερο(Πιό προσιτό), μιας και το είχα δουλέψει, σας δίνω και την δική μου προσέγγιση.

Fotis1991 18-10-12 19:50

Καλησπέρα.

Πρόκειται για χιλιάδες γραμμές δεδομένων.

Τάσο δουλεύει σωστά αλλά η SUMPRODUCT και η INDIRECT, θα μου σκοτώσει τον υπολογιστή.

Λευτέρη πολύ καλή δουλειά.

Γιώργο, άψογη προσέγγιση.

Σας ευχαριστώ πολύ.

gr8styl 19-10-12 20:27

1 Συνημμένο(α)
Καλησπέρα σας.
Εγώ θα έλεγα ότι η προσέγγιση του Τάσου με χρήση πινάκων είναι η σωστή γιατί ή TEXT εξαρτάται από τις τοπικές ρυθμίσεις των WINDOWS και την γλωσσική έκδοση του EXCEL.
Επίσης οι υπολογισμοί του Γιώργου για 1η ... τελευταία επίσης είναι πολύ σωστοί.
Άρα ένας συνδυασμός των δύο θα έλεγα είναι το ιδανικό. βλ. συνημμένο
Οι SUMPRODUCT και INDIRECT δεν είναι αναγκαίες και μπορούν να αποφευχθούν.

Θανάσης

Tasos 20-10-12 00:47

1 Συνημμένο(α)
Καλησπέρα σε όλους!

Έχετε δίκιο Θανάση και Φώτη.
Και εγώ ήμουν και είμαι της γνώμης (και το έχω αναφέρει αρκετές φορές στο φόρουμ) ότι η Indirect() δεν είναι ότι καλύτερο ειδικά σε πολλά δεδομένα.

Την πρότεινα (λάθος μου) επειδή αυτή μου ήρθε πρώτη στο μυαλό και επειδή υπέθεσα ότι επρόκειτο για 50-100 γραμμές.

Αν όμως πρόκειται για πολλές χιλιάδες δεδομένα, ίσως πρέπει να αποφύγει κανείς τους τύπους για να ελαττώσει τους υπολογισμούς
της εφαρμογής και να αυξήσει την απόδοση της,

Ενδεικτικά, αν αντί για τύπους καταχωρηθούν σταθερές με VBA, o χρόνος που θα χρειαστεί για 500.000 κελιά σε ένα μέσο υπολογιστή είναι κάτω από 5 δευτερόλεπτα με αποτέλεσμα να μειωθούν δραματικά οι χρόνοι ανοίγματος, υπολογισμού και αποθήκευσης του αρχείου.

Επισυνάπτω ένα παράδειγμα για δοκιμές που θα φανεί χρήσιμο περισσότερο σε αυτούς που εργάζονται σε υπολογιστές με μη ελληνική τοπική ρύθμιση συστήματος.

Στο παράδειγμα αυτό:

Τα ονόματα των μηνών της Ελληνικής εμφανίζονται στην γενική πτώση (με χρήση Πίνακα (Array) και της συνάρτησης ChrW() στη VB)

Οι ημέρες εμφανίζονται στα ελληνικά με χρήση του παρακάτω Βρόχου επανάληψης:
Κώδικας:

    For i = 1 To 7
        GreekDayNames(i) = WorksheetFunction.Text(DateSerial(1, 1, i), "[$-408]dddd")
    Next

Έχω επίσης προσθέσει τη συνάρτηση GetVbChar() που μας διευκολύνει να αντικαθιστούμε
τα ελληνικά μέσα στον VBE (απαραίτητο σε μη ελληνικούς υπολογιστές).

Συμπληρώστε ας πούμε 500.000 δεδομένα και κάντε τις δοκιμές σας.

Καλό ξημέρωμα!

Τάσος


Η ώρα είναι 08:01.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2