About

Ονομάζομαι Γιάννης Βαρλάμης. Χρησιμοποιώ το excel (και πιο παλιά το Lotus123) καθημερινά στη δουλειά και στο σπίτι για πολλά χρόνια. Πόσα; Ε πολλά! Αν ρωτάτε για την ηλικία μου σας απαντώ ότι είμαι της γενιάς του «Μικρού Ήρωα».
Στο ιστολόγιο αυτό θα ανεβάσω μακροεντολές (ρουτίνες), συναρτήσεις χρήστη, συναρτήσεις φύλλου, τεχνικές, συμβουλές  και γενικά excel-λύσεις σε ερωτήματα που μου έθεσε η δουλειά μου, οι φίλοι μου, μέλη των κοινοτήτων που συμμετείχα στο παρελθόν ή απλώς η περιέργεια.
Μπορείτε να επικοινωνήσετε μαζί μου, στέλνοντας μου ένα μήνυμα (σχόλιο). Τα σχόλια σας ίσως να αργήσουν να εμφανιστούν, διότι θα τα διαβάζω πρώτα και αν περιέχουν κώδικα θα πρέπει πρώτα να τον “τρέξω”.

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

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

*********************************************************

Η σελίδα About που φιλοξενούσε έως τώρα τις περισσότερες συζητήσεις ξεπέρασε τα 600 σχόλια και μηνύματα, και με τις αρκετές συνδέσεις που περιέχει, έχει βαρύνει αρκετά.  Άλλα σχόλια η σελίδα αυτή, δεν θα φιλοξενήσει.
Για νεώτερες συζητήσεις χρησιμοποιείστε τη νέα σελίδα “Συζητήσεις”.
Φυσικά όλες οι άλλες σελίδες και σημειώματα του ιστολογίου παραμένουν ανοιχτά σε οποιοδήποτε σχετικό με το αντίστοιχο θέμα σχόλιό σας.
(5/1/2015) 

603 Responses to About

  1. Ο/Η Γιώργος λέει:

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

  2. Ο/Η vioannis λέει:

    Ευχαριστώ Γιώργο για τα μήνυμα σου. Τα «εντελώς κρυφά» φύλλα δουλεύουν το ίδιο καλά όπως τα φανερά. Δεν δημιουργούν κανένα πρόβλημα.Θα επανέλθω πιο αναλυτικά για αυτά.

  3. Ο/Η Γιώργος λέει:

    Ασχολήθηκα αρκετά με το θέμα της φιλτραρισμένης επικύρωσης. Όταν όμως θέλουμε να χρησιμοποιήσουμε απλά μια λίστα σε διαφορετικό φύλλο εργασίας και να ξεπεράσουμε την (αδυναμία) του excel να χρησιμοποιήσει λίστα σε διαφορετικό φύλλο, συμπεραίνω οτι ο μόνος τρόπος είναι μέσω της συνάρτησης offset. Και φαντάζομαι θα υπάρχει κάποιος εύκολος τρόπος σύνταξης γιατί μάλλον έχω κενά στην κατανόηση της σύνταξής της. Ευχαριστώ.

  4. Ο/Η vioannis λέει:

    Γιώργο!
    Αν κατάλαβα, ζητάς απλή επικύρωση με λίστα που είναι σε άλλο φύλλο.
    Γράψε τη λίστα σε οποίο φύλλο θέλεις.
    Επέλεξε την και δώσε ένα όνομα στη λίστα ας πούμε lista.
    ( Τύποι > ορισμός ονόματος > όνομα lista, εύρος: βιβλίο εργασίας, στο excel 2007) ή
    (Εισαγωγή > όνομα> ορισμός ονόματος στα προηγούμενα excel).

    Τώρα πας σε όποιο φύλλο θέλεις και ορίζεις την επικύρωση ως εξής:
    Επιτρεπομένη καταχώριση: Λίστα
    Προέλευση: =lista (με ίσον μπροστά) και OK.
    Είσαι έτοιμος.

    Αν δεν σε κάλυψα, άσε νέο μήνυμα.
    Φιλικά
    Γιάννης

  5. Ο/Η Γιώργος λέει:

    μα καλά…ξενυχτάς!!!. Το έκανα και δουλεύει οκ. Περίεργο, το ίδιο έκανα και πρίν και δεν μου επέτρεπε λίστα σε άλλο φύλλο. Όπως και να είναι, ευχαριστώ. Πάντως στο ίδιο θέμα, το επόμενο θα πρέπει να είναι φιλτράρισμα όπως πληκτρολογείς και επιλογή από την λίστα (όπως στα combo box βάσεων δεδομένων). Νομίζω οτι θα είναι χρήσιμο σε πολλούς που επιμένουν στο excel αντί της access (για τους δικούς του λόγους ο καθένας). Και πάλι ευχαριστώ.

  6. Ο/Η Σοφία λέει:

    Γεια σας.
    Μήπως μπορείτε να με βοηθήσετε με ένα μεγάλο πίνακα με αριθμούς. Θέλω να εφαρμόσω μορφοποίηση υπό όρους ώστε να ξεχωρίσω από τους αριθμούς, αυτούς που έχουν όλα τα ψηφία τους διαφορετικά. Παράδειγμα 356, 1234, 78054. Το ίδιο θέλω να κάνω για αυτούς που έχουν όλα τα ψηφία ίδια : 33, 555
    Ευχαριστώ πολύ
    Σοφία

  7. Ο/Η vioannis λέει:

    Περίεργο το πρόβλημα που βάζεις Σοφία, αλλά και ενδιαφέρον.
    Για τους αριθμούς με όλα τα ψηφία διαφορετικά , μορφοποίηση υπό όρους θα επιτύχεις με τον τύπο:

    =MIN(LEN(SUBSTITUTE(A1;ROW(INDIRECT("1:10"))-1;"")))=LEN(A1)-1 

    Αν θέλεις να χρησιμοποιήσεις τη συνάρτηση στο φύλλο (σε κελί) χρησιμοποίησε τον παρακάτω τύπο:

    =MIN(LEN(SUBSTITUTE(A1;{0;1;2;3;4;5;6;7;8;9};"")))=LEN(A1)-1 

    Ο οποίος θα επιστρέψει TRUE για αριθμούς που έχουν όλα τα ψηφία του διαφορετικά και θα επιστρέψει FALSE για όλους τους άλλους .
    Μπορείς να χρησιμοποιήσεις και τον πρώτο τύπο σε κελί , αλλά θα πρέπει να τον εισάγεις σαν τύπο-πίνακα με ε Ctrl+Shift+Enter. Δηλαδή θα γράψεις τη συνάρτηση στο κελί που θέλεις και δεν θα την εισάγεις με Enter, αλλά με Ctrl+Shift+Enter. Αν έχεις ήδη εισάγει τη συνάρτηση με Enter, πατάς F2 και στην συνέχεια Ctrl+Shift+Enter. Το excel θα περικλείσει τον τύπο σε άγκιστρα μόνο του, δηλαδή η συνάρτηση θα φαίνεται έτσι :

    {=MIN(LEN(SUBSTITUTE(A1;ROW(INDIRECT("1:10"))-1;"")))=LEN(A1)-1}

    Για την μορφοποίηση των αριθμών με όλα τα ψηφία ίδια , ο τύπος είναι:

    =MIN(LEN(SUBSTITUTE(A1;ROW(INDIRECT("1:10"))-1;"")))=0

    Και για το φύλλο (κελί):

    =MIN(LEN(SUBSTITUTE(A1;{0;1;2;3;4;5;6;7;8;9};"")))=0
    ή
    {=MIN(LEN(SUBSTITUTE(A1;ROW(INDIRECT("1:10"))-1;"")))=0}

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

  8. Ο/Η Ανώνυμος λέει:

    Γιάννη χάρηκα πολύ που βρήκα τα ίχνη σου μετά από 6 χρόνια (έστω και τυχαία).
    Να είσαι καλά φίλε και να βοηθάς με την ίδια καλοσύνη πάντα.
    Μάνος

  9. Ο/Η ΑΝΤ.ΧΡΙΣΤΟΔΟΥΛΟΥ λέει:

    Αγαπητέ Κε Βαρλάμη,
    κατ’αρχήν συγχαρητήρια για το ιστολόγιο σας που δίνει πολλές λύσεις σε χρήστες excel.
    Θα ήθελα εάν φυσικά σας είναι εύκολο να μου δώσετε την βοήθει σας για κάποιο πρόβλημα που έχω με φύλλο excel.
    Συγκεκριμμένα έχω:στο ΚΕΛΛΙ Α1 ΤΟΝ ΑΡΙΘΜΌ 1 ΣΤΟ ΚΕΛΛΙ Β1ΤΟΝ ΑΡΙΘΜΟ 2 ΣΤΟ ΚΕΛΛΙ C1ΤΟΝ ΑΡΙΘΜΟ1 ΚΑΙ ΣΤΟ ΚΕΛΛΙD1 ΤΟΝ ΑΡΙΘΜΟ 2.
    Θέλω να βρίσκω πόσες φορές επαναλαμβάνονται οι αριθμοί στα κελλιά (στο παράδειγμα είναι το 1 σε 2κελλιά το 2 σε 2 κελλιά και να μου τα βγάζει το αποτέλεσμα στα κελλιά Ε1 ΚΑΙ F1 ΑΝΤΊΣΤΟΙΧΑ)
    Ελπίζω να μην γίνομαι κουραστικός
    Με εκτίμηση
    ΑΝΤ.ΧΡΙΣΤΟΔΟΥΛΟΥ

  10. Ο/Η vioannis λέει:

    Ευχαριστώ πολύ για τα θετικά σχόλια σας.
    Αν στα κελιά Α έως D υπάρχουν μόνο 2 διαφορετικοί αριθμοί , τότε η συνάρτηση:
    =COUNTIF(A1:D1;MAX(A1:D1))
    Θα βρει πόσες φορές επαναλαμβάνεται ο μεγαλύτερος αριθμός
    και η :
    =COUNTIF(A1:D1;MIN(A1:D1))
    Θα βρει πόσες φορές επαναλαμβάνεται ο μικρότερος.
    Στο κελί Ε1 γράψτε:

    ="ο αριθμός "&MAX(A1:D1)&" είναι σε "&COUNTIF(A1:D1;MAX(A1:D1))&" κελιά"

    και στο κελί Ε1 γράψτε:

    ="ο αριθμός "&MIN(A1:D1)&" είναι σε "&COUNTIF(A1:D1;MIN(A1:D1))&" κελιά"

    Και θα πάρετε αντίστοιχα:
    ο αριθμός 2 είναι σε 2 κελιά
    ο αριθμός 1 είναι σε 2 κελιά
    Αν το πρόβλημά σας είναι πιο σύνθετο, μην διστάσετε να επανέλθετε με μια πιο αναλυτική περιγραφή του φύλλου σας.

  11. Ο/Η ΑΝΤ.ΧΡΙΣΤΟΔΟΥΛΟΥ λέει:

    Σας ευχαριστώ πολύ για την απάντησή σας ,
    όντως είναι λίγο σύνθετο το πρόβλημά μου ,με συγχωρείτε άλλο ήθελα να σας ρωτήσω και επειδή κάπου μπέρδεψα τα φύλλα εργασίας η σωστή ερώτηση είναι¨:Συγκεκριμμένα έχω:στο ΚΕΛΛΙ Α1 ΤΟΝ ΑΡΙΘΜΌ 1 ΣΤΟ ΚΕΛΛΙ Β1ΤΟΝ ΑΡΙΘΜΟ 2 ΣΤΟ ΚΕΛΛΙ C1ΤΟΝ ΑΡΙΘΜΟ1 ΚΑΙ ΣΤΟ ΚΕΛΛΙD1 ΤΟΝ ΑΡΙΘΜΟ 2 ΤΟΝ ΑΡΙΘΜΟ 0 ΣΤΟ ΚΕΛΛΙ Ε1 ΚΑΙ ΟΜΟΙΩΣ ΤΟΝ ΑΡΙΘΜΟ 0 ΣΤΟ ΚΕΛΛΙ F1
    Θέλω να βρίσκω πόσες φορές επαναλαμβάνονται οι αριθμοί στα κελλιά (στο παράδειγμα είναι το 1 σε 2κελλιά το 2 σε 2 κελλιάκαι το ΜΗΔΕΝ σε 2 κελλιά και να μου τα βγάζει το αποτέλεσμα στα κελλιά G1 ΚΑΙ H1 ΚΑΙ Ι 1 ΑΝΤΊΣΤΟΙΧΑ)
    Με συγχωρείτε για την λάθος ερώτησή μου .
    Με εκτίμηση
    ΑΝΤ.ΧΡΙΣΤΟΔΟΥΛΟΥ

  12. Ο/Η vioannis λέει:

    Κελί G1: =COUNTIF(A1:F1;1)
    Κελί H1: =COUNTIF(A1:F1;2)
    Κελί I1: =COUNTIF(A1:F1;0)
    Για να πάρετε αντίστοιχα το πλήθος των 1, των 2 και των 0.
    Σας έστειλα και απ ευθείας email

  13. Ο/Η ΑΝΤ.ΧΡΙΣΤΟΔΟΥΛΟΥ λέει:

    Σας ευχαρισώ πολύ για την απάντησή σας.

  14. Ο/Η Σάββας λέει:

    Καλησπέρα κ. Γιάννη,
    εντόπισα το blog αναζητώντας λύση σ’ένα τεράστιο, για μένα, πρόβλημα που αντιμετωπίζω και πιθανολογώ ότι εσύ θα μπορούσες να προσφέρεις τη λύση, καθόσον βλέπω ότι κάνεις εξαιρετική δουλειά.
    Επιδιώκω τη δημιουργία ενός πρότυπου φύλλου excel όπου μεταξύ των άλλων θα πρέπει σε πέντε κελιά του φύλλου, να επιλέγεται από ένα αναδυόμενο ημερολόγιο, μια ημερομηνία και μάλιστα με τον περιορισμό ότι για κάθε κελί να αντιστοιχεί μία μέρα της εβδομάδας στον ίδιο μήνα (δλδ θα πρέπει να επιλεχθεί π.χ. για τον τρέχοντα μήνα, στο 1ο κελί μία μέρα από το διάστημα 1-5/02/2012 στο 2ο κελί μία μέρα από το διάστημα 6-12/02/2012 και ούτω καθεξής για το μέγιστο των πέντε εβδομάδων) αν πάει να βάλει π.χ. στο 1ο κελί 01/02/2012 και στο 2ο 02/02/2012 να μην τον αφήνει τον χρήστη βγάζοντας μήνυμα σφάλματος.
    Ωστόσο δεν γνωρίζω τίποτα πέρα από τις χρησιμοποιούμενες απλές συναρτήσεις. (δλδ τίποτα από μακροεντολές κλπ). Επιπλέον θέλω αυτές οι δυνατότητες και οι περιορισμοί όταν εισάγω μια νέα γραμμή να υπάρχουν και στη νέα γραμμή
    Υπάρχει δυνατότητα να με καθοδηγήσεις κάπως?
    Ευχαριστώ εκ των προτέρων για τον χρόνο σου.

  15. Ο/Η vioannis λέει:

    Φίλε Σάββα
    Θα σου πρότεινα να ορίσεις τους περιορισμούς στα κελιά με επικύρωση δεδομένων.
    Στις επιτρεπόμενες καταχωρίσεις της καρτέλας “Ρυθμίσεις” της επικύρωσης θα βρεις επικυρώσεις για ημερομηνίες.
    Αν δεν σε καλύπτει αυτό και θέλεις ο χρήστης να επιλέγει από ένα μικρό πλήθος ημερομηνιών οι οποίες θα εμφανίζονται σε πτυσσόμενο πλαίσιο, μπορείς να κάνεις επικύρωση από λίστα. Περιγραφή θα βρεις στο πρώτο παράδειγμα της ανάρτησης του ιστολογίου “Επικύρωση δεδομένων από λίστα”. Ακόμα δες λίγο πιο πάνω την απάντηση μου της 19 Δεκ 2011 στον Γιώργο. Μπορείς να επανέλθεις όποτε θέλεις

  16. Ο/Η ΓΙΩΡΓΟΣ Σ. λέει:

    Σε ευχαριστώ πολύ για την προσπάθεια που κάνεις και τις λύσεις που μας δίνεις!

  17. Ο/Η vioannis λέει:

    Γιώργο, και εγώ σε ευχαριστώ για τα θετικά σχόλια σου και για την ενθάρρυνση!

  18. Ο/Η Giannis λέει:

    Συγχαρητήρια για την προσπάθεια. Θα ήθελα να με βοηθήσετε σε ένα πρόβλημα που αντιμετωπίζω και δεν ξέρω αν υπάρχει λύση. Θα ήθελα σε ένα κελί να μπορώ να κάνω εισαγωγή συγκεκριμένων δεδομένων (π.χ απο μια λίστα) αλλά να έχω και την δυνατότητα στο ίδιο κελί να κάνω εισαγωγή οποιοδήποτε δεδομένων θέλω εγω. Για να γίνω πιο σαφής θα σας δώσω ένα παραδειγμα. Σε ενα κελί συνήθως βάζω τις τιμές: GR, UK, USA, CH αλλά κάθε τόσο προκύπτουν και κάτι άλλο εκτός από αυτα π.χ ΙΤ, FR κτλ. Επειδή τα έχω κάνει με επικύρωση από λίστα οταν πάω να βάλω ένα όνομα που δεν ανήκει στην αρχική λίστα μου βγάζει μήνυμα λάθους.
    Μπορώ να εισάγω μόνος μου δεδομένα εκτός λίστας αλλά να έχω και τι λίστα μου για να αποφευγω να πληκτρολογώ τα δεδομένα που χρησιμοποιώ συχνά.
    Ευχαριστώ εκ των προτέρων για την βοήθεια σας

  19. Ο/Η vioannis λέει:

    Giannis, ευχαριστώ για τα καλά σου λόγια.
    Δες το άρθρο του ιστολογίου: “Επικύρωση δεδομένων από λίστα”.
    Νομίζω το δεύτερο παράδειγμα “Επικύρωση με αυτόματη εισαγωγή νέων εγγραφών” απαντά στο ερώτημά σου. Επίσης δες και το πρώτο παράδειγμα “Επικύρωση δεδομένων με επιτρεπόμενες τιμές από λίστα”, όπου η λίστα έχει οριστεί δυναμικά και μπορείς να της προσθέτεις νέα στοιχεία όποτε θες.

  20. Ο/Η Θάνος λέει:

    Πολύ χρήσιμο blog συγχαρητήρια. Έχω φτιάξει μια ρουτίνα η οποία κληρώνει 5 τυχαίους αριθμούς από το 1 έως το 45 [a = Int((Rnd * 45)) + 1] . Θα ήθελα ,αν σας είναι εύκολο, τον πιο απλό τρόπο έτσι ώστε οι 5 αυτοί αριθμοί να είναι μοναδικοί.

  21. Ο/Η vioannis λέει:

    Ευχαριστώ Θάνο.
    Θέλω λίγο χρόνο για το πρόβλημά σου. Θα επανέλθω.

    ……………..

    Επανέρχομαι:

    Sub test()
    Dim i As Integer
    Dim k As Integer
    Dim j As Integer
    
    arxi:
    Dim V(1 To 5) As Integer
    For i = 1 To 5
        V(i) = Int((Rnd * 45)) + 1
    Next i
    
    For j = 1 To 5
        For k = 1 To 5
        If j <> k And V(j) = V(k) Then GoTo arxi:
    Next
    Next
    
    Cells(1, 1).Resize(, 5) = V
    End Sub
    
     

    Ένας πίνακας ακεραίων (V) εφοδιάζεται με 5 στοιχεία από τον τύπο σου: Int((Rnd * 45)) + 1
    Στη συνέχεια ψάχνουμε αν ο πίνακας V έχει ίδια στοιχεία. Αν ναι, στέλνουμε τη ρουτίνα ξανά στην αρχή να ξαναγεμίσει ο πίνακας V με νέα στοιχεία. Αν ο νέος πίνακας περάσει το τεστ των διαφορετικών αριθμών , εξάγεται στα κελιά Α1:Α5

  22. Ο/Η Θάνος λέει:

    Ευχαριστώ πάρα πολύ, σαφέστατος και άμεσος! Σκεφτόμουν επίσης μία λύση στο ίδιο ερώτημα σύμφωνα με την οποία θα υπάρχει ένας πίνακας με τους αριθμούς από το 1 έως το 45. Μετά από κλήρωση ο αριθμός που προκύπτει θα διαγράφεται από τον πίνακα έτσι ώστε να μην επαναληφθεί στην επόμενη κ.ο.κ. Είναι εφικτό; Συγνώμη εάν γίνομαι κουραστικός.
    Φιλικά
    Θάνος

  23. Ο/Η vioannis λέει:

    Χωρίς αμφιβολία αυτό που προτείνεις είναι ευφυέστατο (και ίσως πιο «τυχαίο»;). Και πρέπει να είναι και εφικτό. Θα το παλέψω.

  24. Ο/Η vioannis λέει:

    Θάνο
    Όλες οι προσπάθειες μου για διαγραφή στοιχείου από πίνακα (array) ήταν μάταιες ή οδήγησαν σε πολύπλοκο κώδικα. Έτσι, αντί για πίνακα έφτιαξα μια συλλογή (collection) στην οποία, χωρίς πρόβλημα εισάγονται και διαγράφονται στοιχεία. Βέβαια και οι συλλογές έχουν τα προβλήματα τους, δεδομένου ότι πρέπει να χειριστείς τα στοιχεία τους από τους δείκτες τους (index), αλλά για το πρόβλημά μας, έδωσαν λύση και μάλιστα απλή:

    Sub Btest()
    
    Dim i As Integer
    Dim m As Integer
    Dim num As Variant
    Dim item As Variant
    Dim L(1 To 5) As Integer
    Dim NumberCollection As New Collection
    
    For i = 1 To 45
    NumberCollection.Add i
    Next
    
    For m = 0 To 4
    
    L(m + 1) = NumberCollection.item(Int((Rnd * (45 - m))) + 1)
    For num = 1 To NumberCollection.Count
    If NumberCollection.item(num) = L(m + 1) Then NumberCollection.Remove (num): Exit For
    Next
    
    Next
    
    Cells(1, 1).Resize(, 5) = L
    
    End Sub
    

    Στην αρχή ορίζω μία συλλογή, NumberCollection και την εφοδιάζω με του αριθμούς 1 έως 45.
    Στη συνέχεια (m=o) με την συνάρτηση Int((Rnd * 45)) + 1 κληρώνω έναν αριθμό από 1- 45 τον οποίο χρησιμοποιώ σαν δείκτη και εξάγω το αντίστοιχο στοιχείο L(1) από τη συλλογή. Ακολούθως εντοπίζω το δείκτη του στοιχείου στη συλλογή και το διαγράφω.
    Όταν m=1 η συλλογή μου έχει πια 44 στοιχεία και τότε κληρώνω έναν αριθμό από 1- 44 και συνεχίζω όμοια. Συνολικά κάνω αυτό 5 φορές (m=0 έως 4)
    Τα στοιχεία (αριθμοί) που διαγράφονται απαρτίζουν τον πίνακα L, ο οποίος εξάγεται στα κελία A1:A5.

    Παρακάτω βλέπεις την αρχική μορφή του κώδικα πριν τον συμμαζέψω. Τον παραθέτω για να μπορέσεις πιο άνετα να παρακολουθήσεις πως λειτουργεί. Σε κάθε βήμα η νέα παραγόμενη συλλογή εξάγεται στις στήλες A,B,C,D,E αντίστοιχα του φύλλου. Τρέξε τον σε ένα καθαρό φύλλο.

    Sub Atest()
    
    Dim i As Integer
    Dim m As Integer
    Dim num As Variant
    Dim j As Integer
    
    Dim item As Variant
    Dim L(1 To 5) As Integer
    Dim NumberCollection As New Collection
    
    For i = 1 To 45
    NumberCollection.Add i
    Next
    
    L(1) = NumberCollection.item(Int((Rnd * 45)) + 1)
    For num = 1 To NumberCollection.Count
    If NumberCollection.item(num) = L(1) Then NumberCollection.Remove (num): Exit For
    Next
    
    j = 0
    For Each item In NumberCollection
    Cells(j + 1, 1) = item
    j = j + 1
    Next
    
    L(2) = NumberCollection.item(Int((Rnd * 44)) + 1)
    For num = 1 To NumberCollection.Count
    If NumberCollection.item(num) = L(2) Then NumberCollection.Remove (num): Exit For
    Next
    
    j = 0
    For Each item In NumberCollection
    Cells(j + 1, 2) = item
    j = j + 1
    Next
    
    L(3) = NumberCollection.item(Int((Rnd * 43)) + 1)
    For num = 1 To NumberCollection.Count
    If NumberCollection.item(num) = L(3) Then NumberCollection.Remove (num): Exit For
    Next
    
    j = 0
    For Each item In NumberCollection
    Cells(j + 1, 3) = item
    j = j + 1
    Next
    
    L(4) = NumberCollection.item(Int((Rnd * 42)) + 1)
    For num = 1 To NumberCollection.Count
    If NumberCollection.item(num) = L(4) Then NumberCollection.Remove (num): Exit For
    Next
    
    j = 0
    For Each item In NumberCollection
    Cells(j + 1, 4) = item
    j = j + 1
    Next
    
    L(5) = NumberCollection.item(Int((Rnd * 41)) + 1)
    For num = 1 To NumberCollection.Count
    If NumberCollection.item(num) = L(5) Then NumberCollection.Remove (num): Exit For
    Next
    
    j = 0
    For Each item In NumberCollection
    Cells(j + 1, 5) = item
    j = j + 1
    Next
    
    Cells(1, 7).Resize(, 5) = L
    
    End Sub
    

    Τέλος για να δω αν η συνάρτηση τυχαίων αριθμών και ο κώδικας παράγουν αμερόληπτα αποτελέσματα, σε ένα καθαρό φύλλο, έτρεξα τον παρακάτω κώδικα ο οποίος δημιουργεί 60000 ανεξάρτητες 5-άδες (κληρώσεις).

    Sub Ctest()
    Dim Q As Long
    
    For Q = 1 To 60000
    Call Btest
    Cells(Q + 4, 1).Resize(, 5) = Range("a1:e1").Value
    Next
    
    End Sub
    

    Με την συνάρτηση φύλλου COUNTIF μέτρησα τον αριθμό εμφάνισης καθενός από τους αριθμούς 1 έως 45 και για όλους βρήκα συχνότητα εμφάνισης από 2, 166% έως 2,290%. Δηλαδή πολύ κοντά στην ιδανική 1/45=2,222%.

  25. Ο/Η Θάνος λέει:

    Είναι αυτό που σκεφτόμουν δοσμένο με ελάχιστες γραμμές κώδικα και αναλυτικότατη εξήγηση.
    Η χρήση collection με εντυπωσίασε. Μπράβο και ευχαριστώ.

  26. Ο/Η Ιωάννης λέει:

    Γιάννη γεια σου και πάλι…
    Έχω πίνακα στο excell απο copy-paste με τα δεδομένα ως εξής (δεν με αφηνει να ανεβάσω screen shot για να στο δείξω ακριβώς…..)…
    Η πρώτη γραμμή είναι περασμένη όλη στο Α1, η δευτερη στο Α2, η τρίτη στο Α3, κλπ…κλπ…

    EAA EAB EAC EAD EAE EAF EAG EAH EAI EAJ EAK EAL EAM EAN EAO EAP EAQ EAR EAS EAT EAU EAV EAW EAX EAY EAZ
    EBA EBB EBC EBD EBE EBF EBG EBH EBI EBJ EBK EBL EBM EBN EBO EBP EBQ EBR EBS EBT EBU EBV EBW EBX EBY EBZ

    και θέλω να τα βάλω όλα κάθετα στη στήλη Α, – κάθε λέξη και ένα κελλί – …
    π.χ. το EAA στο Α1
    το EAB στο Α2
    το EAC στο Α3
    το EAD στο Α4
    κλπ…κλπ…

    Γινεται ? Κι αν ναί πως ?
    (Βήμα βήμα σε παρακαλώ…αρχάριοι είμαστε…. :-) )
    Ευχαριστώ

  27. Ο/Η vioannis λέει:

    Συνονόματε Γεια!
    Επέλεξε τη στήλη Α.
    Μενού: Δεδομένα > Κείμενο σε στήλες και στον οδηγό μετατροπής που εμφανίζεται τσεκάρισε : Σταθερού μήκους και πάτα : Τέλος
    Οι τρίγραμματες λέξεις έχουν χωριστεί τώρα σε κελιά.
    Επέλεξε όλη την ορθογώνια περιοχή με τις λέξεις (A1:P4, για το παράδειγμα που μου έστειλες). Δεξί κλικ: Αντιγραφή.
    Άνοιξε ένα νέο φύλλο (σελίδα, sheet) στο ίδιο βιβλίο και κάνε κλικ στο Α1 κελί.
    Δεξί κλικ: Ειδική επικόλληση και τσεκάρισε: Τιμές και Αντιμετάθεση και OK.
    Δεν είναι πιο καλά έτσι;
    Τα υπόλοιπα τα αφήνω για σένα.

  28. Ο/Η Bill λέει:

    Συγχαρητήρια για την ιστοσελίδα σου!
    Μια απορία που την έχω από τότε που είδα την ιστοσελίδα αυτή. Μπορούν όλα αυτά που αναφέρονται στο Excel να εφαρμοστούν σε Openoffice ή Libreoffice;

  29. Ο/Η vioannis λέει:

    Bill
    Δεν έχω δουλέψει καθόλου σε Openoffice και Libreoffice και δεν μπορώ να σου δώσω υπεύθυνη απάντηση για τα προβλήματα συμβατότητας που μπορεί να έχουν με το excel.

  30. Ο/Η Ιωάννης λέει:

    Χαιρετώ και πάλι συνονοματε…
    Εχω μια στήλη (π.χ. Α ) με 2 γραμματα ανα κελί….
    Ai
    Bi
    Ci
    Di
    Ei
    Fi
    Gi
    Hi
    Ii
    Ji
    Ki
    κλπ…
    και θέλω να βάλω παύλα μεταξύ των γραμμάτων σε όλη τη στήλη (π.χ. το Ai να μετατρέψω σε A-i, το Bi σε B-i κλπ… )
    Πως γίνεται ?

    Ευχαριστώ πολύ

  31. Ο/Η vioannis λέει:

    Φίλε Γιάννη
    Μία από τις δύο παρακάτω συναρτήσεις κάνει αυτό που ζητάς:

                                                
    =CONCATENATE(LEFT(TRIM(A1));"-";RIGHT(TRIM(A1)))
    =LEFT(TRIM(A1))&"-"&RIGHT(TRIM(A1))
    

    και η μία και η άλλη θα επιστρέψουν A-i
    Μετά, αν δεν θέλεις τις συναρτήσεις αντικατέστησε με αξίες.

  32. Ο/Η Ανδρέας λέει:

    φιλε γιάννη πολύ καλή δουλειά! Αν μπορεις να με βοηθίσεις : για την δουλειά μου καταχωρώ τηλέφωνα και διευθύνσεις σε στήλες. Πως μπορεί το EXEL να με ενημερώνει ότι μία εγγραφή την έχω ξαναπεράσει? Στα επίθετα δεν έχω προβλημα γιατι κάνει αυτόματη συμπλήρωση και έτσι το καταλαβαίνω. Στα τηλέφωνα όμως? Ευχαριστώ

  33. Ο/Η vioannis λέει:

    Α) Με Μορφοποίηση υπό όρους
    α) Αν δουλεύεις σε excel 2007 και πάνω χρησιμοποίησε την ενσωματωμένη Μορφοποίηση υπό όρους : Διπλότυπες τιμές. (Επέλεξε τη στήλη με τα τηλέφωνα και Καρτέλα Κεντρική > Μορφοποίηση υπό όρους > Επισήμανση κανόνων κελιών > Διπλότυπες τιμές)

    β) Σε οποιαδήποτε έκδοση του excel μπορείς να εισάγεις στη στήλη με τα τηλέφωνα τη μορφοποίηση με τύπο:

      
    =COUNTIF($b$2:b2;b2)>1   

    (Υποθέτω ότι η στήλη με τα τηλέφωνα είναι η στήλη b και αρχίζουν από το κελί b2)
    Αυτή μάλιστα η μορφοποίηση είναι καλύτερη από την ενσωματωμένη, διότι δεν επισημαίνει (μορφοποιεί) τη πρώτη εμφάνιση της τιμής. Αναλυτικά για το πώς εισάγεται μια μορφοποίηση με τύπο, θα βρεις στο σημείωμα του ιστολογίου: “Χρωματική επισήμανση ενεργού κελιού, στήλης και γραμμής).

    Β) Με επικύρωση δεδομένων.
    Για όλες τις εκδόσεις excel κάνε εισαγωγή στη στήλη με τα τηλέφωνα, της επικύρωσης δεδομένων με τύπο:

     
    =COUNTIF($B$2:B2;B2)=1 

    Η επικύρωση αυτή δεν επιτρέπει εισαγωγή διπλότυπων τιμών στη στήλη.

    Γ) Με συνάρτηση σε διπλανή στήλη
    Σε μία διπλανή κενή στήλη, της στήλης των τηλεφώνων, ας πούμε στη C και στο κελί C2 γράψε τη συνάρτηση:

     
    =IF(OR(COUNTIF($B$2:B2;B2)=1;B2="");"";"Προσοχή Διπλότυπο") 

    και αντέγραψε τη αρκετά κάτω στη στήλη C. Κάθε φορά που θα γράφεις ένα διπλότυπο, θα εμφανίζεται στο διπλανό κελί η ένδειξη: Προσοχή Διπλότυπο

    Δ) Η αναπτυσσόμενη λίστα που χρησιμοποιείς για τα ονόματα, μπορεί να λειτουργήσει και για αριθμητικές τιμές αρκεί να έχεις μορφοποιήσει τη στήλη των τηλεφώνων σε «κείμενο».
    (Επιλογή στήλης, δεξί κλικ, Μορφοποίηση κελιών, καρτέλα Αριθμός, Κατηγορία Κείμενο και ΟΚ). Άλλωστε τα τηλέφωνα δεν είναι αριθμοί. Το κόλπο αυτό όμως θα δουλέψει για τις τιμές που θα εισάγεις μετά τη μορφοποίηση και όχι για τις τιμές που έχουν εισαχθεί πριν τη μορφοποίηση. Μπορείς τα ήδη εισηγμένα τηλέφωνα, αν είναι λίγα, να τα ξανά-εισάγεις (προσοχή, λέω να τα ξανά-εισάγεις όχι να τα ξανά-γράψεις), δηλαδή επιλέγεις το κελί πατάς F2 και μετά πατάς Enter. Ελπίζω να σε κάλυψα, αν όχι επανέρχεσαι. Καλή επιτυχία

  34. Ο/Η Γιώργος λέει:

    καλησπέρα,
    έχω φτιάξει ένα φύλλο, στο οποίο για κάποιο λόγο που δεν καταφέρνω να τον βρώ, μου εμφανίζονται στα κελιά μόνο οι τύποι. Προσπάθησα από επιλογές, από ctrl+βαρεία κλπ, τίποτα.
    Παρακαλώ αν υπάρχει κάποια απάντηση. Ευχαριστώ

  35. Ο/Η vioannis λέει:

    Καλησπέρα Γιώργο,
    Πάτα F5 , πήγαινε “ειδικά σε…” και τσεκάρισε την επιλογή : “ Τύποι” (και τις 4 μορφές) και ΟΚ.
    Επιλέγονται τα κελιά που περιέχουν του τύπους;
    Αν όχι, οι τύποι για κάποιο λόγο έχουν εισαχθεί σαν κείμενο.
    Δες αν η μορφοποίηση των κελιών ή του φύλλου είναι “κείμενο”.
    Ίσως αυτό να είναι το πρόβλημα. Τα ξαναλέμε.

  36. Ο/Η Γιώργος λέει:

    Ευχαριστώ για την άμεση ανταπόκριση.
    Όχι, δεν επιλέγονται τα κελιά. Στην μορφή κελιών ήταν κείμενο, όμως την άλλαξα σε γενική. Το πρόβλημα εξακολουθεί. Για την μορφοποίηση του φύλλου σε κείμενο δεν γνωρίζω.

  37. Ο/Η vioannis λέει:

    Για να αλλάξεις τη μορφοποίηση όλου του φύλλου, κάνεις δεξί κλικ στο πλήκτρο του φύλλου (αριστερά της στήλης Α και πάνω από τη γραμμή 1) και επιλέγεις “Μορφοποίηση κελιών” κλπ.
    Μετά επιλέγεις ένα –ένα τα κελιά με τις συναρτήσεις και για κάθε κελί πατάς F2 και Enter.
    Δεν έχω κατά νου μια πιο μαζική λύση.

  38. Ο/Η Γιώργος λέει:

    ‘Εγινε. Με κάποιο τρόπο που δεν γνωρίζω, υπήρξε πρόβλημα στην μορφοποίηση σε κείμενο. παρά την αλλαγή της μορφοποίησης δεν γινοταν τίποτα. Έπρεπε να σβήσω και να ξαναγράψω τις συναρτήσεις. και για επιπλέον ενημέρωση: Παρά το αποτέλεσμα, όταν δο΄τλευα τις συναρτήσεις, έβλεπα το αποτέλεσμα κανονικά. Όταν ολοκλήρωνα τη διαδικασία, εμφανιζόταν ο τύπος ως κείμενο. Άγνωσται αι βουλαί του Κυρίου!!!.

  39. Ο/Η Γιώργος λέει:

    Ξέχασα. Ευχαριστώ και πάλι.

  40. Ο/Η vioannis λέει:

    Μερικές διευκρινίσεις για τη μορφοποίηση κελιού σε “κείμενο” .
    Η μορφοποίηση κελιού σε “κείμενο” έχει κάποιες ιδιαιτερότητες. Σε αντίθεση με τις άλλες μορφοποιήσεις κελιών δεν επιδρά σε ήδη εισηγμένες τιμές . Για να το δεις, σε ένα κελί , ας πούμε το Α1, γράψε ένα αριθμό, πριν μορφοποιήσεις το κελί σε “κείμενο” . Για το κελί αυτό οι συναρτήσεις =ISTEXT(A1) και =ISNUMBER(A1) επιστρέφουν αντίστοιχα όπως είναι φυσικό, FALSE και TRUE αντίστοιχα. Τροποποίησε τώρα τη μορφή του κελιού Α1 σε “κείμενο” . Θα δεις τον αριθμό να στοιχίζεται αριστερά και έτσι δημιουργεί την εντύπωση πως μετατράπηκε σε κείμενο. Αυτό όμως δεν είναι αλήθεια! Οι συναρτήσεις =ISTEXT(A1) και =ISNUMBER(A1) εξακολουθούν να επιστρέφουν FALSE και TRUE αντίστοιχα.
    Τώρα που η μορφοποίηση του κελιού είναι “κείμενο, ξανα-πληκτρολόγησε τον αριθμό στο κελί Α1. Τώρα ο αριθμός είναι πια κείμενο. Δες ότι οι συναρτήσεις =ISTEXT(A1) και =ISNUMBER(A1) επιστρέφουν πια TRUE και FALSE αντίστοιχα.
    Δηλαδή, η μορφοποίηση κελιού σε “κείμενο” για να δουλέψει, πρέπει να προηγηθεί της εισαγωγής των στοιχείων (αριθμών ή συναρτήσεων που επιστρέφουν αριθμούς).
    Αν η μορφοποίηση σε “κείμενο” γίνει μετά την εισαγωγή των αριθμών, δεν επιδρά πάνω τους και οι αριθμοί (ή οι συναρτήσεις) πρέπει να ξανα-εισαχθούν στα κελιά. (Αυτό μπορεί να γίνει αν επιλέξεις το κάθε κελί, και πατήσεις διαδοχικά F2 και Enter)
    Ανάλογα ισχύουν, αν αντίστροφα, μετατρέψεις τη μορφοποίηση κελιού από “κείμενο” σε μία οποιαδήποτε “αριθμητική” ή “γενική”. Η αλλαγή αυτή δεν μετατρέπει τους κειμενο-αριθμούς σε καθαρούς αριθμούς. Πρέπει οι αριθμοί να ξανα-εισαχθούν. Αν οι αριθμοί είναι πολλοί μπορείς να ακολουθήσεις την παρακάτω τεχνική:
    — Στα κελιά που περιέχουν τους κειμενο-αριθμούς μετατρέπεις τη μορφοποίηση σε αριθμητική ή γενική.
    — Σε ένα άδειο κελί, οπουδήποτε στο φύλλο γράφεις τον αριθμό 1.
    — Στο κελί αυτό με τον αριθμό 1 κάνεις “Αντιγραφή”.
    –Επιλέγεις τα κελιά που περιέχουν τους κειμενο-αριθμούς. Μπορείς να επιλέξεις και μη ενιαίες περιοχές με το Ctrl.
    — Για την επιλεγμένη περιοχή, δεξί κλικ, “Εδική επικόλληση”, από την ομάδα επιλογών “Πράξη” επιλέγεις “Πολλαπλασιασμός” και “OK” . Είσαι έτοιμος διότι ο πολλαπλασιασμός των αριθμών με το 1 δεν τους επηρέασε, αλλά τους ξαναεισήγαγε στα κελιά τους, που ήταν το ζητούμενο. Η τεχνική αυτή δεν είναι για συναρτήσεις. Αν στην επιλογή της περιοχής συμπεριληφθούν κελιά με κείμενο, δεν θα επηρεαστούν, κενά όμως κελιά θα γεμίσουν με μηδέν.

    Σημειώνω ακόμα ότι η VBA συνάρτηση IsNumeric επιστέφει πάντα TRUE για ένα κελί που περιέχει αριθμό, ανεξάρτητα από την μορφοποίηση του κελιού. TRUE θα επιστρέψει ακόμα και αν ο αριθμός εισαχθεί στο κελί με απόστροφο μπροστά του, πχ έτσι: ‘2

  41. Ο/Η Γιώργος λέει:

    Έλυσες σωρρευτικά και απάντησες σε πολλά ζητηματάκια που κατά καιρούς με ταλαιπωρούσαν.

  42. Ο/Η Γιώργος Σεϊνίδης λέει:

    Πρώτα απ’ όλα συγχαρητήρια για το blog που είναι πραγματικά πολύ χρήσιμο.
    Έχω ένα πρόβλημα
    Έχω ένα xls που περιέχει όλα τα δεδομένα σε 1 στήλη. Αποτελείται από ερωτήσεις πολλαπλής επιλογής και τις απαντήσεις τους. Σκεφτείτε 1η σειρά: Eρώτηση, 2η σειρά: 1η επιλογη, 3η σειρά: 2η επιλογή. Αμέσως πιο κάτω (χωρίς κανένα κενό) ακολουθεί η επόμενη ερώτηση. Δυστυχώς κάποιες ερωτήσεις καταλαμβάνουν 2 σειρές (και όχι 1 όπως θα πρεπε). Το καλό είναι ότι μπροστά από κάθε ερώτηση υπάρχει αύξων αριθμός (κοντά στις 1000ερωτήσεις). Προσοχή:Μερικές απαντήσεις μπορεί να αρχίζουν με αριθμό. Άρα ο διαχωρισμός θα πρέπει να γίνει με αναγνώριση του αύξοντα αριθμού.
    Τί θα ήθελα; Να έχω ένα xls με τις ερωτήσεις στην 1η στήλη, τις Α απαντήσεις στη 2η στήλη (να αντιστοιχούν φυσικά στη σωστή ερώτηση), τις Γ απαντήσεις στην τρίτη, κτλ
    Προς το παρόν δεν έχω καταφέρει κάτι (επισήμανση: O αύξων αριθμός απλώς διαχωρίζεται με κενό και όχι με κάτι παραπάνω).

    Ευχαριστώ

  43. Ο/Η vioannis λέει:

    Σαφέστατη διατύπωση για ένα πρόβλημα που ίσως είναι δύσκολο να αντιμετωπιστεί χωρίς να βλέπω το ίδιο το αρχείο. Αλλά ας κάνουμε μια αρχή. Αν η αρίθμηση των ερωτήσεων είναι σε διαδοχικούς ακέραιους τότε, στη στήλη Β (ή στην πρώτη κενή στήλη δεξιά της Α) και στο κελί Β1 γράψε τη συνάρτηση:

    =IF(ISNUMBER(--LEFT(TRIM(A1);FIND(" ";TRIM(A1);1)-1));--LEFT(TRIM(A1);FIND(" ";TRIM(A1);1)-1);"")
    

    .
    Αντέγραψε τη συνάρτηση κάτω-κάτω. Λογικά θα σου επιστραφούν οι διαδοχικοί αριθμοί των ερωτήσεων και οι αριθμοί όσων απαντήσεων αρχίζουν με αριθμό. Θα κρατήσουμε μόνο τους διαδοχικούς των ερωτήσεων.
    Στη διπλανή κενή στήλη στο κελί C1 αντέγραψε τον αριθμό του κελιού Β1 (λογικά ο αριθμός 1) και στο κελί C2 γράψε τη συνάρτηση:

    =IF(B2=MAX($C$1:C1)+1;B2;"")
    

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

  44. Ο/Η Γιώργος Σεϊνίδης λέει:

    Ok… Ευχαριστώ. Θα τα εφαρμόσω σε από Δευτέρα (2 μέρες εφημερεία γαρ) και θα σας ενημερώσω :)

  45. Ο/Η Παναγιωτης λέει:

    Καλήμερα, χρόνια πολλά, καλή χρόνια και πολύχρονος για την ονομαστική εορτή σου

  46. Ο/Η vioannis λέει:

    Ευχαριστώ θερμά Παναγιώτη! Καλή Χρονιά με Υγεία για όλους μας!

  47. Ο/Η Γιώργος λέει:

    Ευχές και από μένα για την γιορτή σου, για καλή χρονιά (που δεν το βλέπω) με υγεία και αισιοδοξία για ανατροπή αυτής της κατάστασης.

  48. Ο/Η vioannis λέει:

    Γιώργο, συντάσσομαι και με την αισιόδοξη και με την απαισιόδοξη πλευρά του μηνύματος σου! Γιατί , όπως είπε κάποιος : Αν ο αισιόδοξος εφευρίσκει τον τροχό, ο απαισιόδοξος εφευρίσκει τη ρεζέρβα. Και τα δύο πολύ χρήσιμα για να κινηθεί το όχημα. ΚΑΛΗ ΧΡΟΝΙΑ!

  49. Ο/Η Γιώργος λέει:

    ‘Εχω δυο ερωτήματα:
    1.Μπορούμε να έχουμε πάνω από τρεις κανόνες μορφοποίησης υπό όρους σρο excel 2003; (στο 2007 και πάνω βλέπω ότι η δυνατότητα υπάρχει).
    2. Επιμένω στο excel 2003 (και πρίν στο 2000 ή XP) λόγω προβλημάτων στη συγχώνευση αλληλογραφίας με το word και ιδιαίτερα με το θέμα της ημερομηνίας, το οποίο έχω λύσει (όχι μόνος μου) με ένα κάπως στριφνό τρόπο εισαγωγής των πεδίων ημερομηνίας με τη χρήση διακοπτών, αντί για το απλό «κλικ – εισαγωγή πεδίου» στο word. Το πρόβλημα συνίσταται στην αντιστροφή της μορφής ημερομηνίας σε μ/η/ετος αντό η/μ/ετος. Υπάρχει πιό απλή λύση;
    Ευχαριστώ.

  50. Ο/Η vioannis λέει:

    Γιώργο, πράγματι στις παλιότερες του 2007 εκδόσεις του excel, οι μορφοποιήσεις υπό όρους για μία περιοχή είναι έως 3. Για διαφορετικές περιοχές του ίδιου φύλλου μπορούμε φυσικά να έχουμε και περισσότερες. Ειδικές μορφοποιήσεις για μια περιοχή με περισσότερους από 3 όρους, μπορούμε να επιτύχουμε με μακροεντολή που θα έχει γραφτεί ειδικά για τους όρους αυτούς.
    .
    Για το άλλο πρόβλημα της συγχώνευσης δοκίμασε την παρακάτω λύση, ίσως σε εξυπηρετήσει:
    Αν οι ημερομηνίες σου στο excel είναι στη στήλη Α τότε σε μία άλλη στήλη, ας πούμε την Β, γράψε τη συνάρτηση

     =TEXT(a1;"ηη-μμ-εεε")

    Η συνάρτηση αυτή μετατρέπει την ημερομηνία σε κείμενο.
    Στο word τώρα, σαν πεδίο ημερομηνιών, βάλε τη στήλη Β και όχι την Α. Το word λόγω της text την εισάγει σαν κείμενο, δεν καταλαβαίνει ότι είναι ημερομηνία και δεν την αλλάζει.

    Σημείωση 1η Μπορείς να έχεις και την ημέρα της εβδομάδας. Γράψε την συνάρτηση έτσι

     =TEXT(a1;"ηηηη,ηη-μμ-εεε")

    και θα πάρεις για την σημερινή ημερομηνία: Σάβββατο, 12-01-2013
    Σημείωση 2η Αν δεν θέλεις να αλλάξεις τις αντιστοιχίες της συγχώνευσης, άνοιξε το excel, κάνε απλή αντιγραφή – επικόλληση της στήλης των ημερομηνιών σε μία νέα κενή στήλη, έστω την G, και στην παλιά στήλη(πεδίο) των ημερομηνιών γράψε την συνάρτηση TEXT(G1;……). Στο εξής, θα ενημερώνεις με νέες ημερομηνίες την στήλη G, και η παλιά στήλη θα ενημερώνεται αυτόματα από την TEXT.
    Δοκίμασέ το και παρακαλώ, πες μου αν σου δούλεψε. Εγώ το δοκίμασα σε office 2007 και δούλεψε.
    Καλή επιτυχία

  51. Ο/Η Γιώργος λέει:

    Ευχαριστώ για την άμεση ανταπόκριση. Θα το δοκιμάσω αύριο (σήμερα) νομίζω οτι θα δουλέψει, υπάρχει και η λύση χρήσης διακοπτών. Επίσης για το μέγεθος φύλλων εργασίας, επειδή ανοίγοντας ένα excel 2007-2010 μας δίνει φύλλα με στήλες μέχρι IV, πώς αυξάνουμε το μέγεθος μέχρι όπου θέλουμε (εντός των ορίων που είναι κάποιες χιλιάδες στήλες);

  52. Ο/Η vioannis λέει:

    Ένα βιβλίο του excel 2003 (η πιο παλιάς έκδοσης), δηλαδή ένα .xls βιβλίο όταν ανοιχτεί από ένα 2007 ή 2010 excel , δεν αποκτά αυτόματα τις πέρα από την IV, 2^16=16384 στήλες και τις 2^20=1048576 γραμμές. Πρέπει να το αποθηκεύσεις σαν βιβλίο του 2007 ή 2010 δηλαδή σαν βιβλίο .xlsx ή σαν .xlsm αν περιέχει μακροεντολές. Αποθήκευσε στη νέα μορφή, κλείσε και άνοιξε ξανά και θα δεις τις πολλές γραμμές και στήλες. Δεν είναι στο χέρι μας να ρυθμίζουμε το πλήθος των γραμμών και στηλών. Εξαρτάται από την μορφή (έκδοση) που διατηρούμε το βιβλίο. Όσο το διατηρείς (αποθηκεύεις) σε μορφή .xls θα έχει 256 (IV) στήλες και 65536 γραμμές.

  53. Ο/Η Γιώργος λέει:

    Για την (text):Δουλεύει μιά χαρά (πώς δεν το είχα σκεφτεί). Εγώ το είχα λύσει με σύνδεση μέσω dde. Έτσι δούλευε, χωρίς όμως να έχω δυνατότητα σύνδεσης με άλλα φύλλα του βιβλίου εκτός από το πρώτο. Άλλος τρόπος ήταν η χρήση των διακοπτών πεδίου: { mercefiled f1 \@”dddd,dd MMMM yyyy} λύση η οποία επίσης δούλευε κανονικά (σύνδεση OLE db). Καλή ιδέα είναι η απόκρυψη της στήλης text για να μήν γίνεται πολύπλοκο το φύλλο.
    Τώρα για το πλήθος στηλών κλπ. κάτι δεν πάει καλά. Ο αριθμός των 16384 στηλών αντιστοιχεί στο XFD. Χθές ανοίγοντας φύλλο (όχι για πίτα) στο 2007 μου έβγαζε IV. Σήμερα το άνοιξα και ήταν κανονιοκά σε XFD ;;;

  54. Ο/Η Γιώργος λέει:

    Έχω να διαχειριστώ κάποια φύλλα με κάποιες χιλιάδες εγγραφές. Σε κάποια κελιά περιέχονται τιμές που πρέπει να διορθωθούν αλλά δεν μπορώ να βρώ μαζικό τρόπο. Συγκεκριμμένα στην αρχή της τιμής που περιέχεται υπάρχει ένας ανεπιθύμητος χαρακτήρας που δεν μπορώ να βρώ τί είναι και δεν μπορώ να τον αφαιρέσω μαζικά . Δεν μπορώ να στείλω ένα δείγμα δεδομένων (‘Α301071). Ο χαρακτήρας μοιάζει με τόνο ή αριστερό αυτάκι καμία συνάρτηση δεν μου δίνει τον κωδικό του.
    Ευχαριστώ
    Γιώργος Φούντας

  55. Ο/Η vioannis λέει:

    Η συνάρτηση =CODE(a1) τι δίνει για ένα κελί που περιέχει έναν τέτοια εγγραφή; Η πιο καλά η =CODE(TRIM(a1)) . Αντιγράφοντας από το email σου την εγγραφή, εμένα μου έδωσε 39. Αυτό δεν λέει και πολλά, διότι αντιγράφοντας από το από το ιστολόγιο δίνει 145. Αν εντοπίσεις τον κωδικό μπορείς να τον εξαλείψεις με τη συνάρτηση

       =SUBSTITUTE(A1;CHAR(39);"";1)       

    Αν δεν τον εντοπίσεις τότε γράψε τη συνάρτηση έτσι:

        =SUBSTITUTE(A1;"'";"";1)    

    όπου ανάμεσα στα πρώτα εισαγωγικά θα βάλεις τον περίεργο χαρακτήρα με αντιγραφή – επικόλληση.
    Για πιο απλά και πιο γρήγορα μπορείς να χρησιμοποιήσεις την Αντικατάσταση: (Κεντρική > Εύρεση και επιλογή > Αντικατάσταση), όπου στη θέση του εύρεση του: θα μεταφέρεις τον προβληματικό χαρακτήρα με αντιγραφή – επικόλληση.

  56. Ο/Η Δημήτρης λέει:

    Αγαπητέ Γιάννη, πολύ ενδιαφέρον το Blog σου.
    Θα ήθελα τη βοήθειά σου για κάποιο θέμα που με απασχολεί . Θέλω να εισάγω σε φύλλο του Excel έναν πίνακα με βαθμολογίες μαθητών. Οι βαθμολογίες θα εισάγονται σε ξεχωριστή στήλη αριθμητικά, και στη διπλανή στήλη ολογράφως. Θέλω οι βαθμοί που είναι κάτω από τη βάση (κάτω από 5) να εμφανίζονται με κόκκινο χρώμα, τόσο στη στήλη με τους αριθμούς, όσο και στη στήλη που περιγράφονται με τις λέξεις. Ενώ στη στήλη με τους αριθμούς το θέμα τακτοποιήθηκε με τη χρήση της μορφοποίησης υπό όρους, δεν μπορώ να εφαρμόσω το ίδιο και για τη στήλη με τους χαρακτηρισμούς με λέξεις. Μπορώ να κάνω κάτι με αυτό;
    Ευχαριστώ!

  57. Ο/Η vioannis λέει:

    Δημήτρη, αν οι στήλες των αριθμών και των κειμένων είναι σε αντιστοιχία, τα πράγματα είναι απλά. Αν F η στήλη των αριθμών και G η στήλη των κειμένων, τότε επίλεξε (το είπα καλά;)το τμήμα της στήλης G που σε αφορά και εισήγαγε μορφοποίηση υπό όρους που εξαρτάται από τις τιμές της F. Δηλαδή : Μορφοποίηση υπό όρους >Δημιουργία Κανόνα > Χρήση τύπου για τον καθορισμό των κελιών που θα μορφοποιηθούν >και στη Μορφοποίηση τιμών όπου ο τύπος είναι αληθής γράψε = F1<5 και διάλεξε μορφοποίηση (χρώμα) (περιγράφω σε excel 2007)
    Αν δεν ήμουν σαφής, ή δεν κατάλαβα κάτι, ξαναγράφεις.

  58. Ο/Η Δημήτρης λέει:

    Οκ Γιάννη, λειτούργησε άψογα. Ευχαριστώ πολύ για τη βοήθειά σου!

  59. Ο/Η Μάριος λέει:

    Γιάννη καλησπέρα! Σου εύχομαι τα καλύτερα για το 2013, καιρό έχουμε να τα πούμε.Η αλήθεια είναι ότι για αρκετό διάστημα είχα παρατήσει το excel και γενικότερα τον υπολογιστή. Πες πως έκανα ένα είδος αποτοξίνωσης από την τεχνολογία! Μου έλειψε όμως και επανήλθα! Λοιπόν τα θετικά σχόλιά μου για τις ικανότητές σου τα γνωρίζεις και σε ευχαριστώ πολύ για την πολύτιμη βοήθειά σου που πάντα μας τη δίνεις απλόχερα! Ο Θεός να σου δίνει δύναμη!!! Αρκετά με την φλυαρία μου όμως, μπαίνω στο θέμα. Σ’ ένα excelόφυλλο και στο κελί Α10 π.χ αθροίζονται οι τιμές από Α1 εως και Α9. Πως μπορώ σε ένα άλλο κελί στο Α15 π.χ να υπολογίζεται η τιμή που προκύπτει από την αφαίρεση της τιμής που υπάρχει τώρα στο Α10 με την τιμή που θα έχει το Α10 μετά την αναπροσαρμογή των τιμών των κελιών Α1 εως και Α9 και κατ΄επέκταση του Α10.

  60. Ο/Η stelios λέει:

    Καλησπερα κυριε Γιαννη.
    Συγχαρητηρια για την υπεροχη δουλεια σας , θα μπω κατευθειαν στο θεμα που με απασχολει.
    Εχω μια καθετη στηλη με διαφορους αριθμους , πχ 104 , 151 , 161 , 177 , 201 , 288 , 291 , 299, 305 , 310
    Πως μπορω με καποιο τροπο να παιρνω απο αυτη τη λιστα 4 η 5 αριθμους (τυχαιους) και να τοποθετουνται σε καποια αλλη στηλη?
    Επισης αν οι αριθμοι ειναι για παραδειγμα 16 να παιρνονται ανα τεραδες? Δηλαδη επιλεχθηκαν τυχαια 4 αριθμοι , συμπληρωθηκε μια τετραδα , στην επομενη τετραδα να μην μπορουν να επιλεχθουν και να γινει επιλογη απο τους εναπομειναντες αριθμους για να συμπληρωθει η επομενη τετραδα.
    Δε ξερω αν γινομαι κατανοητος , προσπαθησα με τη συναρτηση randbetween αλλα δε νομιζω οτι επραξα σωστα.
    Σας ευχαριστω πολυ για το χρονο σας.

  61. Ο/Η vioannis λέει:

    Μάριε, ευχαριστώ πολύ για τα καλά σου λόγια. Ευχές και από μένα για το νέο έτος. Δες και τις ευχές που έστειλα σε όλους τους φίλους του ιστολογίου με ένα ωραίο ψηφιακό πίνακα της Μάρσας. Λοιπόν, ακριβώς αυτό που ζητάς κάνει ο παρακάτω λίγος κώδικας, τον οποίο δεν θα γράψεις σε κάποιο module του βιβλίο, αλλά στη VBA περιοχή του φύλλου που σε ενδιαφέρει. Στη διάθεσή σου για όποια διευκρίνιση.

    Public oldsum As Double
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim kelia As Range
    Dim keli As Range
    Dim newsum As Double
    Set kelia = Range("a1:a9")
    Set keli = Intersect(Target, kelia)
    If Not keli Is Nothing Then
    newsum = Range("a10")
    Range("a15") = newsum - oldsum
    End If
    oldsum = Range("a10").Value
    End Sub
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    oldsum = Range("a10").Value
    End Sub
    
  62. Ο/Η vioannis λέει:

    Στέλιο, μια γρήγορη λύση.
    Ας υποθέσουμε ότι οι αρχικοί αριθμοί σου, είναι στη στήλη Α1:Α20 Β1:Β20
    Στη διπλανή στήλη Β1:Β20 αριστερή στήλη Α1:Α20 εισάγεις τη συνάρτηση =RAND() που επιστέφει έναν τυχαίο αριθμό. (*Δες σημείωση στο τέλος))
    Θέλεις να πάρεις 5 αριθμούς από τους 20 της στήλης Α1:Α20 Β1:Β20, στα κελιά Η1:Η5.
    Εισάγεις τις συναρτήσεις:

    Η1:   =VLOOKUP(LARGE($A$1:$A$20;1);$A$1:$B$20;2;FALSE)
    Η2:   =VLOOKUP(LARGE($A$1:$A$20;2);$A$1:$B$20;2;FALSE)
    Η3:   =VLOOKUP(LARGE($A$1:$A$20;3);$A$1:$B$20;2;FALSE)
    Η4:   =VLOOKUP(LARGE($A$1:$A$20;4);$A$1:$B$20;2;FALSE)
    Η5:   =VLOOKUP(LARGE($A$1:$A$20;5);$A$1:$B$20;2;FALSE)
    

    Το μόνο που αλλάζεις στις συναρτήσεις, είναι το δεύτερο όρισμα της LARGE ( 1,2,3,4,5)
    (εναλλακτικά γράφεις στα κελία G1:G5 τους αριθμούς 1 έως 5, εισάγεις στο κελί Η1 την συνάρτηση:

     =VLOOKUP(LARGE($A$1:$A$20;G1);$A$1:$B$20;2;FALSE)
    

    και την αντιγράφεις στα κελιά Η2:Η5)
    Αν θέλεις να πάρεις άλλους 4, διαφορετικούς, τότε θα εισάγεις στα κελιά που θέλεις τις συναρτήσεις :

    =VLOOKUP(LARGE($A$1:$A$20;6);$A$1:$B$20;2;FALSE)
    =VLOOKUP(LARGE($A$1:$A$20;7);$A$1:$B$20;2;FALSE)
    =VLOOKUP(LARGE($A$1:$A$20;8);$A$1:$B$20;2;FALSE)
    =VLOOKUP(LARGE($A$1:$A$20;9);$A$1:$B$20;2;FALSE)
    

    Νομίζω κατάλαβες τον μηχανισμό. Σε κάθε αριθμό αντιστοιχίζω με την RAND έναν τυχαίο.Κατόπιν η συνάρτηση LARGE ταξινομεί τους αριθμούς με βάσει τον τυχαίο RAND, δηλαδή δημιουργείται μία τυχαία ταξινόμηση. Από την ταξινόμηση αυτή, την πρώτη φορά πήρα τους 5 πρώτους και τη δεύτερη τους 4 επόμενους, και όμοια αν θέλω και άλλους.
    Με μακροντολή ή με συνάρτηση χρήστη θα είχαμε πιο γρήγορα αποτελέσματα, αν σε ενδιαφέρει και αν βρω χρόνο μέσα στην εβδομάδα, θα το δω.
    Σχετικό θέμα είχαμε συζητήσει με τον φίλο Θάνο στις 26 και 27 Μαΐου 2012, στη σελίδα About. Αν θέλεις δες το.
    Επίσης αν κάποιος φίλος έχει ασχοληθεί με σχετικά θέματα, ας μοιραστεί τη δουλειά του και τις σκέψεις του μαζί μας.
    (*) Ίσως θα πρέπει, τις συναρτήσεις =RAND() στη στήλη Β1:Β20 Α1:Α20 να αντικαταστήσεις αμέσως με αξίες, διότι η RAND() είναι η πιο ευμετάβλητη συνάρτηση και με κάθε αλλαγή οπουδήποτε στο φύλλο το υποχρεώνει σε επαναυπολογισμό, και τα αποτελέσματα που θα παίρνεις θα είναι μεν σωστά, αλλά κάθε φορά διαφορετικά, και ίσως αυτό δεν το θέλεις. Έτσι, μόλις εισάγεις τις =RAND(), επιλέγεις την στήλη Β1:Β20 Α1:Α20, δεξί κλικ, αντιγραφή, ξανά δεξί κλικ, ειδική επικόλληση > Τιμές > ΟΚ.

  63. Ο/Η stelios λέει:

    Αγαπητε Γιαννη σε ευχαριστω για την αμεση απαντηση!
    Εχω προβλημα με τη συναρτηση =rand.
    Να γινω πιο σαφης:
    Στη στηλη Β μου επιστεφει δεκαδικους αριθμους , αυτο βεβαια δεν ειναι προβλημα εκανα μορφοποιηση αλλα μου επιστεφει 0 και 1!
    Απο κει και περα νομιζω οτι οδηγουμαι σε αδιεξοδο αφου δεν εχω σωστα δεδομενα.
    Να σας υπενθυμισω οτι δεν ειμαι και ο πιο εμπειρος στο Excel και χρησιμοποιω το office 2003.
    Eπισης να σας πω οτι ισως δεν σας εδωσα να καταλαβετε σωστα (εχω μια μικρη υπονοια)
    θελω να μου δινει τετραδες απο τους αριθμους που εχω βαλει εγω στη στηλη Α.
    Δηλαδη , εδωσα 20 αριθμους και θελω να παρω 5 μοναδικες τεραδες (σε τυχαια σειρα)
    Χωρις να επαναλαμβανεται καποιος αριθμος σε καμια τετραδα.
    Σας ευχαριστω και παλι, Καλημερα σας

  64. Ο/Η vioannis λέει:

    Μάριε, χίλια συγνώμη, στην περιγραφή που σου έστειλα έκανα ένα λάθος και για αυτό δεν παίρνεις τα αποτελέσματά σου. Εσύ πολύ σωστά διατύπωσες το ερώτημά σου.
    Λοιπόν διόρθωση: Οι αρχικοί αριθμοί είναι στη στήλη Β1:Β20 και οι συναρτήσεις RAND αριστερά τους (αφού θα κάνουμε VLOOKUP) στη στήλη Α1:Α20.
    Αν θες κατέβασε το βιβλίο uniquevalue.xls για να δεις το παράδειγμα

  65. Ο/Η stelios λέει:

    Αυτο ακριβως εψαχνα! Ευχαριστω παρα πολυ και παλι για την απαντηση και το χρονο σας!
    Συγχαρητηρια και ευτυχως που βρισκονται ανθρωποι σαν και σας και μας βοηθατε γιατι υπο αλλες συνθηκες αμφιβαλλω αν πολλοι απο μας θα εβρισκαν λυσεις στα προβληματα που θα προεκυπταν.
    Να στε καλα και παλι!

  66. Ο/Η Μάριος λέει:

    Γιάννη σ’ ευχαριστώ πολύ για τη βοήθειά σου, είναι όντως ανεκτίμητη όμως οφείλω να σου ζητήσω συγνώμη γιατί δεν σου εξήγησα καλά ακριβώς αυτό που θέλω. Εσύ καλά έκανες και πάλι σ’ ευχαριστώ, το λάθος όμως είναι δικό μου. Έτσι αναλαμβάνοντας τις ευθύνες μου στο ακέραιο σου εξηγώ επί πραγματικού αυτό που θέλω.(Δεν ξέρω αν γίνεται). Στο κελί Β16 αθροίζονται οι τιμές από τα κελιά Β4 έως και Β15. Στο κελί Β25 θέλω να υπολογίζεται η διαφορά από την τιμή που είχε το Β16 την προηγούμενη μέρα με την τιμή που είχε το Β16 την προηγούμενη μέρα μετά την αναπροσαρμογή των τιμών των κελιών Β7 εως και Β15. Θα προσπαθήσω με παράδειγμα:
    B4=10, B5=10,B6=10,B7=10, B8=10,B9=10, B10=10, B11=10, B12=10, B13=10, B14=10, B15=10 και Β16=120(Το άθροισμα Β4 έως και Β15) την πρώτη ημέρα. Την επόμενη ημέρα το άθροισμα αυτό μπορεί να μεταβληθεί εάν αλλάξει η τιμή σε κάποιο από τα υπόλοιπα κελιά. Θέλω όμως κάθε μέρα το Β25 να λαμβάνει υπόψη του το άθροισμα της προηγούμενης μέρας (που είχε το Β16) και βάση αυτού του αθροίσματος να υπολογίζει την τιμή που θα προκύπτει από την αφαίρεση του ίδιου αθροίσματος μετά όμως από την αναπροσαρμογή των τιμών των κελιών Β7 έως και Β15 που θα γίνεται εκείνη τη στιγμή η αναπροσαρμογή των τιμών και όχι την προηγούμενη μέρα.(σε όποιο κελί από τα Β7 έως και Β15 γίνει η αναπροσαρμογή ή και σε όλα).
    (Δεν ξέρω αν γίνεται αυτό αλλά αν τελικά γίνει θερμή παράκληση στο αποτέλεσμα να μην είναι αρνητικό το πρόσημο). Πιστεύοντας στις μοναδικές σου εξαίρετες ικανότητες περιμένω εναγωνίως την πολύτιμη βοήθειά σου.(εάν και πάλι αυτό είναι εφικτό).
    Με φιλικούς χαιρετισμούς Μάριος.

  67. Ο/Η vioannis λέει:

    Φίλε Μάριε.
    Αν κατάλαβα καλά, αυτό που ζητάς είναι η εγγραφή της απόλυτης διαφοράς (δ) = «Νέο άθροισμα»-«Παλιό άθροισμα», να γίνει στο κελί Β25, αφού ολοκληρωθούν οι αλλαγές που θα κάνεις στα κελιά Β4:Β15. Οι οποίες μπορεί να από 1 έως 12. Πως μπορεί να ξέρει το excel πότε ολοκλήρωσες τις αλλαγές για να υπολογίσει τη δ; Λογικά ο χρήστης όταν τελειώσει με τα κελιά Β4:Β15, πρέπει να δημιουργήσει και να εναποθέσει στο Β25 τη δ, με μια μακροεντολή, που θα καλεί με ένα πλήκτρο. Αυτό φυσικά είναι εύκολο, αλλά από τη πλευρά του χρήστη, μεταξύ των δύο ενεργειών, μπορεί να γίνουν άπειρα και μη προβλέψιμα πράγματα και έτσι η αρχική παγίδευση της τιμής «Παλιό άθροισμα» να αποβεί μάταιη
    Παρόλα αυτά δες τη παρακάτω απλή μάκρο που θα γράψεις σε ένα module του βιβλίου. Κάνει αυτό που περιγράφεις με τη μόνη διαφορά ότι στο κελί Β16 αποθηκεύει το άθροισμα SUM(Β4:Β15) σαν αξία(τιμή). Επειδή είναι αξία, καθώς ο χρήστης αλλάζει τις τιμές στα κελιά Β4:Β15, δεν μεταβάλλεται, αλλά μετά το τρέξιμό της, η μάκρο αφού κάνει αυτά που ζητάς, αποθηκεύει το νέο άθροισμα στο Β16 σαν αξία πάλι για να είναι έτοιμο για τη νέα συνεδρία.
    Άλλαξε στον κώδικα το «Φύλλο1» με αυτό που ταιριάζει στο βιβλίο σου.

    Sub mycalculation()
    Dim mysheet As Object
    Dim oldsum As Double
    Dim newsum As Double
    Dim dif As Double
    Dim keli As Range
    Dim difkeli As Range
    Set mysheet = ActiveWorkbook.Worksheets("Φύλλο1")
    Set keli = mysheet.Range("B16")
    Set difkeli = mysheet.Range("B25")
    oldsum = keli.Value
    keli.Formula = "=SUM(B4:B15)"
    newsum = keli.Value
    dif = VBA.Abs(newsum - oldsum)
    difkeli = dif
    keli = keli.Value
    End Sub
    
  68. Ο/Η Γιώργος λέει:

    Πάλι αργά σας χαιρετώ.
    Αν σε μια στήλη έχω τιμές κειμένου ή και αριθμητικές, των οποίων ο αριθμός δεν είναι σταθερός αλλά μπορεί να αναπτύσσεται, υπάρχει τρόπος να παίρνω σε ένα άλλο κελί ένα κείμενο που θα περιλαμβάνει όλες τις τιμές διαχωρισμένες με έναν χαρακτήρα της επιλογής μου (Π.Χ. α,β,γ,Τ1,β,2, κ.ο.κ)
    Ευχαριστώ.

  69. Ο/Η vioannis λέει:

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

    Function JoinCells(kelia As Range, delimiter As String)
    Dim pl As Long, j As Long
    Dim keli As Range
    Dim Varr As Variant
    pl = Application.CountA(kelia)
    ReDim Varr(pl - 1)
    For Each keli In kelia
    If keli <> "" Then
    j = j + 1
    Varr(j - 1) = keli
    End If
    Next keli
    JoinCells = Join(Varr, delimiter)
    End Function
    

    Η συνάρτηση JoinCells δέχεται δύο ορίσματα:
    1) kelia που είναι η εν δυνάμει περιοχή (στήλη, γραμμή, ορθογώνια περιοχή, συνένωση διαφόρων περιοχών ) που περιέχει και που θα περιέχει στο μέλλον, τα κελιά που θέλεις να συνενώσεις πχ Α1:Α2000. Η συνάρτηση αγνοεί τα κενά κελιά( όσο αυτά είναι κενά) που θα συναντήσει στην περιοχή.
    2) Delimiter που είναι το διαχωριστικό της αρεσκείας σου και το οποίο θα γράψεις μέσα σε εισαγωγικά.
    Πχ αν η εν δυνάμει περιοχή που θα υποδέχεται τις αρχικές τιμές είναι A1:A2000 και διαχωριστικό είναι το κόμμα, γράψε τη συνάρτηση έτσι:

      =JoinCells(A1:A2000;",")  

    Αν η περιοχή αποτελείται από διάφορες μικρότερες, γράψε μέσα σε παρένθεση τις περιοχές, έτσι:

      =JoinCells((A1:A22;C1:H1;I12:M20);",") 

    Μπορείς να συντάξεις τη συνάρτηση και ως έξης:
    Δώσε στα μεταβαλλόμενα δεδομένα σου ένα δυναμικό όνομα πχ

      Mydata  = OFFSET(Φύλλο1!$a$1;0;0;COUNTA(Φύλλο1!$a:$a);1) 

    Και γράψε την συνάρτηση:

      =JoinCells(mydata;",") 

    Ή τέλος, όρισε την στήλη σαν πίνακα και χρησιμοποίησε το όνομα του πίνακα:

      =JoinCells(Πίνακας1;",") 
  70. Ο/Η Γιώργος λέει:

    Πράγματι υπάρχει η concatenate, όμως για πολλά δεδομένα δεν γίνεται και όπως το περίμενα μου έδωσες πολύ καλή λύση. Ευχαριστώ και πάλι.

  71. Ο/Η Άννα λέει:

    Καλησπέρα κύριε Γιάννη.
    Έχω ένα πρόβλημα και θα ήθελα τη βοήθειά σας.
    Πως μπορώ να διαχωρίσω τους αριθμούς από τα γράμματα σε ένα κελί? Δηλαδή κάθε κελί έχει έναν κωδικό που περιλαμβάνει αριθμούς και γράμματα όχι πάντα τον ίδιο αριθμό, όμως πάντα πρώτα είναι τα γράμματα και μετά ακολουθούν οι αριθμοί. Ποια συνάρτηση μπορώ να χρησιμοποιήσω?
    Σας ευχαριστώ εκ των προτέρων για την άμεση ανταπόκρισή σας.

  72. Ο/Η vioannis λέει:

    Άννα,
    η παρακάτω Ctrl+Shift+Enter συνάρτηση:

    =MATCH(TRUE;ISNUMBER(-MID(A1;ROW(INDIRECT("1:"&LEN(A1)));1));0)
    

    Θα σου επιστρέψει τη θέση του πρώτου αριθμητικού χαρακτήρα, για ένα κωδικό γραμμένο στο κελί Α1 .
    Για να εισάγεις μία Ctrl+Shift+Enter συνάρτηση :
    Γράφεις ή αντιγράφεις τη συνάρτηση στο κελί.
    Πατάς F2 και μετά πατάς Ctrl+Shift+Enter.
    Το excel αυτόματα περιβάλλει την συνάρτηση σε άγκιστρα: { }
    (Δες το σχετικό σημείωμα στο ιστολόγιο: «συναρτήσεις – πίνακες ή Ctrl+Shift+Enter συναρτήσεις»)
    Αν π.χ. στο κελί Α1 υπάρχει ο κωδικός abcd123, η συνάρτηση θα επιστρέψει 5 .
    Στη συνέχεια οι συναρτήσεις:

    =LEFT(A1;B1-1)
    =RIGHT(A1;LEN(A1)-B1+1)
    

    Θα σου επιστρέψουν αντίστοιχα το αλφαβητικό και το αριθμητικό τμήμα του κωδικού.
    (Β1 είναι το κελί που έγραψα τον πρώτο τύπο, που επιστρέφει τη θέση του πρώτου αριθμού)
    Όλα αυτά με την προϋπόθεση ότι οι κωδικοί δεν περιλαμβάνουν άλλα σύμβολα, παύλες, τελείες, κενά κλπ. Αν περιλαμβάνουν, επανέρχεσαι, για όλα υπάρχει λύση.

  73. Ο/Η Άννα λέει:

    απλά respect!!!!!!!!!!!!!!!!!!!!!!
    με σώσατε!!!!!!!!!!!!!!!! πάνω από 10.000 κωδικοί έπρεπε να διαχωριστούν, οπότε καταλαβαίνετε… ελπίζω μόνο να μην μου παρουσιαστούν κωδικοί με κενά ή παύλες!!!
    σας ευχαριστώ πολύ …. πολύ για την πολύτιμη βοήθειά σας.
    Καλημέρα :)))))))))))))))

  74. Ο/Η Άννα λέει:

    καλησπέρα!
    επανήλθα δριμύτερη με νέα απορία! σε 4 στήλες εισάγω τιμές, πως μπορώ αυτόματα η μικρότερη τιμή να έχει πράσινη γραμματοσειρά και οι υπόλοιπες κόκκινη?
    ευχαριστώ πολύ

  75. Ο/Η Χάρης λέει:

    Καλησπέρα.
    Πιο πάνω απαντώντας στο ερώτημα της Άννας γράψατε ένα τύπο που βρίσκει τη θέση του πρώτου αριθμού. Είναι εύκολο να εξηγήσετε πως δουλεύει ο τύπος.
    Ευχαριστώ πολύ

  76. Ο/Η vioannis λέει:

    Άννα
    Αν οι στήλες είναι συνεχόμενες, πχ C,D,E,F τότε επίλεξε με το ποντίκι ολόκληρες τις στήλες από την C έως την F και όπως είναι επιλεγμένες με ενεργό το κελί C1, εισάγεις τη μορφοποίηση με όρους με τύπο
    =C1=MIN($C1:$F1)
    και επιλέγεις μορφοποίηση γραμματοσειράς πράσινη
    Αν οι στήλες δεν είναι συνεχόμενες πχ I,K,N,Q τότε
    α) επίλεξε τη στήλη Ι (κλικ στο γράμμα της)
    β) πάτα το Ctrl και κράτα το πατημένο
    γ) επίλεξε τις στήλες K,N,Q (κλικ διαδοχικά στα γράμματά τους)
    δ) ελευθέρωσε το Ctrl
    Έτσι όπως είναι επιλεγμένες οι στήλες με ενεργό το κελί Q1 εισάγεις τη μορφοποίηση με όρους με τύπο
    =Q1=MIN($I1;$K1;$N1;$Q1)
    και επιλέγεις μορφοποίηση γραμματοσειράς πράσινη.
    Σε κάθε περίπτωση θα προσέχεις ποιο κελί είναι ενεργό και με αυτό θα ξεκινά ο τύπος της μορφοποίησης.
    Για λεπτομέρειες, πως εισάγεται τύπος στην μορφοποίηση με όρους, στις διάφορες εκδόσεις του excel, δες το άρθρο του ιστολογίου : «Χρωματική επισήμανση ενεργού κελιού, στήλης και γραμμής»
    Για να εμφανίζονται οι υπόλοιπες τιμές σε κόκκινο χρώμα απλά επιλέγεις τις στήλες και κάνεις απλή μορφοποίηση γραμματοσειράς στο χρώμα που θέλεις.
    Από το excel 2007 και μετά, η μορφοποίηση που ζητάς είναι τυποποιημένη:
    Επιλέγεις τις 4 στήλες και καρτέλα Κεντρική > Μορφοποίηση υπό όρους > Γραμμές δεδομένων > Περισσότεροι κανόνες > Μορφοποίηση μόνο των πρώτων ή των τελευταίων τιμών στην κατάταξη και εδώ από τις τιμές Πρώτα/Τελευταία επιλέγεις: Τελευταία και δεξιά αλλάζεις την αριθμητική τιμή σε 1, το δε κουτάκι του ποσοστού να μην είναι επιλεγμένο, επιλέγεις την μορφοποίηση της γραμματοσειράς σε πράσινο χρώμα και ΟΚ, ξανά ΟΚ και είσαι έτοιμη.

  77. Ο/Η vioannis λέει:

    Χάρη!
    Για την επεξήγηση του τύπου χρειάζεσαι ένα νέο καθαρό φύλλο, όπου στο κελί Α1 γράψε ένα κωδικό, ας πούμε : abcd123,
    Ξεκίνα με τη συνάρτηση MID που επιστρέφει έναν συγκεκριμένο πλήθος χαρακτήρων από ένα κελί, αρχίζοντας από όποιο χαρακτήρα θέλεις.
    Αν στο κελί Α1 υπάρχει το κείμενο abcd123, η =MID(A1;3;1) επιστρέφει c, δηλαδή, από το κελί Α1, αρχίζοντας από τον 3ο χαρακτήρα, επιστρέφει 1 χαρακτήρα.
    Η =MID(A1;5;2) θα επιστρέψει 12, δηλαδή, στο κελί Α1, αρχίζει από τον 5ο χαρακτήρα και επιστρέφει 2 χαρακτήρες. Σημείωσε όμως, ότι αυτό το 12 δεν το επιστρέφει σαν αριθμό αλλά σαν κείμενο (Ο αριθμός/κείμενο 12, είναι στοιχισμένος αριστερά στο κελί και αν με τη συνάρτηση =ISNUMBER ελέγξεις το κελί που γίνεται η επιστροφή, θα πάρεις FALSE ). Τροποποίησε την προηγούμενη συνάρτηση έτσι: =-MID(A1;5;2), δηλαδή βάλε ένα μείον μπροστά, τώρα επιστρέφει τον καθαρό αριθμό -12, είναι στοιχισμένος δεξιά στο κελί και η =ISNUMBER για το κελί αυτό επιστρέφει TRUE. Όμοια η =- -MID(A1;5;2) θα επιστρέψει τον θετικό καθαρό αριθμό 12.
    Αν τώρα σαν δεύτερο όρισμα της MID (δηλαδή το όρισμα που της λέει από ποιόν χαρακτήρα να ξεκινήσει) χρησιμοποιήσεις τον πίνακα {1\2\3\4\5\6\7}, η συνάρτηση

    =MID(A1;{1\2\3\4\5\6\7};1)
    

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

    =MID(A1;{1\2\3\4\5\6\7};1)
    

    Στο κελί βλέπεις να επιστρέφει ο πρώτος χαρακτήρας του κελιού Α1, δηλαδή a, όμως αυτό είναι απατηλό. Επίλεξε το κελί αυτό (που έχει τη συνάρτηση MID), πάτα F2 και μετά F9 (μην πατάς Enter). Θα δεις σε άσπρο – μαύρο μέσα στο κελί τον πίνακα:

      
    ={"a"\"b"\"c"\"d"\"1"\"2"\"3"}
    

    Το ίδιο βλέπεις και στην γραμμή των τύπων. Δηλαδή η συνάρτηση στην πραγματικότητα επιστρέφει ένα πίνακα με όλους τους χαρακτήρες του κελιού Α1.
    Πάτα Esc για βγεις από την κατάσταση διόρθωσης(F2) και υπολογισμού (F9).
    Αυτή τη μέθοδο, για να βλέπουμε τι πραγματικά επιστρέφουν οι τύποι που περιέχουν πίνακες, θα τη λέμε παρακάτω F2F9.
    Αν το κελί Α1 είχε πολλούς χαρακτήρες και όχι μόνο 7, ας πούμε 100, θα ήταν παράλογο να γράψεις τον πίνακα αναλυτικά {1\2\3\4……..\100}. Ευτυχώς υπάρχουν τρόποι να πάρεις ένα πίνακα διαδοχικών αριθμών με συνάρτηση. Γράψε σε ένα κελί

    =ROW(INDIRECT("1:100"))
    

    Κάνε F2F9 στο κελί και θα δεις τον πίνακα των 100 αριθμών.
    Στην περίπτωση που δεν γνωρίζεις πόσους χαρακτήρες έχει ένα κελί (όπως εδώ, διότι πιθανά να έχεις κωδικούς με διάφορα μήκη), αναθέτεις στη συνάρτηση LEN να βρει το πλήθος των χαρακτήρων και η προηγούμενη συνάρτηση γράφεται :

    =ROW(INDIRECT("1:"&LEN(A1)))
    

    Αυτή την τελευταία χρησιμοποίησε σαν δεύτερο όρισμα της MID, και έτσι η

    =MID(A1;ROW(INDIRECT("1:"&LEN(A1)));1)
     

    θα επιστρέψει (κάνε F2F9 για να το δεις):

    ={"a"\"b"\"c"\"d"\"1"\"2"\"3"}
    

    Αν με την ISNUMBER ρωτήσεις ποιοι χαρακτήρες από αυτούς είναι αριθμοί, θα πάρεις για όλους FALSE, γιατί όπως είπαμε παραπάνω είναι όλοι κείμενο δηλαδή η συνάρτηση

    =ISNUMBER(MID(A1;ROW(INDIRECT("1:"&LEN(A1)));1))
    

    Θα επιστρέψει:

    ={FALSE\FALSE\FALSE\FALSE\FALSE\FALSE\FALSE}
    

    Αν όμως μπροστά την MID παρεμβάλεις το πλην ( που αναγκάζει τους αριθμούς να συμπεριφερθούν σαν αριθμοί) , τότε η συνάρτηση:

    =ISNUMBER(-MID(A1;ROW(INDIRECT("1:"&LEN(A1)));1))
    

    θα επιστρέψει:

    ={FALSE\FALSE\FALSE\FALSE\TRUE\TRUE\TRUE} 
    

    Τέλος αναθέτεις στην συνάρτηση MATCH να βρει σε ποια θέση, στον πίνακα αυτό, εμφανίζεται για πρώτη φορά το TRUE, δηλαδή η θέση του πρώτου αριθμού.

    MATCH(lookup_value;lookup_array;match_type),  όπου
    lookup_value=TRUE
    lookup_array = ISNUMBER(-MID(A1;ROW(INDIRECT("1:"&LEN(A1)));1))
    match_type=0 (για να εντοπιστεί η πρώτη τιμή που ισούται με την τιμή lookup_value=TRUE)
    

    Έτσι ο τελικός τύπος είναι:

      =MATCH(TRUE;ISNUMBER(-MID(A1;ROW(INDIRECT("1:"&LEN(A1)));1));0)
    

    ο οποίος πρέπει να εισαχθεί σαν τύπος -πίνακας με Ctrl+Shift+Enter, για να γίνουν οι υπολογισμοί των εσωτερικών πινάκων.

    Να διευκρινίσω εδώ, ότι η λύση που έδωσα στην Άννα για το πρόβλημά της, σε καμία περίπτωση δεν είναι η μοναδική ούτε βέβαια η πιο κομψή και σύντομη. Πολλές φορές σχεδιάζοντας μία συνάρτηση που να λύνει ένα πρόβλημα, μπορεί να παραβλέψουμε ένα πιο απλό ή πιο σύντομο δρόμο. Έτσι, ο παραπάνω τύπος, είναι ένας από πολλούς, ίσως, που μπορούν να γραφούν και λύνουν το πρόβλημα.
    Παράδειγμα, θα μπορούσαμε να λύσουμε το πρόβλημα με αλλεπάλληλες συναρτήσεις SUBSTITUTE. Γράψτε διαδοχικά στο κελιά B1,C1,D1,…K1,L1 τους τύπους:

    =SUBSTITUTE(A1;1;"")
    =SUBSTITUTE(B1;2;"")
    =SUBSTITUTE(C1;3;"")
    =SUBSTITUTE(D1;4;"")
    =SUBSTITUTE(E1;5;"")
    =SUBSTITUTE(F1;6;"")
    =SUBSTITUTE(G1;7;"")
    =SUBSTITUTE(H1;8;"")
    =SUBSTITUTE(I1;9;"")
    =SUBSTITUTE(J1;0;"")
    =SUBSTITUTE(A1;K1;"")
    

    Καθένας από αυτούς απαλείφει διαδοχικά τους αριθμούς 1,2,3,…9,0 και στο κελί Κ1 τελικά παίρνω τον κωδικό χωρίς αριθμούς και τέλος , στο κελί L1, o τελευταίος τύπος απαλείφει τα γράμματα και επιστρέφει τους αριθμούς
    Φυσικά μπορούμε να ενθέσουμε τις SUBSTITUTE συναρτήσεις και να περιοριστούμε σε 3 κελιά B1, C1, D1 με τύπους αντίστοιχα:

    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1;0;"");1;"");2;"");3;"");4;"")
    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B1;5;"");6;"");7;"");8;"");9;"")
    =SUBSTITUTE(A1;C1;"")
    

    Αν μάλιστα δουλεύετε σε excel 2007 ή νεώτερο που είναι εφικτή η ένθεση πολλών συναρτήσεων, η παρακάτω συνάρτηση των 173 χαρακτήρων θα απαλείψει όλους αριθμητικούς χαρακτήρες από τον κωδικό στο κελί Α1:

    =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1;0;"");9;"");8;"");7;"");6;"");5;"");4;"");3;"");2;"");1;"")
    

    Κλείνω με έναν ακόμα τύπο που λύνει το πρόβλημα της Άννας, εντοπίζοντας τη θέση του πρώτου αριθμητικού ψηφίου:

    =MIN(IF(ISERROR(FIND({1;2;3;4;5;6;7;8;9;0};A1;1));"";FIND({1;2;3;4;5;6;7;8;9;0};A1;1)))
    

    Και είμαι σίγουρος ότι κάπου στον κόσμο θα υπάρχει μια πιο ωραία και έξυπνη λύση.

  78. Ο/Η Γιώργος λέει:

    Είχαμε ασχοληθεί παλιότερα με τα κρυφά και πολύ κρυφά φύλλα. Αν θέλουμε να εξασφαλίσουμε ότι αυτά θα παραμείνουν κρυφά χωρίς να δίνεται η δυνατότητα αλλαγής της κατάστασής τους από τον επεξεργαστή της Visual Basic, πως μπορούμε να προστατεύσουμε το βιβλίο μας (ακόμα και από την επεξεργασία Visual Basic);

  79. Ο/Η vioannis λέει:

    Γιώργο!
    Αν είναι βιβλίο που περιέχει μακτροεντολές, μπορείς να κλειδώσεις με συνθηματικό το VBA project του βιβλίου, ώστε να μην είναι ορατά τα φύλλα και οι ιδιότητές τους από τον επεξεργαστή της VBA (Tools > VBAProjectProperties > Protection>…..)
    Πρόσεξε όμως, είναι δυνατόν ένας χρήστης, τρέχοντας μια κατάλληλη μάκρο από ένα άλλο βιβλίο να αλλάξει την ιδιότητα visible του φύλλου και να το προσπελάσει.
    Δεν έχω κατά νου κάτι πιο αποτελεσματικό.

  80. Ο/Η Γιώργος λέει:

    Ευχαριστώ για την ανταπόκριση. Το είχα δοκιμάσει, όμως μάλλον κάτι δεν έχω καταλάβει ή δεν κάνω καλά. Παρά το ότι έχω ορίσει κωδικό πρόσβασης, εξακολουθεί να ανοίγει και να μπορούν να οριστούν οι ιδιότητες των φύλλων. Επίσης ενώ κανονικά σε άλλα VBA projects τα οποία είναι προστατευμένα δεν μπορώ να αναπτύξω το + που υπάρχει πριν, εγώ δεν μπορώ να το καταφέρω. Επίσης δεν καταλαβαίνω το Lock project for viewing. Ευχαριστώ.

  81. Ο/Η Γιώργος λέει:

    Αφού έστειλα το σπαραπάνω σχόλιο, έκανα μερικές προσπάθειες ακόμη. Κατάλαβα οτι ο κωδικός «κλειδώνει» την κατάσταση στην οποία βρίσκεσαι εκείνη τη στιγμή. Αν το project σου είναι συμπτυγμένο, τότε για να το αναπτύξεις σου ζητάει τον κωδικό. Αν πράγματι έτσι είναι , τότε είναι αυτό που ζητούσα. Αν πάλι κάνω λάθος, πες μου.

  82. Ο/Η vioannis λέει:

    Για να κλειδώσεις με συνθηματικό το VBA project του βιβλίου, πρέπει το βιβλίο να περιέχει μακροεντολές και σαν τέτοιο να αποθηκευτεί.
    Η σειρά ενεργειών στον επεξεργαστή της VBA είναι:
    Επιλέγεις το VBAproject
    Tools > VBAProjectProperties > Protection
    Στην καρτέλα Protection τσεκάρεις το Lock project for viewing
    Γράφεις 2 φορές το password και OK.
    Αν το βιβλίο δεν περιέχει τουλάχιστον μία μακρο ή μια vba συνάρτηση, ακόμα και αν το αποθηκεύσεις σαν xlsm ( με δυνατότητα μακροεντολών) δεν θα κλειδώσει.
    Η τελευταία παρατήρησή σου ότι « ο κωδικός «κλειδώνει» την κατάσταση στην οποία βρίσκεσαι εκείνη τη στιγμή» δεν νομίζω ότι ισχύει.

  83. Ο/Η Γιώργος λέει:

    Οπωσδήποτε περιέχει μακροεντολές και vba συναρτήσεις. Πάντως λειτούργησε όπως είπα προηγουμένως. Όσο για την αποθήκευση βιβλίου ως xlsm, νομίζω ότι αυτό ισχύει για το 2007 και μετά. Είναι έτσι;

  84. Ο/Η vioannis λέει:

    Ναι, για το 2007 και μετά.

  85. Ο/Η Παναγιώτης λέει:

    Sub MyClear()
    Range(«K17»).ClearContents
    End Sub
    Στο κελί (Κ17) διαγράφει το περιεχόμενο. Εγώ θέλω πχ να διαγράφει το περιεχόμενο κελιού που αναφέρεται στο κελί Κ17. Υπάρχει αυτή η δυνατότητα τροποποιώντας την παραπάνω μακροεντολή;

  86. Ο/Η vioannis λέει:

    Παναγιώτη!
    Τι κατάλαβα:
    Το κελί Κ17 περιέχει μία αναφορά προς άλλο ή άλλα κελιά, δηλαδή το κελί Κ17 περιέχει μια αναφορά του τύπου:
    =A1
    =Φύλλο2!E8
    =B3:E12
    =Φύλλο3!G9:I16
    =Φύλλο1!D8:D14;Φύλλο2!G8:G16;Φύλλο3!K8:L15
    =εναΟνομαΠεριοχης
    =INDIRECT(«A1»)
    =INDIRECT(«A1:B10»)
    =INDIRECT(«Φύλλο3!G9:I16»)
    =[ΚαποιοΑλλοΑνοιχτοΒιβλιο.xlsx]Φύλλο1!$G$5

    Αν σωστά κατάλαβα, ο παρακάτω κώδικας, με ένα έμμεσο τρόπο, κάνει αυτό που ζητάς.

    Sub MyClear()
    Dim keli As Range
    Dim alloKeli As String
    Set keli = Range("k17")
    alloKeli = keli.Formula
    Range(alloKeli).ClearContents
    End Sub
    

    Αν δεν κατάλαβα καλά, επανέρχεσαι

  87. Ο/Η Παναγιώτης λέει:

    3 μέρες στο παγκόσμιο ιστό, στη ψωροκώσταινα βρήκα λύση! Νάσαι καλά, αυτό ακριβώς ζητούσα. Θα επανέλθω ούτως ή άλλως γιατί εδώ μέσα υπάρχει πολύ υλικό για ψάξιμο…
    Ευχαριστώ πολύ!

  88. Ο/Η vioannis λέει:

    Να επανέλθεις Παναγιώτη, ευπρόσδεκτος!

  89. Ο/Η Παναγιώτης λέει:

    Επανέρχομαι:
    Η παραπάνω λύση με επηρέασε να εξελίξω το σκεπτικό μου και στο κελί π.χ. Κ17 να περιέχει μια αναφορά τύπου:
    =VLOOKUP(Q2,CHOOSE({1;2},Βάση!$F$2:$F$33,Παράμετροι!$W$3:$W$33),2,FALSE)
    όπου προκύπτει το κελί που θέλω να διαγράψω: (Βάση!Ε2)
    Όμως μπλοκάρει τον κώδικα. Συγνώμη αλλά δεν έχω εμπειρία από μακροεντολές…

  90. Ο/Η vioannis λέει:

    Παναγιώτη!
    Παρατήρηση 1η
    οι 2 στήλες: Βάση!$F$2:$F$33 και Παράμετροι!$W$3:$W$33)καλύτερα να έχουν το ίδιο μήκος (από 2 έως 33 ή από 3 έως 33 και οι δύο)
    Παρατήρηση 2η
    Η VLOOKUP σου επιστρέφει μια τιμή της στήλης: Παράμετροι!$W$3:$W$33
    Πως από αυτή προκύπτει το κελί ( Βάση!Ε2) που θέλεις να διαγράψεις ;
    Αφού ανιχνεύεις την τιμή του Q2 στην στήλη Βάση!$F$2:$F$33 για να καταλήξεις σε κελί του ίδιου φύλλου ( Βάση!Ε2), γιατί εμπλέκεται το φύλλο Παράμετροι ;
    Σίγουρα κάποιο λόγο θα έχεις, αλλά γίνε λίγο πιο αναλυτικός.
    Επειδή κάτι υποπτεύομαι δες το παρακάτω :
    Η Ctrl+Shift+Enter συνάρτηση:

    =VLOOKUP(Q2;CHOOSE({1;2};$F$2:$F$33;ROW(F2:F33));2;FALSE)
    

    θα ανιχνεύσει τον αριθμό γραμμής της τιμής του κελιού Q2 στη στήλη $F$2:$F$33
    Η Ctrl+Shift+Enter συνάρτηση:

    = "f"&VLOOKUP(Q2;CHOOSE({1;2};$F$2:$F$33;ROW(F2:F33));2;FALSE)
    

    Θα επιστρέψει όλη τη διεύθυνση
    Και η Ctrl+Shift+Enter συνάρτηση:

    =INDIRECT("f"&VLOOKUP(Q2;CHOOSE({1;2};$F$2:$F$33;ROW(F2:F33));2;FALSE))
    

    Θα δημιουργήσει αναφορά προς το κελί αυτό,
    Αυτή γράψε στο κελί Κ17 και δες πως η μάκρο θα δουλέψει.
    Τα ξαναλέμε.
    Προσοχή!. Όλες οι συναρτήσεις είναι Ctrl+Shift+Enter συναρτήσεις

  91. Ο/Η Γιώργος λέει:

    Σας χαιρετώ. Από πολλά χρόνια ασχολούμαι με την συγχώνευση αλληλογραφίας, εργασία που αντιμετωπίζει προβλήματα συνεργασίας word – excel. Από τα πολλά προβλήματα( όπως το θέμα της ημερομηνίας που είχα θίξει σε άλλο σχόλιο) ένα είναι πολύ περίεργο και το βρίσκω μπροστά μου κατά απίθανα διαστήματα και δεν μπορώ να το αντιμετωπίσω, ούτε με μορφοποιήσεις ούτε με χρήση διακοπτών πεδίων. Έχω στο φύλλο δεδομένων αριθμούς της μορφής 0000,00 (με μορφοποίηση αριθμών με δύο δεκαδικά). Αυτοί οι αριθμοί, όχι όλοι, όχι συνεχόμενα, εμφανίζονται στο έγγραφο συγχώνευσης ως 0000,00000002, δηλαδή με μια μικρή απόκλιση. ‘Ολοι οι έλεγχοι που έκανα δεν αποδίδουν τίποτα. Το πρόβλημα αυτό εντοπίζεται κυρίως σε έκδοση excel 2003 και όχι σε 2000. Επίσης έχω δει ότι συμβαίνει όταν κάνω σύνδεση μέσω OLE DB.

  92. Ο/Η Παναγιώτης λέει:

    Εντάξει, κατάλαβα το σκεπτικό, η μάκροεντολή δούλεψε, έχεις δίκιο σε ότι… υποπτεύεσαι!
    Και πάλι ευχαριστώ.

  93. Ο/Η Φάνη λέει:

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

  94. Ο/Η vioannis λέει:

    Φίλε Γιώργο.
    Ζητώ συγνώμη για την καθυστερημένη απάντηση στην ερώτηση σου (Φεβ 28), σήμερα είχα το χρόνο να κάνω μερικές δοκιμές σε 2003. Δεν μπόρεσα να βρω κάποια άκρη με αυτό που μου ζητάς. Άλλωστε έχω πολύ λίγη πρακτική πείρα με την συγχώνευση. Λίγες φορές την έχω χρησιμοποιήσει. Μάλλον εσύ είσαι ο ειδικός. Μόνο γενικής φύσεως παρατηρήσεις μπορώ να κάνω μια και, όπως λες, το πρόβλημα εμφανίζεται ευκαιριακά
    Όπως: Μήπως το πεδίο αριθμών στο excel έχει σε κάποια κελιά παλιές ξεχασμένες μορφοποιήσεις ή κάποια είναι συγχωνευμένα με διπλανά κελία. Ακύρωσε κάθε μορφοποίηση στη στήλη και ξαναστήσε αυτή που σε βολεύει και χωρίς συγχωνεύσεις. Μήπως το φύλλο με τα δεδομένα σου έχει δημιουργηθεί για πρώτη φορά σε παλιά έκδοση πχ σε excel 4. Αν ναι, μάλλον πρέπει να ξαναστήσεις το φύλλο. Γενικότητες λέω, αν κάποιος φίλος έχει εμπειρία ας μπει στον κόπο να μας πει.

  95. Ο/Η vioannis λέει:

    Φάνη! Χαιρετώ την Κύπρο!
    Έτσι όπως τοποθετείς την ερώτηση, δηλαδή γενικά οι αριθμοί να είναι σε παρένθεση, τότε επέλεξε τα κελιά που σε ενδιαφέρουν και δεξί κλικ > Μορφοποίηση κελιών > και στην καρτέλα «Αριθμός» επιλέγεις κατηγορία «Προσαρμογή» και εκεί που λέει «Τύπος:» διορθώνεις το: Γενικός τύπος σε: (Γενικός τύπος) και πατάς ΟΚ.
    Αν όμως (σαν λογίστρια που είσαι) ζητάς μια πιο εξειδικευμένη μορφοποίηση των αριθμητικών ή νομισματικών τιμών, επανέρχεσαι με πιο αναλυτική περιγραφή. Δηλαδή πως θέλεις να εμφανίζονται οι θετικοί αριθμοί, πως οι αρνητικοί, πως το μηδέν, με ποια χρώματα, με ποιο νομισματικό σύμβολο κλπ.

  96. Ο/Η Γιώργος λέει:

    Γιάννη έχω δοκιμάσει τα πάντα. Βέβαια μπορώ να λύσω το πρόβλημα με διάφορους τρόπους (text, άλλα κολπάκια, χρήση διακοπτών, εικόνα αριθμός κλπ), όμως αυτό που συμβαίνει είναι εντελώς κουφό. Δεν το έχω συναντήσει μόνο σε ένα Η/Υ, ούτε σε ένα μόνο στήσιμο συστήματος. Το παράδειγμα που έφερα στο προηγούμενο σχόλιό μου (0000,00000002 κλπ) είναι τυχαίο. Υπάρχει πάντα μια μικρή (όχι η ίδια) απόκλιση της τάξης των εκατομμυριοστών. Έχω κάνει διάφορους ελέγχους στο excel (μορφοποιήσεις, σβήσιμο γράψιμο, δεν υπάρχουν αυτές οι διαφορές ούτε εμφανίζονται πουθενά. Εμφανίζονται μόνο στο word.
    Περισσότερο αξίζει ως λύση γρίφου. Παρακαλώ αν κάποιος από τους φίλους του ιστολόγου έχει κάποια ιδέα, ας βοηθήσει.

  97. Ο/Η angel λέει:

    Καλησπέρα, μόλις ανακάλυψα το μπλογκ και συγχαίρω για την προσπάθεια. Θέλω αρκετο χρονο να το ξεψαχνισω αλλα θα το κανω λογω της δουλειας μου. Μπηκα λογω μιας αποριας που έχω, και είναι πως μπορώ σε μια χρονοσειρα στο excel να διαγραψω μαζικα τα σαββατοκύριακα!Εναλλακτικά, εκεί που είναι τα ΣΚ, σε διπλανη στηλη έχω την τιμή 1, οποτε δε ξερω αν βοηθαει αυτό

    Σας ευχαριστω και συγχαρητηρια και παλι

  98. Ο/Η vioannis λέει:

    Καλωσόρισες angel
    Αν θέλεις να διαγράψεις όλη τη γραμμή που περιέχει ημερομηνία σαββατοκύριακου:
    Αν η χρονολογική σειρά είναι στη στήλη Α σε μία διπλανή κενή στήλη (ας πούμε την Β) γράψε τη συνάρτηση

    =IF(OR(TEXT(A1;"ηηηη")="Σάββατο";TEXT(A1;"ηηηη")="Κυριακή");"διαγραφή";)
    

    Η συνάρτηση αυτή θα επιστρέψει τη λέξη «διαγραφή» δίπλα από τα Σαββατοκύριακα και τιμή 0 (μηδέν) δίπλα στις άλλες ημερομηνίες.
    Επίλεξε τώρα όλη τη στήλη Β, πάτα F5 για να εμφανιστεί το πλαίσιο της μετάβασης, πάτα Ειδικά σε.., Τσεκάρισε Τύποι και Κείμενο (Αριθμοί, Λογικές Τιμές και Σφάλματα να μην είναι τσεκαρισμένα) και πάτα ΟΚ.
    Όπως τώρα είναι επιλεγμένα μόνο τα κελιά της στήλης Β που περιέχουν τη λέξη «διαγραφή», στη Κεντρική καρτέλα / Κελιά , άνοιξε το μενού Διαγραφή και πάτα Διαγραφή γραμμών φύλλου. Ανάλογα θα δουλέψεις αν η χρονολογική σειρά είναι σε γραμμή.
    Εναλλακτικά.
    Στον ολόκληρο τον πίνακα που περιέχει τη χρονολογική σειρά κάνε εισαγωγή αυτόματου φίλτρου. Φιλτράρισε τη βοηθητική σου στήλη που περιέχει τον αριθμό 1 για τα σαββατοκύριακα ώστε να είναι ορατός μόνο ο αριθμός 1. Πάτα F5 για να εμφανιστεί το πλαίσιο της μετάβασης, πάτα Ειδικά σε.., Τσεκάρισε Εμφανή κελιά μόνο και ΟΚ.
    Κάνε Διαγραφή γραμμών όπως παραπάνω. Κατάργησε το φίλτρο.
    Αν απλά θέλεις να διαγράψεις το περιεχόμενο των κελιών χωρίς να διαγραφούν ολόκληρες οι γραμμές, τότε μετά το φιλτράρισμα ως προς τον αριθμό 1, επίλεξε τη στήλη με τις χρονολογίες, πάτα F5 για να εμφανιστεί το πλαίσιο της μετάβασης, πάτα Ειδικά σε.., Τσεκάρισε Εμφανή κελιά μόνο και ΟΚ. Στη συνέχεια πάτα το πλήκτρο delete στο πληκτρολόγιο. Τέλος κατάργησε το φίλτρο.

  99. Ο/Η katerina λέει:

    Γεια και από μένα και χρόνια πολλά για τις μέρες! Λοιπόν είμαι άσχετη από excel και στατιστική μεσω αυτου. Έχω να παραδώσω μια εργασία, χρήματα δεν υπάρχουν για βοήθεια οπότε την παιδεύω μόνη. Η εργασία αφορά κάποια δεδομένα τα οποία είναι με χρονολογική σειρά από 1/1/91 και μετά. Στο C2 και κατω είναι τα στοιχεία που με ενδιαφέρουν και τα ερωτήματα που πρέπει να απαντήσω ειναι τα εξής : Q1 , τυπικη αποκλιση, διακύμανση, CV και παλινδρόμηση, Οποιαδήποτε βοήθεια δεκτη.
    Ευχαριστω.

  100. Ο/Η vioannis λέει:

    Κατερίνα, στο μενού “ Δεδομένα” βλέπεις την “Ανάλυση δεδομένων” ; Εκεί υπάρχουν όλα τα εργαλεία ανάλυσης που ζητάς. Αν δεν βλέπεις την “Ανάλυση δεδομένων” πρέπει να εγκαταστήσεις το πρόσθετο πακέτο εργαλείων ανάλυσης . Κλικ στο κουμπί office > Επιλογές του excel > Πρόσθετα > Μετάβαση > τσεκ στο Πακέτο εργαλείων ανάλυσης και τσεκ στο Πακέτο εργαλείων ανάλυσης –VBA και ΟΚ.
    Υπάρχουν επίσης σχετικές συναρτήσεις όπως
    = STDEV που υπολογίζει την τυπική απόκλιση δείγματος
    =STDEVP που υπολογίζει την τυπική απόκλιση πληθυσμού
    =VAR που υπολογίζει τη διακύμανση για δείγμα
    = VARP που υπολογίζει τη διακύμανση για ολόκληρο τον πληθυσμό
    =TREND Επιστρέφει τιμές γραμμικής τάσης
    Για άλλες στατιστικές συναρτήσεις του excel, δες εδώ:
    http://office.microsoft.com/el-gr/excel-help/HP010079190.aspx
    Αν έχεις χρόνο και διάθεση, υπάρχει το πολύ καλογραμμένο βιβλίο του καθηγητή Χρήστου Φράγκου : «ΣΤΑΤΙΣΤΙΚΗ ΕΠΕΞΕΡΓΑΣΙΑ & ΑΝΑΛΥΣΗ ΔΕΔΟΜΕΝΩΝ ΜΕ ΧΡΗΣΗ ΤΟΥ EXCEL» , εκδόσεις Σταμούλη, Αθήνα 2002

  101. Ο/Η katerina λέει:

    Ευχαριστώ πάρα πάρα πολύ!!!!

  102. Ο/Η Παναγιώτης λέει:

    Δουλεύοντας την ίδια εφαρμογή, μου έχει γίνει χόμπι, για την οποία με έχεις βοηθήσει και στο παρελθόν, επανέρχομαι: Από τις επιλογές excel (2007) έχω απενεργοποιήσει την εμφάνιση φύλλων και οι χρήστες (σχολική εφαρμογή) μετακινούνται με hyperlink από φύλλο σε φύλλο εφ’ όσον πληρούν κάποιες προϋποθέσεις. Πως θα μπορούσα να εξασφαλίσω να μη μπορούν να ενεργοποιήσουν την εμφάνιση φύλλων, εισάγοντας ίσως κάποιο κωδικό, για να εμπιστευτώ να το δουλέψουν και από το σπίτι τους;

  103. Ο/Η vioannis λέει:

    Παναγιώτη, εννοείς ότι έχεις απενεργοποιήσει την εμφάνιση των καρτελών φύλου .
    Επειδή οι υπερσύνδεσμοι δεν λειτουργούν με τα κρυφά και τα εντελώς κρυφά φύλλα, ίσως αν καθόριζες τα φύλλα σε εντελώς κρυφά και μια μακροεντολή που θα έτρεχε όταν εκπληρωθούν οι προϋποθέσεις που αναφέρεις και η οποία θα άλλαζε την ιδιότητα visible του φύλλου σε ορατό; Δες το σχετικό σημείωμα του ιστολογίου : “Κρυφά και πολύ κρυφά φύλλα”.

  104. Ο/Η Παναγιώτης λέει:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Range(«b41»).Value = «ok» Then
    Worksheets(«διαγραφή»).Visible = True
    Else
    Worksheets(«διαγραφή»).Visible = False
    End If
    If Range(«b42»).Value = «ok» Then
    Worksheets(«Παράμετροι»).Visible = True
    Else
    Worksheets(«Παράμετροι»).Visible = False
    End If
    End Sub
    Την έχω περάσει στο αρχικό μου φύλλο. Έτσι διατηρώ τα hyperlink εφ, όσον B41 και B42 τηρούν τις προϋποθέσεις (Όνομα και κωδικός να συμβαδίζουν). Όταν κλείνει η εφαρμογή έχω άλλη μακροεντολή που καθαρίζει το Β41 και Β42 και εξαφανίζει τα συγκεκρ. φύλλα. Δουλεύει μεν αλλά όχι πάντα, δηλαδή ενώ εμφανίζεται το «οκ» στο B41 ή στο B42 μερικές φορές δεν ανοίγει τα πολύ κρυφά φύλλα και όταν τα ανοίγει κάνει στιγμιαίο φλάς στο συγκεκριμένο φύλλο και αυτό είναι ενοχλητικό.
    Με το παραπάνω σκεπτικό υπάρχει δυνατότητα βελτίωσης ή ομαλοποίησης ή κάποια άλλη ιδέα;
    (Δεν είναι τόσο σημαντική η απόκρυψη, απλώς αν γίνεται να αποφύγω ακούσιες ενέργειες)

  105. Ο/Η vioannis λέει:

    Παναγιώτη:
    Για το φλασάρισμα σαν πρώτη εντολή στη μάκρο γράψε:
    Application.ScreenUpdating = False
    Και πριν την έξοδο από τη μάκρο επανέφερε:
    Application.ScreenUpdating = True

    Εξασφάλισε ότι ο χρήστης εισάγει σωστά το ok
    Γράψε έτσι το IF
    If Trim(UCase(Range(«b42»).Value)) = «OK» Or Trim(UCase(Range(«b42»).Value)) = «ΟΚ» Then
    (το δεύτερο ΟΚ είναι με ελληνικούς χαρακτήρες)
    και αδιαφορείς αν ο χρήστης έγραψε πεζά ή κεφαλαία, ελληνικά ή αγγλικά ή πληκτρολόγησε κάποιο κενό.
    Δεν μπορώ να προτείνω κάτι καλύτερο, διότι δεν έχω καταλάβει συνολικά τι κάνεις.

  106. Ο/Η Παναγιώτης λέει:

    Η εντολή για το φλασάρισμα πέτυχε. Το «οκ» είναι αποτέλεσμα IF. Δηλαδή αν μπει ο σωστός κωδικός στο ονοματεπώνυμο που επιλέγεται, εμφάνισε «οκ» στο Β41. Εδώ τώρα πειραματίζομαι με Ctrl+Shift+Enter συνάρτηση, γιατί εξακολουθεί να μη δουλεύει σωστά.
    Πρόκειται για μια εφαρμογή όπου οι καθηγητές πριν το τέλος κάθε τριμήνου δηλώνουν τα διαγωνίσματά τους.(για να βγάλουν βαθμούς) Έχουν δικαίωμα να δηλώσουν 3-4 την εβδομάδα για κάθε τμήμα και ένα την ημέρα ανάλογα το νόμο και τον Διευθυντή. Μιλάμε για σχολείο 50 καθηγητών και 15 τμημάτων. Μέχρι τώρα γίνεται χειρόγραφα αλλά δημιουργούνται προβλήματα. Τόλμησα να το υλοποιήσω και νομίζω ότι το έχω φτάσει σε καλό σημείο, για να δουλέψει του χρόνου. Και βέβαια με βοήθησε να το επιχειρήσω όλο αυτό το υλικό που βρήκα εδώ μέσα! Το σκεπτικό μου ήταν να τους παρέχω τις διαθέσιμες ημερομηνίες, τμήματα, ονόματα, μαθήματα, διδ. ώρες, έτοιμα για επιλογή, μόνο το κωδικό τους να συμπληρώνουν για να αποφεύγω λάθη. Επίσης έχει τη δυνατότητα να αποκλείει συγκεκριμένες μέρες και ώρες, ή να προβλέπει τμήματα που χωρίζονται στα δύο. Εμένα μου έχει ανατεθεί ο ρόλος του διαχειριστή. Στο φύλλο «Παράμετροι» συμπληρώνω όλα τα παραπάνω στοιχεία για να μπορούν να τα επιλέξουν από το αρχικό φύλλο. Στο φύλλο «διαγραφή» δίνω στον συγκεκριμένο καθηγητή το δικαίωμα να διαγράψει κάποιο διαγώνισμά του, αν αλλάξει γνώμη. Γι αυτό θέλω να αποκλείσω το ενδεχόμενο ενεργοποιώντας την εμφάνιση καρτελών φύλλου, να μπαίνει ο οποιοσδήποτε…

  107. Ο/Η vioannis λέει:

    Δεν μπορώ να δω το πρόβλημα
    Ίσως να έχεις ορίσει τον υπολογισμό του φύλλου σε μη αυτόματο.
    Πρόσθεσε στην μάκρο (πριν το πρώτο IF):
    Application.Calculate

  108. Ο/Η Παναγιώτης λέει:

    Όλα ΟΚ, και πάλι ευχαριστώ…

  109. Ο/Η γιωργος λέει:

    Καλημέρα σας και συγχαρητήρια για την εξαιρετική βοήθεια που μας παρέχετε τόσο καιρό!
    Στη δουλειά μου προσπαθώ καθημερινά να βρίσκω τα λάθη ανάμεσα σε 2 καρτέλες στο excel (δική μας και κάποιου προμηθευτή πχ ώστε να δω ποιος δεν έχει τι). Υπάρχει κάποιος εύκολος τρόπος να το κάνω αυτό, αντί να παρατάσσω τις τιμές σε 2 στήλες και να ψάχνω γραμμή γραμμή (μετά από ταξινόμηση φυσικά ώστε να είναι και καλά οι ίδιες σε κάθε γραμμή) που είναι τα λάθη? Υπάρχει κάποια συνάρτηση ή κάτι τέτοιο?

    Ευχαριστώ εκ των προτέρων

  110. Ο/Η vioannis λέει:

    Γιώργο
    Α) Εννοείς σύγκριση για να βρεις τυχόν διαφορές σε δύο πανομοιότυπα φύλλα δύο διαφορετικών βιβλίων ή
    Β) Εννοείς σύγκριση δύο στηλών που βρίσκονται σε δύο διαφορετικά βιβλία; Η καταγραφή των τιμών (αριθμοί, ή κείμενο;)στις δύο στήλες γίνεται με την ίδια σειρά ή είναι τυχαία για το κάθε βιβλίο. Δηλαδή αν στο ένα βιβλίο είναι 10,50,20 ,40… , τότε στο άλλο θα πρέπει να είναι επίσης 10,50,20 ,40… ή απλώς κοιτάς αν στο δεύτερο βιβλίο υπάρχουν οι ίδιες τιμές αδιάφορο σε ποια σειρά.
    Για όλα υπάρχει λύση.

  111. Ο/Η γιωργος λέει:

    η καταγραφή είναι τυχαία στο κάθε βιβλίο και αδιάφορο σε ποια σειρά. Πρόκειται για φύλλα διαφορετικών βιβλίων.

  112. Ο/Η vioannis λέει:

    Γιώργο,
    Αφού η καταγραφή είναι τυχαία στο κάθε βιβλίο, θα ακολουθήσουμε τη δικιά σου πρακτική της ταξινόμησης και αντιπαράθεσης των δεδομένων σε δύο αντικριστές στήλες. Μόνο που όλη τη δουλειά θα κάνει μια μακροεντολή. Την παρακάτω μάκρο πιο καλά να αποθηκεύσεις στο προσωπικό σου βιβλίο μακροεντολών (personal).
    Όταν τρέξεις την μάκρο θα εμφανιστεί ένα πτυσσόμενο πλαίσιο όπου θα ορίσεις (επιλέξεις) την περιοχή των τιμών που θέλεις να ελέγξεις από την πρώτη καρτέλα (φύλλο). Μπορείς να επιλέξεις ολόκληρες στήλες ή σειρές ή και ολόκληρο το φύλλο. Με το Ctrl κάτω μπορείς να επιλέξεις και μη συνεχόμενες περιοχές. Μόλις τελειώσεις με το πρώτο φύλλο θα εμφανιστεί ένα δεύτερο πλαίσιο όπου θα ορίσεις (επιλέξεις) την ή τις περιοχές τιμών από το δεύτερο φύλλο. (Για να δεις και να επιλέξεις το δεύτερο φύλλο, πήγαινε στο μενού “Προβολή” και πάτα “Εναλλαγή Παραθύρων”- και στα πιο παλιά excel στο μενού “Παράθυρο”).
    Μόλις ολοκληρώσεις την επιλογή και στο δεύτερο φύλλο και πατήσεις το ΟΚ, θα δημιουργηθεί αυτόματα ένα νέο βιβλίο όπου στις στήλες B και D θα είναι ταξινομημένα τα δεδομένα από τα δύο φύλλα αντίστοιχα. Η μάκρο θα κάνει αυτόματα τις συγκρίσεις των αντίστοιχων τιμών και όπου βρει διαφορές θα χρωματίσει με κίτρινο χρώμα τα κελιά της στήλης B. Στις στήλες Α και Ε καταγράφονται αντίστοιχα οι διευθύνσεις των κελιών των τιμών στα αρχικά φύλλα για να μπορείς εύκολα να εντοπίσεις που είναι οι διαφορές στα αρχικά φύλλα.

    Sub parallel()
    Application.DisplayAlerts = False
    
    Dim V() As Variant, addrV() As Variant
    Dim W() As Variant, addrW() As Variant
    Dim Prompt As String, Title As String
    Dim pedio As Range, stixio As Range
    Dim p As Long
    Dim m As Integer, n As Integer
    
    Prompt = "Επιλέξτε περιοχή:"
    Title = "ο Βιβλίο:"
    
    On Error GoTo telos
    
    Set pedio = Application.InputBox(Prompt:=Prompt, Title:="1" & Title, Type:=8)
    Set pedio = Intersect(pedio, pedio.Worksheet.UsedRange)
    p = Application.CountA(pedio)
    ReDim V(p - 1)
    ReDim addrV(p - 1)
    For Each stixio In pedio
        If stixio <> "" Then
        m = m + 1
        Let V(m - 1) = stixio
        Let addrV(m - 1) = stixio.Address
        End If
    Next stixio
    
    Set pedio = Application.InputBox(Prompt:=Prompt, Title:="2" & Title, Type:=8)
    Set pedio = Intersect(pedio, pedio.Worksheet.UsedRange)
    p = Application.CountA(pedio)
    ReDim W(p - 1)
    ReDim addrW(p - 1)
    For Each stixio In pedio
        If stixio <> "" Then
        n = n + 1
        Let W(n - 1) = stixio
        Let addrW(n - 1) = stixio.Address
        End If
    Next stixio
    
    Workbooks.Add
    Range("b1").Resize(m, 1) = Application.Transpose(V)
    Range("a1").Resize(m, 1) = Application.Transpose(addrV)
    Range("d1").Resize(n, 1) = Application.Transpose(W)
    Range("e1").Resize(n, 1) = Application.Transpose(addrW)
    
    Range("A:B").Sort Key1:=Range("B1"), Header:=xlNo, Orientation:=xlTopToBottom
    Range("D:E").Sort Key1:=Range("D1"), Header:=xlNo, Orientation:=xlTopToBottom
    
    Range("D1").Activate
    Range("b:b,d:d").RowDifferences(ActiveCell).Interior.ColorIndex = 6
    
    telos:
    Application.DisplayAlerts = True
    End Sub
    
  113. Ο/Η γιωργος λέει:

    ευχαριστώ πραγματικά πολύ. Απλά πείτε μου βήμα βήμα αν μπορείτε πως θα δημιουργήσω ή θα βάλω την μακροεντολή γιατί δεν κατάλαβα.

  114. Ο/Η vioannis λέει:

    Γιώργο,
    Δες το θέμα: «Δημιουργία και ενημέρωση του προσωπικού βιβλίου εργασίας» στην βοήθεια για το office, εδώ :
    http://office.microsoft.com/el-gr/excel-help/HA102174076.aspx

    Αντέγραψε τη μακροεντολή του προηγούμενου μηνύματος, στο personal που θα δημιουργήσεις
    και για την «Εκτέλεση μακροεντολής» δες εδώ:
    http://office.microsoft.com/el-gr/excel-help/HP010014113.aspx

  115. Ο/Η Δημήτρης λέει:

    Αγαπητέ Γιάννη συγχαρητήριά κι από μένα για την πολύτιμη βοήθεια που μας προσφέρεις!
    Παρόλο που είμαι κι εγώ της εποχής του Μικρού Ήρωα, οι γνώσεις μου στο Excel και στην VBA είναι περιορισμένες. Αποφάσισα τώρα στα γεράματα να γίνω εκατομμυριούχος, παίζοντας Lotto και Τζόκερ. Ένα σημαντικό πρόβλημα που αντιμετωπίζουμε όσοι παίζουμε μεταβλητά συστήματα,
    είναι η εύκολη και χωρίς λάθη αντικατάσταση των αριθμών του εκάστοτε συστήματος με άλλους δικής μας επιλογής. Σκέφτηκα λοιπόν πως το Excel είναι η καλύτερη λύση στο πρόβλημα, και ότι εσύ με τις γνώσεις σου, ίσως μπορείς να βοηθήσεις. Δυστυχώς η εύρεση και αντικατάσταση του Excel δεν βοηθάει και πολύ, γιατί αν π.χ. αντικαταστήσω τον αριθμό 1 με το 5, θα αντικαταστήσει και το 11 με το 55, η το 17 με το 57. Αν έχεις το χρόνο και την υπομονή να δεις το θέμα αυτό. νομίζω θα βοηθούσες πολύ. Σου στέλνω και ένα παράδειγμα ΛΟΤΤΟ.
    α) Οι αριθμοί όπως παίζονται σε ένα σύστημα 30 αριθμών και 20 στηλών
    1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
    β) Οι αριθμοί όπως παίζονται στο ίδιο σύστημα με αντικατάσταση
    1, 2, 3, 5, 6, 8, 11,13, 14,15,17,18, 20, 21,23, 25,26, 29,30, 31,32, 33,35,38, 39, 40, 41,42,45,49
    γ) Οι αρχικές στήλες (Εξάδες)
    01 03 05 11 20 21
    01 06 12 14 17 22
    01 07 10 13 26 30
    01 09 15 16 23 30
    02 04 07 08 14 16
    02 05 08 15 26 27
    02 09 17 20 25 28
    02 10 11 22 23 29
    03 06 08 13 23 25
    03 10 14 15 24 28
    03 16 17 18 27 29
    04 05 18 22 28 30
    04 06 15 20 26 29
    04 17 19 21 23 24
    05 09 13 14 19 29
    06 07 09 11 18 24
    07 19 22 25 27 30
    08 10 12 18 19 20
    11 12 13 21 27 28
    12 16 21 24 25 26
    δ) Οι εξάδες με τούς αριθμούς της αντικατάστασης.
    1 3 6 17 31 32
    1 8 18 21 26 33
    1 11 15 20 40 49
    1 14 23 25 35 49
    2 5 11 13 21 25
    2 6 13 23 40 41
    2 14 26 31 39 42
    2 15 17 33 35 45
    3 8 13 20 35 39
    3 15 21 23 38 42
    3 25 26 29 41 45
    5 6 29 33 42 49
    5 8 23 31 40 45
    5 26 30 32 35 38
    6 14 20 21 30 45
    8 11 14 17 29 38
    11 30 33 39 41 49
    13 15 18 29 30 31
    17 18 20 32 41 42
    18 25 32 38 39 40

  116. Ο/Η vioannis λέει:

    Δημήτρη, δεν θα έχεις το πρόβλημα που περιγράφεις, αν στην καρτέλα “Εύρεση και Αντικατάσταση” πατήσεις το κουμπί “Επιλογές” και τσεκάρεις “Ταίριασμα ολόκληρων των περιεχομένων κελιού”. Αυτό που περιγράφεις μπορεί να γίνει και με μία μακροεντολή, αλλά δεν θα είναι πιο εύχρηστη από την αντικατάσταση του excel.

  117. Ο/Η vioannis λέει:

    Δημήτρη, άλλαξα γνώμη. Ίσως με μια μακροεντολή να είναι πιο διασκεδαστικό.

    Πως δουλεύει: Ας πούμε ότι στην περιοχή Α1 : F50, θέλεις να αντικαταστήσεις όλα τα 5 με 12
    — επιλέγεις, με το ποντίκι, όλη την περιοχή Α1 : F50
    — κρατάς το Ctrl πατημένο και κάνεις κλικ (επιλέγεις) ένα οπουδήποτε κελί που περιέχει τον αριθμό 5 (μέσα στην περιοχή Α1 : F50)
    — Άσε το Ctrl . Έχεις τώρα μία γκρίζο-γαλάζια (επιλεγμένη / Selection) περιοχή (Α1 : F50) και ένα άσπρο (ενεργό / active) κελί, με τον αριθμό 5.
    — Τρέξε τη μάκρο
    — Η μακρο θα επιλέξει όλα τα κελιά με τον αριθμό 5 μέσα στην περιοχή Α1 : F50
    — – Πληκτρολόγησε τον νέο αριθμό 12 και προσοχή! μην πατάς Enter, αλλά κράτα πατημένο το Ctrl και τότε πάτα Enter. Θα δεις όλα τα κελία με 5 να αλλάζουν σε 12.
    — Κάνε κλικ σε ένα κελί έξω από την περιοχή Α1 : F50
    Καλή επιτυχία

    Η μάκροεντολή είναι:

    Sub ReplaceCells()
    
    Dim keli As Range
    Dim actkeli As Range
    Dim perioxi As Range
    Dim epilegmena As Range
    
    Set perioxi = Intersect(Selection, ActiveSheet.UsedRange)
    Set actkeli = ActiveCell
    
    Set epilegmena = Union(actkeli, actkeli)
    
    For Each keli In perioxi
    If keli.Value = actkeli.Value Then
    Set epilegmena = Union(epilegmena, keli)
    End If
    Next
    epilegmena.Select
    End Sub
    
  118. Ο/Η Δημήτρης λέει:

    Γιάννη καλησπέρα. Σ’ευχαριστώ κατ’ αρχήν για την απάντηση. Επανέρχομαι, μια και το πρόβλημα είναι πιο περίπλοκο. Οι εξάδες που δείχνω στο παράδειγμα, βρίσκονται σε μία στήλη, και οι αριθμοί κάθε εξάδας είναι χωρισμένοι μεταξύ τους με ένα κόμμα (,) ή παύλα (-) ή ένα κενό ( ).
    Για να λειτουργήσει η ρουτίνα που μου στέλνεις, πρέπει ο κάθε αριθμός να είναι σε ξεχωριστό κελί, και για να γίνει αυτό χρειάζεται άλλη μάκροεντολή. Αυτό πού έκανα μέχρι τώρα, ήταν να αντικαταστήσω με αρκετό κόπο και΄χρόνο τους αριθμούς με γράμματα, και κατόπιν μέσω της εύρεσης και αντικατάστασης του Excel, αντικαθιστώ τα γράμματα με τούς αριθμούς που επιθυμώ.
    Σώζω το σύστημα μαζί με την αντικατάσταση με γράμματα, και έτσι είναι πιο εύκολο να αντικαταστήσω τα γράμματα με τους δικούς μου επιλεγμένους αριθμούς κάθε φορά. Όμως τα συστήματα είναι πολλά….
    π.χ.
    Αριθ. συστήματος
    01 03 05 11 20 21 Α Γ Ε Λ Υ Φ 1 3 6 17 31 32
    01 06 12 14 17 22 Α Ζ Μ Ξ Ρ Χ 1 8 18 21 26 33
    01 07 10 13 26 30 Α Η Κ Ν b f 1 11 15 20 40 49
    01 09 15 16 23 30 Α Ι Ο Π Ψ f 1 14 23 25 35 49
    02 04 07 08 14 16 Β Δ Η Θ Ξ Π 2 5 11 13 21 25
    02 05 08 15 26 27 Β Ε Θ Ο b c 2 6 13 23 40 41
    02 09 17 20 25 28 Β Ι Ρ Υ a d 2 14 26 31 39 42
    02 10 11 22 23 29 Β Κ Λ Χ Ψ e 2 15 17 33 35 45
    03 06 08 13 23 25 Γ Ζ Θ Ν Ψ a 3 8 13 20 35 39
    03 10 14 15 24 28 Γ Κ Ξ Ο Ω d 3 15 21 23 38 42
    03 16 17 18 27 29 Γ Π Ρ Σ c e 3 25 26 29 41 45
    04 05 18 22 28 30 Δ Ε Σ Χ d f 5 6 29 33 42 49
    04 06 15 20 26 29 Δ Ζ Ο Υ b e 5 8 23 31 40 45
    04 17 19 21 23 24 Δ Ρ Τ Φ Ψ Ω 5 26 30 32 35 38
    05 09 13 14 19 29 Ε Ι Ν Ξ Τ e 6 14 20 21 30 45
    06 07 09 11 18 24 Ζ Η Ι Λ Σ Ω 8 11 14 17 29 38
    07 19 22 25 27 30 Η Τ Χ a c f 11 30 33 39 41 49
    08 10 12 18 19 20 Θ Κ Μ Σ Τ Υ 13 15 18 29 30 31
    11 12 13 21 27 28 Λ Μ Ν Φ c d 17 18 20 32 41 42
    12 16 21 24 25 26 Μ Π Φ Ω a b 18 25 32 38 39 40

  119. Ο/Η vioannis λέει:

    Δημήτρη, δεν μπορούσα να φανταστώ ότι χειρίζεσαι εξάδες αριθμών, δηλαδή χειρίζεσαι κείμενο και όχι αριθμούς. Αυτό αδικεί τη δουλειά σου και αδικεί και το excel που είναι φύλλο λογισμού αριθμών. Προφανώς όμως, στη μορφή αυτή έχεις βρει την ανάπτυξη των συστημάτων. Αυτό αλλάζει εύκολα και γρήγορα χωρίς μακροεντολές, με τον “οδηγό μετατροπής κειμένου σε στήλες”.
    Παράδειγμα, τις 18-αδες αριθμών και γραμμάτων που μου έστειλες , τις αντέγραψα στη στήλη Α ενός φύλλου, μετά επέλεξα τη στήλη Α και μενού: Δεδομένα — Κείμενο σε στήλες – Εμφανίζεται ο Οδηγός Μετατροπής κειμένου σε στήλες και στο βήμα 1/3 επιλέγω “οριοθετημένο” και στο επόμενο βήμα 2/3 επιλέγω “Διάστημα” και τέλος . Στις 18 στήλες Α έως R έχω τα πάντα άψογα χωρισμένα.
    Ο οδηγός μπορεί να χειριστεί κάθε διαχωριστικό, κενά παύλες, καθέτους, κόμματα.
    Αν για κάποιο λόγο, μετά την επεξεργασία που θα κάνεις στα συστήματα, θέλεις τα τελικά αποτελέσματα πάλι σε εξάδες, στην αρχική τους δηλαδή μορφή, μπορείς να το κάνεις με την συνάρτηση φύλλου CONCATENATE. (Δες ακόμα πιο πάνω στη σελίδα About, ένα σχετικό θέμα που συζητήσαμε με τον Γιώργο την 31η Ιανουαρίου 2013)
    Αν ο οδηγός μετατροπής δεν σε καλύπτει, εδώ είμαστε, θα βρούμε λύση, στα δύσκολα θα έρθει και ο Γιώργος Θαλάσσης.

  120. Ο/Η Δημήτρης λέει:

    Πω πω….ντρέπομαι…ήταν τόσο απλό, και να σκεφτείς πως είχα κάνει την ίδια μορφοποίηση στο παρελθών, αλλά το είχα ξεχάσει. Άρα εγώ αδίκησα εσένα και τις γνώσεις σου, με αυτό το εύκολο πρόβλημα πού σου έβαλα.
    Χα χα καλό! Εγώ θέλω και την Κατερίνα στην παρέα, (ο Σπίθας τρώει πολύ….καταλαβαίνεις).
    ΟΚ. σε ευχαριστώ πολύ.
    Έτσι για την ιστορία… σε ενημερώνω πως πράγματι σε αυτή τη μορφή βρίσκω τα συστήματα. Επίσης να σου πω ότι στο παράδειγμα που σου έστειλα δεν είναι 18αδες, αλλά τρεις διαφορετικές στήλες, που κόλλησαν μαζί κατά την αποστολή του μηνύματος.
    Μια και αναφέρεις αν με καλύπτει ο οδηγός μετατροπής, να πω πως το τέλειο θα ήταν το εξής.
    Ας πούμε ότι έχουμε στα κελιά A1 – AD1, ή ακόμη και σε ένα κελί, π.χ. Α1, όλους τούς 30 αριθμούς με τους οποίους θέλω να αντικαταστήσω το αρχικό σύστημα, και επιλέγοντας πιο κάτω τις στήλες και γραμμές του αρχικού συστήματος, να κάνει μαζική αντικατάσταση όλων των αριθμών, μέσω μιας διαδικασίας FOR – NEXT ίσως.

  121. Ο/Η ΑΝΤΩΝΗΣ λέει:

    Γιάννη καλημέρα.
    Για το ιστολόγιο σου ε΄χω απλά να πω … RESPECT.
    Μια ερώτηση τώρα … Στο Excel από το 2007 και μετά μπορώ να ορίσω σε μια περιοχή κελιών να έχουν προκαορισμένη τιμή Π.χ. στην πόλη να είναι ΚΑΒΑΛΑ;
    Ευχαριστώ, Αντώνης

  122. Ο/Η vioannis λέει:

    Αντώνη ευχαριστώ για τα καλά σου λόγια.

    Δημιούργησε ένα νέο βιβλίο με ότι ρυθμίσεις και περιεχόμενο θέλεις.
    Αποθήκευσέ το σαν πρότυπο του excel (.xltx ή .xltm αν περιέχει μακροεντολές), ας πούμε kavala.xltx. Την αποθήκευση καν τη εκεί που θα σου υποδείξει το ίδιο το excel.
    Κάθε φορά που χρειάζεσαι ένα νέο βιβλίο αυτού του τύπου, από το κουμπί του office θα επιλέγεις “Δημιουργία” και στη συνέχεια επιλέγεις “Τα πρότυπά μου” η θα δεις το kavala.xltx στην περιοχή: “Πρότυπα που χρησιμοποιήθηκαν πρόσφατα”.

    Αν θέλεις το πρότυπο σου να είναι το προεπιλεγμένο και να ανοίγει αυτόματα σε κάθε άνοιγμα του excel, πρέπει να αποθηκεύσεις το πρότυπό σου στον φάκελο XLStart ή όποιον έχεις φάκελο εκκίνησης. (Δεν το συμβουλεύω όμως, αν δεν σου είναι απολύτως απαραίτητο). Λεπτομέρειες γι αυτό θα βρεις στην παράγραφο “Αυτόματο άνοιγμα ενός προτύπου βιβλίου ή φύλλου εργασίας όταν εκκινείτε το Excel” στη βοήθεια της Microsoft στη διεύθυνση:
    http://office.microsoft.com/el-gr/excel-help/HP010197489.aspx

    Σχετικά θέματα είναι και τα παρακάτω:

    Τρόπος αντιμετώπισης προβλημάτων εκκίνησης του Excel 2007:
    http://support.microsoft.com/kb/919196/el

    Τρόπος αποτροπής αυτόματου ανοίγματος αρχείων στο Excel:
    http://support.microsoft.com/kb/826922/el

    Αν δεν έχω καταλάβει το ερώτημά σου, παρακαλώ να επανέλθεις.

  123. Ο/Η Γιώργος λέει:

    γειά σας αργά το βράδυ.
    Προσπαθώ να βρώ ένα τρόπο μορφοποίησης υπό όρους (έχεις αναφερθεί αρκετά στο θέμα) με το εξής περίπου σενάριο: Το συγκεκριμμένι κελί να μορφοποιείται υπό όρους πυ εξαρτώνται από την τιμή ενός άλλου κελιού (μεγαλύτερη ή μικρότερη τιμή, συγκεκριμένο κείμενοα, κενό ή μη κ.λ.π.). Ευχαριστώ και ελπίζω να μη κουράζω μέρες Αυγούστου και διακοπών.

  124. Ο/Η vioannis λέει:

    Γιώργο, ας πούμε ότι το κελί που θέλεις να μορφοποιείται είναι το F1 και η μορφοποίηση εξαρτάται από τιμές του κελιού B5.
    Επιλέγεις το κελί F1 και εισάγεις μορφοποίηση με τύπο

    —->Για Excel 2003 και προηγούμενα
    Μενού: Μορφή > Μορφοποίηση υπό όρους
    Στο πτυσσόμενο πλαίσιο επιλέγεις “ Ο τύπος είναι” και δεξιά γράψε τον τύπο :

    —–>Για Excel 2007 και άνω
    Καρτέλα Κεντρική > Μορφοποίηση υπό όρους > Δημιουργία κανόνα…
    Ανοίγει η καρτέλα: “Δημιουργία κανόνα μορφοποίησης” και επιλέγεις: “Χρήση τύπου για τον καθορισμό των κελίων που θα μορφοποιηθούν” και στο πλαίσιο: “Μορφοποίηση τιμών όπου ο τύπος είναι αληθής” γράψε τον τύπο:

    =Β5>10   (μεγαλύτερο του 10) 
    ή
    =Β5=10    (ίσο με 10)
    ή
    =B5<>10  (διαφορετικό του 10)
    ή
    =Β5="Σήμερα" (κείμενο, το κείμενο μέσα σε εισαγωγικά)
    ή
    =B5=TODAY() (συνάρτηση)
    ή
    =B5<SUM(A1:A9) (συνάρτηση)
    ή
    =B5=DATE(2013;5;1) (ημερομηνία, 1 Μαΐου 2013
    
  125. Ο/Η Γιώργος λέει:

    Ευχαριστώ πάρα πολύ, άμμεση και σαφής η απάντησή σας, πολύτιμη η βοήθειά σας.
    Και μια ακόμη μικρή ερωτησούλα: Αν θέλω να διατηρείται η όποια μορφή κελιού, κατά την μεταφορά της τιμής του μέσω κάποιας συνάρτησης (π.χ) vlookup); Δηλαδή εκτός από την τιμή που αναζητάω και μου επιστρέφει η συνάρτηση, να μου διατηρεί (επιστρέφει) και την μορφοποίηση(όπως μοτίβο, χρώμα γραμματοσειράς κλπ)

  126. Ο/Η vioannis λέει:

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

  127. Ο/Η Γιώργος λέει:

    καλά απαντάς, απλά περίμενα ότι θα είχα εύκολη λύση για excel 2003, επειδή από 2007 και μετά μάλλον το λύνω με την μορφοποίηση που είχες εξηγήσει σε τελευταία ανάρτησή σου (εξάρτηση από άλλο φύλλο εργασίας). Ευχαριστώ πολύ και πάλι. Καληνύχτα.

  128. Ο/Η Angel λέει:

    Καλησπέρα σε όλους,

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

    Σας ευχαριστώ

  129. Ο/Η vioannis λέει:

    Angel,
    Πρότυπο δεν γνωρίζω αν υπάρχει, αλλά αυτά τα προβλήματα είναι εύκολα για το excel. Αν οι περιπτώσεις είναι λίγες και μόνο ποσοτικές μπορεί να γραφτεί μια συνάρτηση φύλλου και αν οι περιπτώσεις είναι αρκετά πολύπλοκες ποσοτικές και ποιοτικές (δηλαδή εξαρτώνται όχι μόνο από την τιμή αλλά και από το είδος του προϊόντος ή της υπηρεσίας) , μπορεί να γραφτεί μια vba συνάρτηση που να λύνει το πρόβλημα. Μπες στον κόπο να περιγράψεις αναλυτικά κάθε περίπτωση του προβλήματός σου, και θα το παλέψουμε…

  130. Ο/Η nektarios λέει:

    Γεια σας .Θα ήθελα να σε ρωτήσω έχω μια στήλη με αριθμούς που κάποιοι επαναλαμβάνονται. Θα ήθελα να μου πεις μπορώ να φτιάξω δίπλα μια άλλη στήλη και σε αυτούς που επαναλαμβάνονται να βάζει το 2 και στους υπόλοιπους το 1.
    Ευχαριστώ πολύ

  131. Ο/Η vioannis λέει:

    Νεκτάριε,
    Αν η στήλη με τους αριθμούς είναι στατική πχ Α1:Α100. και δεν προσθέτεις συνεχώς νέους αριθμούς σε αυτή, τότε στην διπλανή στήλη στο κελί Β1 γράψε την συνάρτηση
    =IF(COUNTIF($A$1:$A$100;A1)=1;1;2)
    και αντίγραψέ την, έως το κελί Β100.
    Αν η στήλη είναι δυναμική και συνεχώς προσθέτεις αριθμούς στη στήλη Α τότε ο τύπος για το κελί Β1 είναι:
    =IF(COUNTIF(OFFSET($A$1;0;0;COUNTA($A1:$A60000);1);A1)=1;1;2)
    Το 60000 είναι αυθαίρετο, απλώς ένας μεγάλος αριθμός που καλύπτει το πόσο κάτω προβλέπεις ότι θα φτάσουν οι αριθμοί στην Α στήλη και φυσικά Α1 το κελί που αρχίζουν οι αριθμοί, το αλλάζεις ανάλογα.
    Δοκίμασε και τους τύπους
    =COUNTIF($A$1:$A$100;A1)
    =COUNTIF(OFFSET($A$1;0;0;COUNTA($A$1:$A$60000);1);A1)
    Που επιστρέφουν ακριβώς το πλήθος των αριθμών

  132. Ο/Η nektarios λέει:

    429 C08 2012 00005 1
    429 C08 2012 00004 1
    429 C01 2012 00002 2
    429 C01 2012 00002 2
    420 C08 2012 00006 1
    429 C08 2012 00009 1
    414 C08 2012 00015 3
    414 C08 2012 00014 1
    414 C08 2012 00015 3
    414 C08 2012 00015 3

    πχ η στήλη μου είναι αυτή. Θέλω να μου πεις την εντολή για να φτιάξω μια νέα στήλη όπου να μου μετρά πόσες φορές υπάρχει η κάθε γραμμή στη στήλη μου.
    Πχ η 429 C08 2012 00005 υπάρχει μόνο 1 φορά.
    η 429 C01 2012 00002 υπάρχει 2 φορές.
    Όπως φαίνεται στη 2η στήλη
    Ευχαριστώ πολύ

  133. Ο/Η vioannis λέει:

    Αν η εγγραφή 429 C08 2012 00005 είναι ολόκληρη σε ένα κελί, δεν αλλάζει τίποτα. Ισχύει η απάντηση που σου έστειλα.
    Μήπως η εγγραφή 429 C08 2012 00005 είναι δε 4 διαδοχικά κελιά μιας γραμμής (πχ Α1, Β1, C1, D1) και θέλεις να ψάξεις για πανομοιότυπες γραμμές;

  134. Ο/Η nektarios λέει:

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

  135. Ο/Η vioannis λέει:

    Ισχύουν τα προηγούμενα

  136. Ο/Η nektarios λέει:

    ΕΥΧΑΡΙΣΤΩ ΓΙΑ ΤΗΝ ΑΜΕΣΗ ΑΠΑΝΤΗΣΗ ΣΟΥ

  137. Ο/Η Δημήτρης λέει:

    Γιάννη καλημέρα!
    Επανέρχομαι, και αν δεν γίνομαι κουραστικός, ζητώ την βοήθειά σου για μία ρουτίνα που έχω γράψει σε VBA, βασιζόμενος στον κώδικα που έγραψες εσύ για τον φίλο Θάνο στις 28 Μαΐου, 2012 με θέμα: Δημιουργία τυχαίων αριθμών για το Τζόκερ. Αναμορφώνοντας λοιπόν τον δικό σου κώδικα έτσι ώστε να εξυπηρετεί τις δικές μου ανάγκες, μου ήρθε η εξής ιδέα. Αντί να δημιουργώ «Χ» τυχαίους αριθμούς από τούς 45 αριθμούς του τζόκερ, γιατί να μην μπορώ να να επιλέξω και να αποκλείσω κάποιους από αυτούς τούς 45 αριθμούς, βασιζόμενος στην διαίσθησή μου ή στην στατιστική των κληρώσεων;.
    Θα ήθελα λοιπόν πολύ απλά να γράφω σε μία συγκεκριμένη περιοχή του φίλου εργασίας, πχ A1:A5 ή A1:A7 (ανάλογα με το πόσους αριθμούς θέλω να διαγραφούν από το NumberCollection κάθε φορά), τούς αριθμούς που θέλω να αποκλειστούν από την γεννήτρια τυχαίων αριθμών, η ρουτίνα να τούς διαβάζει και να τούς αποκλείει.
    Νομίζω πως είναι μία πολύ καλή ιδέα, αλλά δεν μπορώ να την υλοποιήσω λόγο έλλειψης γνώσεων στην VBA. Να τροποποιήσω δηλαδή τον κώδικά στην ρουτίνα Sub test()
    Αν τελικά θελήσεις να ασχοληθείς, μπορώ να σου στείλω το αρχείο xls που έχω δημιουργήσει.
    Ευχαριστώ πολύ

  138. Ο/Η vioannis λέει:

    Φίλε Δημήτρη, παρακάτω θα βρεις την τροποποίηση του κώδικα που ζήτησες. Βάλε τις εξαιρέσεις στα κελιά Α1:Α40. Ας υπάρχουν κενά κελιά στην περιοχή Α1:Α40, έχω προβλέψει αυτό να μην ενοχλεί την μάκρο. Μόνο ίδιοι αριθμοί να μην υπάρχουν, πχ δύο φορές το 12. Τότε δεν θα δουλέψει. Φυσικά μπορείς να κάνεις έως 40 εξαιρέσεις. Οι 5 αριθμοί θα επιστρέψουν στα κελιά C1:G1. Τις περιοχές Α1:Α40 και C1:G1 μπορείς να τις αλλάξεις κατά τις ανάγκες σου. Έκανα πολλά τεστ αμεροληψίας της κλήρωσης και την βρήκα ένταξη.

    Sub Dtest()
    'Κάνει αμερόληπτη κλήρωση 5 αριθμών  από 1 έως 45,
    'εξαιρώντας τους  αριθμούς  που θα βρει στη στήλη Α1:40. '
    'Στην περιοχή εξαιρέσεων Α1:Α40 δεν πρέπει να υπάρχουν ίδιοι αριθμοί.
    'Μπορούν όμως, να υπάρχουν κενά, αλφαριθμητικά ή αριθμοί
    'εκτός του διαστήματος (1,45),διότι θα αγνοηθούν.
    'Οι 5 αριθμοί που θα κληρωθούν επιστρέφουν στα κελιά C1 έως  G1.
    
    Dim i As Integer
    Dim m As Integer
    Dim num As Variant
    Dim item As Variant
    Dim L(1 To 5) As Integer
    Dim NumberCollection As New Collection
    
    Dim exStr As String
    Dim exInt As Integer
    Dim exception As Range
    Dim keli As Range
    Set exception = Range("A1:A40")
     
    For i = 1 To 45
    NumberCollection.Add i, CStr(i)
    Next
     
    exInt = 0
    For Each keli In exception
    If VBA.IsNumeric(keli.Value) And keli.Value > 0 And keli.Value < 46 Then
    exStr = keli.Value
    exInt = exInt + 1
    On Error GoTo telos
    NumberCollection.Remove (exStr)
    End If
    Next keli
     
    For m = 0 To 4
    L(m + 1) = NumberCollection.item(Int((Rnd * (45 - exInt - m))) + 1)
    For num = 1 To NumberCollection.Count
    If NumberCollection.item(num) = L(m + 1) Then NumberCollection.Remove (num): Exit For
    Next
    Next
    
    Cells(1, 3).Resize(, 5) = L
    telos:
    End Sub
    
  139. Ο/Η Δημήτρης λέει:

    Γιάννη καλησπέρα
    Ο κώδικας λειτουργεί τέλεια!!!
    Να είσαι καλά, και σε ευχαριστώ πολύ.
    Γιάννη μία ερώτηση πάνω στον κώδικα, μήπως θα μπορούσες να μου εξηγήσεις τι ρόλο παίζει
    η εντολή CStr(i) στην συγκεκριμένη περίπτωση;

  140. Ο/Η vioannis λέει:

    Δημήτρη, Όταν δημιουργώ την συλλογή των 45 αριθμών, συνοδεύω κάθε αριθμό με το μοναδικό κλειδί του, το οποίο πρέπει να είναι string, έτσι με την VBA συνάρτηση CStr μετατρέπω κάθε αριθμό σε string και εισάγω στη συλλογή ζεύγη της μορφής (αριθμός, CStr(αριθμός)). Η διαγραφή των αριθμών που επιθυμώ να διαγράψω, γίνεται από το κλειδί του ζεύγους. Πρόσεξε ότι και οι αριθμοί, της στήλης Α1: Α40, ορίζονται σαν String (Dim exStr As String ) και σαν έτσι διαγράφονται από τη συλλογή (NumberCollection.Remove (exStr)), γιαυτό πρώτα δουλεύω με την αριθμητική αξία keli.Value και αμέσως μετά την μετατρέπω σε String. Δες και τον κώδικα στο θέμα του ιστολογίου “Μοναδικές Τιμές. Μακροεντολή και Συνάρτηση”.

  141. Ο/Η Δημήτρης λέει:

    Σαφέστατος!
    Ευχαριστώ πολύ για την απάντηση, καλή συνέχεια.

  142. Ο/Η Μαρία λέει:

    Δημήτρη, καλησπέρα. Διαβάζω εδώ μέσα αναλύσεις που σε μένα φαίνονται, υψηλή masterική και βλέπω πως σε όλες τις περιπτώσεις δίνεις λύσεις στους ερωτώντες, να και τα περισσότερα από αυτά, δεν τα καταλαβαίνω. Θα μπω αμέσως στο θέμα μου. Χρησιμοποιώ για τη δουλειά μου μια απλή μορφή του excel με καταγραφή σε στήλες διάφορων δεδομένων προκειμένου να τα εξάγω στη συνέχεια σε pivot table. Οι γνώσεις μου στο excel είναι πολύ λίγες και η εμπειρία πρακτική κυρίως. Το πρόβλημά μου, είναι το εξής: στη στήλη Α, επιλέγω από μια αναπτυσσόμενη λίστα, εκείνο που αφορά τη συγκεκριμένη περίπτωση που καταγράφω για να περαστεί στο κελί. Το ίδιο κάνω και στη στήλη Β όπου έχω άλλες καταγραφές. Εκείνο που θα ήθελα να μάθω είναι το εξής: θέλω στη στήλη C να περνά αυτόματα η φράση «υψηλού κινδύνου εύρημα» όταν έχω επιλέξει στοιχεία από την αναπτυσσόμενη λίστα της στήλης Α ή αντίστοιχα η φράση «μεσαίου κινδύνου εύρημα» όταν έχουν επιλεγεί στοιχεία της στήλης Β. Ζητώ συγνώμη αν η ερώτησή μου είναι απλοϊκή, αλλά όπως προανέφερα, οι γνώσεις μου στο excel είναι πολύ λίγες. Ευχαριστώ εκ των προτέρων για την απάντησή σου.

  143. Ο/Η vioannis λέει:

    Μαρία, τα πραγματικά προβλήματα της καθημερινής δουλειάς σε μαθαίνουν το excel. Οι pivot που χρησιμοποιείς είναι μεγάλη δύναμη και σε βεβαιώ αυτό και μόνο σε κάνει αρκετά προχωρημένη. Συνέχισε δυνατά. Στο πρόβλημά σου, τώρα, θα δώσει λύση ο τύπος:

     =IF(AND(NOT(ISBLANK(A1));ISBLANK(B1));"υψηλού κινδύνου εύρημα";IF(AND(ISBLANK(A1);NOT(ISBLANK(B1)));"μεσαίου κινδύνου εύρημα";"")) 

    Γράψε τον στο κελί C1 και αντίγραψέ τον (σύρε) όσο κάτω χρειάζεται στη στήλη C.
    Πρακτικά ο τύπος λέει: Αν το κελί Α1 έχει κάτι γραμμένο not(isblank(a1)) και ταυτόχρονα το κελί Β1 είναι άδειο isblank(b1) τότε γράψε “υψηλού κινδύνου εύρημα”. Αν είναι ISBLANK(A1) και NOT(ISBLANK(B1) τότε γράψε “μεσαίου κινδύνου εύρημα”, και αν τρέχει κάτι άλλο μην γράφεις τίποτα (το τίποτα είναι το “” στο τέλος.
    Αν αυτό δεν δουλεύει γιατί κάτι δεν κατάλαβα, επανέρχεσαι άφοβα.
    Α! και κάτι ακόμα, με λένε Γιάννη.

  144. Ο/Η Maria λέει:

    Γεια σου και από εμένα!!!!Έχω εντυπωσιαστεί πραγματικά από τις γνώσεις σου. Εγώ έχω κάτι δεδομένα και υπάρχουν αρκετές σειρές με ακριβώς το ίδιο περιεχόμενο.Θέλω λοιπόν να κρατήσω μία σειρά και τις υπόλοιπες ίδιες να τις σβήσω..Έχεις κάποιον εύκολο τρόπο.

  145. Ο/Η vioannis λέει:

    Μαρία Β’
    Αν δουλεύεις σε excel 2007 και άνω, υπάρχει έτοιμο εργαλείο. Επιλέγεις όλα τα δεδομένα σου (όλες τις γραμμές και στήλες) και στην καρτέλα Δεδομένα επιλέγεις Κατάργηση διπλοτύπων. Στη συνέχεια επιλέγεις στήλες ως προς τις οποίες θέλεις να ψάξει το excel για διπλότυπα και πατάς ΟΚ. Αν πχ έχεις δεδομένα σε πολλές σειρές και 3 στήλες και βρει δύο ή περισσότερες γραμμές ΝΙΚΟΣ – ΤΑΔΕ – 45, θα κρατήσει μία και θα διαγράψει τις άλλες. Αν βρει δύο γραμμές ΝΙΚΟΣ – ΤΑΔΕ – 200 και ΝΙΚΟΣ – ΤΑΔΕ – 100 και εσύ έχεις επιλέξει να ψάξει και στις 3 στήλες δεν θα διαγράψει καμία διότι το ΝΙΚΟΣ – ΤΑΔΕ – 200 είναι διαφορετικό από το ΝΙΚΟΣ – ΤΑΔΕ – 100. Αν έχεις επιλέξει τις δύο πρώτες στήλες θα διαγράψει τη μία, διότι στis 2 πρώτες στήλες, το ΝΙΚΟΣ – ΤΑΔΕ είναι ίδιο.

    Αν είσαι σε excel 2003 και προηγούμενο. Aς υποθέσουμε ότι τα δεδομένα σου είναι στις στήλες Α, Β, C, D και θεωρείς διπλοεγγραφές τις σειρές που έχουν ίδια και τα 4 κελιά. Τότε σε μία άδεια στήλη ας πούμε την E στο κελί Ε1, γράψε τη συνάρτηση:

       =A1&CHAR(1)&B1&CHAR(1)&C1&CHAR(1)&D1&CHAR(1) 

    Αν τα δεδομένα σου αρχίζουν πιο κάτω και όχι στη σειρά 1, αρχίζουν ας πούμε στην σειρά 5, τότε στο κελί Ε5 γράψε :

     =A5&CHAR(1)&B5&CHAR(1)&C5&CHAR(1)&D5&CHAR(1) 

    Αντίγραψε τη συνάρτηση κάτω-κάτω έως την τελευταία γραμμή της βάσης σου. Μην τρομάξεις, θα προκύψουν κείμενα μεγάλα σαν τρένα.
    Τώρα, διάλεξε την επόμενη άδεια στήλη, ας πούμε την F και στο κελί F1 γράψε τη συνάρτηση : =COUNTIF($E$1:E1;E1) και την αντιγράφεις και αυτή κάτω-κάτω. Η συνάρτηση αυτή θα επιστρέψει αριθμούς. Όπου επιστρέφει 1, η εγγραφή (σειρά) είναι μοναδική και πρέπει να διατηρηθεί, όπου επιστρέφει 2 και μεγαλύτερο είναι διπλοεγγραφή και πρέπει να διαγραφεί. Αν η βάση είναι μεγάλη και οι διαγραφές δεν γίνονται μία-μια, τότε ταξινόμησε όλη τη βάση μαζί με τις στήλες Ε και F ως προς τη στήλη F (αύξουσα ταξινόμηση) και οι διπλοεγγραφές θα έρθουν κάτω και τις διαγράφεις όλες μαζί. Φρόντισε στην ταξινόμηση να συμπεριλάβεις και μια στήλη με αύξοντες αριθμούς για να μπορείς να ξανα-ταξινομήσεις τη βάση σου στην αρχική μορφή. Τέλος διάγραψε τις στήλες Ε και F
    Δοκίμασε πρώτα σε ένα αντίγραφο του βιβλίου σου, για να είσαι σίγουρη.

  146. Ο/Η Δημήτρης λέει:

    Καλημέρα και συγχαρητήρια για το blog σου. Χρειάζομαι μία βοήθεια. Έχω ένα αρχικό αρχείο excel με κάποια προιόντα και τιμές οι οποιές αλλάζουν τακτικά. Αυτές οι τιμές που αλλάζουν οκ τις περνάω με το χέρι αλλα θέλω να ενημερώνεται και ένα άλλο excel το οποίο το βλέπει κάποιος άλλος χρήστης μέσω των κοινών αρχείων. Πως μπορώ να το κάνω; ευχαριστώ εκ των προτέρων.

  147. Ο/Η Stazybο Hοrn λέει:

    Αυτό θα σ’ αρέσει:
    Excel Turing Machine

  148. Ο/Η vioannis λέει:

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

  149. Ο/Η Eλένη Μαρία λέει:

    Γειά σας και συγχαρητήρια για το ιστολόγιό σας!
    Έχω την εξής απορία: σε ένα φύλλο excel έχω ένα πρόγραμμα εργασίας. Στη 1η στήλη έχω τα ονόματα των υπαλλήλων και στις γραμμές έχω τις ημέρες της εβδομάδας και συμπληρώνω για κάθε μέρα τι εργασία έχει υπ’ευθύνη του ο καθ’ένας π.χ. ε1, ε2, ε3. Θέλω να μου βγαίνει είτε στο ίδιο φύλλο είτε σε άλλο, βάσει αυτών των δεδομένων, στη 1η στήλη οι ημέρες της εβδομάδας και οριζόντια οι εργασίες ε1, ε2, ε3 ώστε να φαίνεται κάτω από το είδος εργασίας το όνομα αυτού που την έκανε την αντίστοιχη μέρα.
    Ευχαριστώ εκ των προτέρων!

  150. Ο/Η vioannis λέει:

    Ελένη Μαρία, ζητώ διευκρινίσεις :
    Υπάρχουν περιπτώσεις όπου την ίδια μέρα 2 ή περισσότερα διαφορετικά άτομα έκαναν την ίδια εργασία; (παράδειγμα, στη στήλη της 1ης Αυγούστου υπάρχει δύο ή περισσότερες φορές η Ε3;). Υπάρχουν περιπτώσεις όπου την ίδια μέρα ένα άτομο απασχολήθηκε σε περισσότερες από μία εργασίες;

  151. Ο/Η Eλένη Μαρία λέει:

    Όχι. Κάθε εργασία γίνεται μία φορά την ημέρα.

  152. Ο/Η vioannis λέει:

    Ελένη Μαρία, το πρόβλημα σου λύθηκε από μία μακροεντολή. Ένα παράδειγμα με βάση την περιγραφή σου και τη μάκρο θα βρεις στο .xls βιβλίο: example26092013. Ο κώδικας είναι εύκολα προσαρμόσιμος στη δικιά σου διάταξη δεδομένων. Θα βρεις σχετικές οδηγίες στο βιβλίο. Γενικά οι αποθήκευση δεδομένων σε πίνακες διασταύρωσης δεν είναι η καλύτερη λύση, διότι ένας τέτοιος πίνακας δύσκολα μετασχηματίζεται. Πιο καλά να κρατάς τα αρχικά δεδομένα σε μορφή βάσης και από εκεί να παράγεις συγκεντρωτικούς ( pivot) πίνακες πανεύκολα, χωρίς να έχεις ανάγκη ούτε συναρτήσεις ούτε μακροεντολές.

  153. Ο/Η Eλένη Μαρία λέει:

    Σ’ευχαριστώ πάρα πολύ!!! Πως δημιουργησες τη μακροεντολή αυτή? Αν είναι πολύπλοκο και έχεις κάποια σχετική πηγή.. Επίσης θα κοιτάξω τους συγκεντρωτικούς πίνακες.

  154. Ο/Η vioannis λέει:

    Ελένη Μαρία: Η μακροεντολή που σου έστειλα δεν είναι από αυτές που γράφει αυτόματα ο καταγραφέας μακροεντολών του excel, διότι περιλαμβάνει επαναληπτικές διαδικασίες (For . . . Next). Η μάκρο αυτή γράφτηκε από μένα με βάση την περιγραφή που έκανες στο πρόβλημά σου. Για να γραφτεί, χρησιμοποιήθηκαν πολύ λίγες βασικές γνώσεις της γλώσσας Visual Basic for Application με την οποία αυτοματοποιούνται πολλές διαδικασίες στο excel. Αν θέλεις να ασχοληθείς με την VBA δες εδώ μερικά βιβλία που προτείνω. Για τους pivots να ενημερωθείς οπωσδήποτε, είναι από τις πολύ βασικές και πολύ αποτελεσματικές δυνατότητες του excel.

  155. Ο/Η Eλένη Μαρία λέει:

    Σ’ευχαριστώ μου γλίτωσες ατελείωτες ώρες ψαξίματος!

  156. Ο/Η Δημήτρης λέει:

    Γιάννη γεια σου και πάλι.
    Θα ήθελα την βοήθειά σου σε μία ακόμη ερώτηση, αν δεν σε βάζω σε μεγάλο κόπο.
    Προσπάθησα μόνος μου αλλά δεν τα κατάφερα.
    Πως θα μπορούσα να διαμορφώσω την τελευταία ρουτίνα που μου έστειλες, έτσι ώστε να δημιουργώ όρους για το Τζόκερ ή το Λόττο; Τι εννοώ….
    Με τον ίδιο τρόπο που γράφουμε στα κελιά τους αριθμούς προς εξαίρεση, να γράφουμε αριθμούς προς μερική αποδοχή. Δηλαδή: Αν στα κελιά B2:B40 είναι οι αριθμοί προς εξαίρεση, στα κελιά C2:C40 γράφουμε άλλους αριθμούς πού δεν είναι εξαιρετέοι, και στην περιοχή C42:C43 γράφουμε τους αριθμούς (Α) 0 και 1 αντίστοιχα ή (Β) 1 και 3 ή (Γ) 2 και 4 κ.λ.π. Ζητάμε κάθε φορά που καλείται η ρουτίνα και παράγετε μία τυχαία πεντάδα ή εξάδα να γίνετε έλεγχος για το πόσοι αριθμοί της περιοχής C2:C40 βρίσκονται σε αυτήν, με βάση τα κριτήρια (Α), ή (Β), ή (Γ), και ανάλογα να περνά τα κριτήρια, ή να απορρίπτεται και να μην εμφανίζεται στην οθόνη.
    Επεξήγηση: Στην περιοχή C42:C43, στην περίπτωση (Α) ζητάμε να έρθουν στην τυχαία πεντάδα ή εξάδα, 0 έως 1 αριθμός της περιοχής C2:C40. Στην περίπτωση (B) ζητάμε να έρθουν στην τυχαία πεντάδα ή εξάδα, 1 έως 3 αριθμοί της περιοχής C2:C40. Στην περίπτωση (Γ) ζητάμε να έρθουν στην τυχαία πεντάδα ή εξάδα, 2 έως 4 αριθμοί της περιοχής C2:C40 κ.λ.π.
    Αν τελικά θελήσεις να το δεις, και τα βρεις σκούρα….φώναξε και τον Γιώργο Θαλάσση (-:.

  157. Ο/Η vioannis λέει:

    Δημήτρη, με αφορμή το προηγούμενο ερώτημά σου, δούλευα αυτές τις ημέρες, δύο vba συναρτήσεις με σκοπό να τις παρουσιάσω στο επόμενο σημείωμα του ιστολογίου. Νομίζω ότι η μία καλύπτει το ερώτημά σου. Είναι έτοιμες , αλλά θέλω λίγες ημέρες ακόμα για να τις δοκιμάσω εξαντλητικά πριν τις παρουσιάσω. Θα τα ξαναπούμε. (Ο Γιώργος Θαλάσσης, απουσιάζει σε νέα αποστολή, ξαναφάνηκε ο Σεϊτάν Αλαμάν βλέπεις…)

  158. Ο/Η Δημήτρης λέει:

    Α ΟΚ…θα περιμένω λοιπόν να δω τι μαγειρεύεις. Όσο για το Γιώργο….ας προσπαθήσουμε μόνοι μας…..έχει σοβαρές αποστολές το παιδί.

  159. Ο/Η Φλώρα Ελευθερίου λέει:

    Κύριε Γιάννη Καλημέρα

    Θα ήθελα να ρωτήσω αν μπορώ από μια επικύρωση δεδομένων με λίστα, η καθε μία επιλογή που έχει αυτή η λίστα να γίνεται υπερσύνδεσμος.

    π.χ Ας πούμε ότι το παρακάτω είναι αναπτυσσόμενη λίστα:

    1 Ιανουάριος (ξεχωριστος υπερσυνδεσμος)
    2 Φεβρουάριος (ξεχωριστος υπερσυνδεσμος)
    3 Μάρτιος (ξεχωριστος υπερσυνδεσμος)

    Γίνεται; Αν ναι , πως;;;

  160. Ο/Η vioannis λέει:

    Φλώρα, για να γίνεται η κάθε επιλογή της επικύρωσης, υπερσύνδεση, θα χρειαστεί κώδικας:
    Βήμα 1ο: Εισήγαγε στο βιβλίο σου ένα νέο φύλλο, ας το πούμε το φύλλο αυτό HELP.
    Βήμα 2ο: Στη στήλη Α του φύλλου HELP γράψε μία- μία τις επιλογές της επικύρωσης. Δηλαδή Α1 Ιανουάριος, Α2 Φεβρουάριος κλπ
    Βήμα 3ο: Στη στήλη Β του φύλλου HELP, δεξιά κάθε μήνα, δημιούργησε την αντίστοιχη υπερσύνδεση. Στην καρτέλα δημιουργίας της υπερσύνδεσης, την επιλογή «Να εμφανίζεται το κείμενο» , άφησε την κενή, ώστε σε κάθε κελί της στήλης Β να φαίνεται ολόκληρη η διεύθυνση της υπερσύνδεσης.
    Βήμα 4ο. Στον επεξεργαστή της VBA και στην λειτουργική μονάδα του φύλλου στο οποίο βρίσκεται η επικύρωση (και όχι σε ένα module) γράψε τον παρακάτω κώδικα.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim keli As Range
    Dim choice  As String
    Set keli = Range("d1")
    choice = keli.Value
    If Target = keli Then
    Select Case choice
    Case "Ιανουάριος"
    Worksheets("HELP").Range("B1").Hyperlinks(1).Follow NewWindow:=True
    Case "Φεβρουάριος"
    Worksheets("HELP").Range("B2").Hyperlinks(1).Follow NewWindow:=True
    Case "Μάρτιος"
    Worksheets("HELP").Range("B3").Hyperlinks(1).Follow NewWindow:=True
    Case "Απρίλιος"
    Worksheets("HELP").Range("B4").Hyperlinks(1).Follow NewWindow:=True
    Case "Μάιος"
    Worksheets("HELP").Range("B5").Hyperlinks(1).Follow NewWindow:=True
    Case "Ιούνιος"
    Worksheets("HELP").Range("B6").Hyperlinks(1).Follow NewWindow:=True
    
    'κλπ κλπ κλπ .......
    
    End Select
    End If
    End Sub
    

    Προσοχή! Για όποιους μήνες παραπέμπουν στο ίδιο το βιβλίο, τότε η επιλογή Case θα γραφτεί διαφορετικά για αυτούς. Αν παράδειγμα ο Ιούνιος παραπέμπει στο κελί Α154 του Φύλλου4 θα γραφτεί ως εξής:

     
    Case "Ιούνιος"
    Application.Goto Reference:=Worksheets("Φύλλο4").Range("A154")
    

    Με τον ίδιο τρόπο θα γραφτούν όλες οι εσωτερικές , προς το βιβλίο υπερσυνδέσεις.
    Στην σειρά 4 του κώδικα το κελί d1, είναι το κελί με την επικύρωση, αυτό θα το αλλάξεις. Αν η επικύρωση είναι στο δικό σου φύλλο στο κελί Β5, άλλαξε την γραμμή αυτή έτσι:

    Set keli = Range("b5")
    

    Αν η επικύρωση επεκτείνεται σε περισσότερα από ένα κελιά, ο κώδικας πρέπει να γραφτεί διαφορετικά. Το λες και τον διορθώνουμε.
    Βήμα 5. Όταν τελειώσεις μπορείς, αν θες, το φύλλο HELP να το κρύψεις.

    Εναλλακτικά σου προτείνω και μία λύση χωρίς κώδικα, όμως υπερσύνδεση δεν θα είναι η ίδια η επιλογή της επικύρωσης, αλλά το κελί δίπλα και δεξιά από το κελί της επικύρωσης.Αν η επικύρωση είναι στο κελί d1, τότε κάθε φορά που επιλέγεις μία εγγραφή από τη λίστα της επικύρωσης, θα κάνεις κλικ στο κελί e1 και θα μεταφέρεσαι. Αυτό γίνεται ως εξής:
    Επανέλαβε τα προηγούμενα βήματα 1 – 2 και 3. Ειδικά στο 3ο βήμα, αν έχεις υπερσυνδέσεις προς το ίδιο το βιβλίο, οι οποίες θα δείχνουν στη στήλη Β κάπως έτσι:
    Φύλλο4!A154
    διόρθωσε, χειριστικά, έτσι:
    #Φύλλο4!A154
    Όλες τις υπερσυνδέσεις προς το ίδιο το βιβλίο, πρέπει να ξεκινούν με το σύμβολο της δίεσης.
    Στο κελί e1, δεξιά της επικύρωσης, που όπως είπαμε τη θεωρώ στο κελί d1, γράψε τη συνάρτηση:

    =HYPERLINK(INDIRECT("HELP!b"&SUMPRODUCT((d1=HELP!$A$1:$A$12)*ROW(HELP!$A$1:$A$12)));"Πάμε")
    

    A1:A12 είναι στο φύλλο HELP η στήλη με τις επιλογές της επικύρωσης. Στο βιβλίο σου μπορεί να είναι μεγαλύτερη ή μικρότερη
    Αυτό είναι όλο. Καλή επιτυχία.

  161. Ο/Η Φλώρα Ελευθερίου λέει:

    Να σας πω την αλήθεια δεν έχω ιδέα από κώδικα.Περίμενα πως θα είναι πιο εύκολο.Συνεπως το βήμα 4ο δεν μπορω να το επεξεργαστω.

    Ευχαριστω

  162. Ο/Η vioannis λέει:

    Γι αυτό, Φλώρα, σου έγραψα και μία εναλλακτική λύση χωρίς κώδικα

  163. Ο/Η Φλώρα Ελευθερίου λέει:

    Κύριε Γιάννη Καλημέρα!

    Προσπαθώ να εισάγω τον κώδικα που μου είπατε,πρώτον γιατί η δεύτερη επιλογή δε με βολεύει και δεύτερον για να διευρύνω λίγο ακόμα τις γνώσεις μου πάνω στο excel.
    Μου είπατε ότι το κελί d1 είναι το κελί της επικύρωσης.
    Στο βίβλιο που δουλέυω το κελί της επικύρωσης είναι σε άλλο φύλλο από αυτό που προσπαθώ να εισάγω τον κώδικα.Πώς αλλάζω τον αριθμό του κελιού;
    Υπόψην ότι το κελί της επικύρωσης είναι στο φύλλο 1 και είναι το Α12.

    Σας ευχαριστώ!

  164. Ο/Η vioannis λέει:

    Αναλυτικά βήματα για να εισάγεις τον κώδικα :
    – -Αν δουλεύεις σε excel 2007 και πάνω, άνοιξε το βιβλίο σου και αποθήκευσέ το σαν βιβλίο με δυνατότητα μακροεντολών. Αν το βιβλίο σου λέγεται FLORA θα αποθηκευτεί με όνομα FLORA.xlsm. Αν δουλεύεις σε excel 2003 και παλιότερο, αγνόησε αυτό το βήμα
    – – Με ανοιχτό το βιβλίο πάτησε τον συνδυασμό πλήκτρων ALT+F11. Θα εμφανιστεί ο επεξεργαστής της Visual Basic.
    – – Στο πάνω αριστερά παράθυρο Project-VBAProject, βρες το βιβλίο σου. Εδώ το βιβλίο θα λέγεται VBAProject(Flora.xlsm) ή VBAProject(Flora.xls).
    – – Κλικ στο τετράγωνο μπροστά στο όνομα ώστε να δείχνει πλην (-) και όχι συν (+).
    – – Αμέσως κάτω από το VBAProject(Flora.xlsm) θα δεις ένα φάκελο : Microsoft Excel Objects. Κλικ, επίσης, στο τετράγωνο μπροστά στο φάκελο ώστε να δείχνει πλην (-) και όχι συν (+).
    – – Αμέσως πιο κάτω θα δεις ένα κατάλογο που αρχίζει με το ThisWorkbook και ακολουθούν όλα τα φύλλα του βιβλίου σου.
    – – Διπλοπάτησε (διπλό αριστερό κλικ) πάνω στο όνομα του φύλλου που βρίσκεται η επικύρωση, δηλαδή στο Φύλλο1. Δεξιά στην μεγάλη λευκή περιοχή γράψε τον κώδικα.
    Αφού η επικύρωση είναι στο κελί a12, άλλαξε την 4η γραμμή του κώδικα έτσι:
    Set keli = Range(«a12»).
    Όταν ολοκληρώσεις πατήστε ALT+Q για να κλείσει ο επεξεργαστής της Visual Basic και να ξαναγυρίσεις στο βιβλίο. Αποθήκευσε το βιβλίο και είσαι έτοιμη.

  165. Ο/Η vioannis λέει:

    Φλώρα, σου έγραψα στο email σου

  166. Ο/Η Damianos λέει:

    Συγχαρητηρια!!! Πολυ χρησιμο, ευχρηστο και χρηστικο το ιστολογιο σας καθως τα σχολια σας με εχουν βοηθησει αρκετες φορες στο παρελθον. Θα ηθελα να θεσω και εγω ενα απλο στην eκφωνηση αλλα δυσκολο (για εμενα) στην απαντηση προβλημα: Πώς μπορω να ταξινομησω φωτογραφιες στο excel. Εχω για παραδειγμα εναν φακελο με 100 αρχεια αριθμημενα 001.jpg, 002.jpg ….100.jpg. Πώς μπορω να τα εισαγω ολα μαζι σε ενα αρχειο excel ετσι ωστε η πρωτη φωτογραφια να τοποθετηθει στο κελι Α1, η δευτερη στο Α2 κοκ. Χειροκινητα γνωριζω οτι γινεται κανοντας αντιγραφη και επικοληση την καθε μια φωτογραφια ξεχωριστα. Το θεμα ειναι αν γινεται αυτοματα μιας και προκειται για πολλες φωτογραφιες.
    Ευχαριστω εκ των προτερων.
    Δαμιανος.

  167. Ο/Η vioannis λέει:

    Δαμιανέ,
    Δεν θα εισάγουμε τις φωτογραφίες στο φύλλο και μετά θα τις ταξινομήσουμε, αλλά θα γράψουμε τα ονόματα των εικόνων ταξινομημένα (με όποια σειρά θέλουμε) και με βάση αυτή τη σειρά θα εισάγουμε τις εικόνες.
    Ας υποθέσουμε ότι οι εικόνες σου είναι στον φάκελο:
    C:\ user\Pictures\fakelos\
    Σε ένα καθαρό φύλλο, στη στήλη Β, κελιά Β1, Β2, Β3 κλπ, γράψε με την σειρά που θέλεις τις εικόνες σου:
    C:\ user\Pictures\fakelos\OO1.jpg
    C:\ user\Pictures\fakelos\OO2.jpg
    C:\ user\Pictures\fakelos\OO3.jpg
    κλπ
    Για πιο εύκολα , στη στήλη C, κελιά C1, C2, C3 κλπ, γράψε 001, 002, 003 κλπ και στο κελί Β1 γράψε:

    =" C:\ user\Pictures\fakelos\"&C1&".jpg"
    

    και αντέγραψε (σύρε) προς τα κάτω.
    Τώρα τρέξε την παρακάτω μακροεντολή και οι εικόνες σου θα μπουν με αντίστοιχη σειρά στα κελιά Α1, Α2, Α3.

    Sub InsertPicturesByNameInColumn()
    Dim keli As Range
    Dim stilifoto As Range
    Dim path As String
    Dim ObPict As Object
    Set stilifoto = Range("a1:a100")
    stilifoto.RowHeight = 130
    stilifoto.ColumnWidth = 50
    For Each keli In stilifoto
    path = keli(1, 2)
    Set ObPict = ActiveSheet.Pictures.Insert(path)
    ObPict.ShapeRange.LockAspectRatio = msoTrue
    ObPict.Height = keli.Height
    ObPict.Top = Rows(keli.Row).Top
    ObPict.Left = Columns(keli.Column).Left
    Next
    End Sub
    

    Οι εικόνες θα ξεκινούν από την πάνω αριστερή γωνία του κελιού θα γεμίζουν όλο το ύψος του κελιού, αλλά θα διατηρούν την αναλογία των διαστάσεών τους.
    Άλλαξε στον κώδικα στη 6η σειρά το Range(«a1:a100»), ανάλογα με πόσες φωτογραφίες έχεις, και στην σειρά 7 το 130 αν θέλεις πιο ψηλές γραμμές.
    Πες μου αν δούλεψε.

  168. Ο/Η ΓΡΗΓΟΡΑΣ ΠΑΝΑΓΙΩΤΗΣ λέει:

    ΚΑΛΗΜΕΡΑ ΣΑΣ
    ΘΑ ΗΘΕΛΑ ΣΕ ΕΝΑ ΦΥΛΛΟ ΤΟΥ EXCEL ΠΑΤΩΝΤΑΣ ΠΙΘΑΝΟΝ ΔΕΞΙ ΚΛΙΚ ΝΑ ΜΟΥ ΕΜΦΑΝΙΖΕΤΑΙ ΕΝΑ STICK ΗΜΕΡΟΛΟΓΙΟ ΩΣΤΕ ΝΑ ΜΠΟΡΩ ΝΑ ΕΠΙΛΕΓΩ ΜΙΑ ΗΜΕΡΟΜΗΝΙΑ ΜΕΤΑΞΥ ΕΤΟΥΣ ΜΗΝΑ ΗΜΕΡΑΣ ΨΑΧΝΩΝΤΑΣ ΣΤΟ ΔΙΑΔΥΚΤΙΟ ΒΡΗΚΑ ΚΑΤΙ EXCELSTART ΠΟΥ ΤΟ ΑΝΤΙΓΡΑΦΕΙΣ ΣE ΚΑΠΟΙΟ ΥΠΟΚΑΤΑΛΟΓΟ MICOSOFT ΔΕΝ ΤΟ ΚΑΤΑΛΑΒΑ ΔΙΟΤΙ ΔΕΝ ΗΤΑΝ ΣΑΦΕΣ

    ΣΑΣ ΕΥΑΧΑΡΙΣΤΩ ΕΚ ΤΩΝ ΠΡΟΤΕΡΩΝ

  169. Ο/Η vioannis λέει:

    Δες καλογραμμένες οδηγίες για τις διάφορες εκδόσεις του excel και για τον λίγο κώδικα που θα χρειαστείς, στις παρακάτω διευθύνσεις:
    http://www.fontstuff.com/excel/exltut03.htm
    http://www.fontstuff.com/excel/exltut02.htm
    http://www.fontstuff.com/vba/vbatut07_2003.htm
    Μπορεί όμως , ανάλογα με την έκδοση που έχεις και την εγκατάσταση που έχεις κάνει του office, να μην έχεις εγκαταστήσει το αντίστοιχο στοιχείο ελέγχου ActiveX. Συνήθως τα ημερολόγια έρχονται με την Access.

  170. Ο/Η ΓΡΗΓΟΡΑΣ ΠΑΝΑΓΙΩΤΗΣ λέει:

    ΣΑΣ ΕΥΑΧΑΡΙΣΤΩ ΓΙΑ ΤΗΝ ΑΜΕΣΟΤΗΤΑ
    ΠΟΛΗΤΙΜΗ Η ΒΟΗΘΕΙΑ ΣΑΣ

  171. Ο/Η Αντιόπη λέει:

    Καλησπέρα σας. Ευχαριστούμε για τις πληροφορίες. Έχω μία γραμμή που έχει αριθμούς σε 1024 στήλες. Το κάθε κελί περιέχει ένα μέτρο ομοιότητας, δηλαδή ένα νούμερο και θέλω να βρω από το σύνολο των 1024 νούμερων τα 30 (για παράδειγμα) μεγαλύτερα. Θέλω να μου επιστρέφει ποια κελιά είναι αυτά. Γίνεται με κάποιον τρόπο. Γιατί ξεκίνησα να βρίσκω το max και να διαγράφω μετά αυτό και να κάνω εκ νέου max συνάρτηση αλλά είναι αρκετά χρονοβόρο. Υπάρχει κάποιος τρόπος;;Ευχαριστώ πολύ εκ των προτέρων.(τρέχω έναν αλγόριθμο με το χέρι για να δω αν μου βγάζει αποτελέσματα και θα χρειαστεί να δώσω διαφορετικά νούμερα όπως το 30 μεγαλύτερα κτλ).Αν μπορείτε να μου απαντούσατε και με email.

  172. Ο/Η vioannis λέει:

    Αντιόπη,
    Υποθέτουμε ότι τα 1024 δεδομένα σου είναι στη γραμμή 1, από το κελί Α1 έως το κελί AMJ1
    Σε μία στήλη, ας πούμε Α4:Α33, γράψε τους αριθμούς 1,2,3,4,…….28,29,30.
    Σε ένα διπλανό κενό κελί, ας πούμε το Β4, γράψε τον τύπο

      =LARGE($A$1:$AMJ$1;A4)  

    Αυτός θα σου επιστρέψει τον μεγαλύτερο αριθμό. Σύρε (αντίγραψε) τον τύπο ως το κελί Β33 και θα σου επιστραφούν οι 30 μεγαλύτεροι αριθμοί της περιοχής Α1: AMJ1
    Επανέρχεσαι, άφοβα, για όποια διευκρίνιση.

  173. Ο/Η Αντιόπη λέει:

    Ευχαριστώ πάρα πάρα πολύ!Να είσαι καλά!Αμεσότητα και πολύτιμη βοήθεια!

  174. Ο/Η Μαρία λέει:

    Καλησπέρα σας,
    έχω ένα πρόβλημα με το excel, έχω 3000 δεδομενα κειμενου περίπου στη στήλη Α και 2200 δεδομενα κειμένου περίπου στη στηλη Β, Θέλω να φτιάξω μία συνάρτηση η οποία να διαβάζει τους 10 πρώτους χαρακτήρες κειμένου ενος κελιού πχ Α2 της στήλης Α και να το συγκρίνει με τα κελιά της στηλης Β, αν ειναι ίδια να αποδίδει το κείμενο Α2 αλλιώς να δίνει την FALSE.Μήπως μπορείτε να βοηθήσετε?

    Σας ευχαριστώ

  175. Ο/Η vioannis λέει:

    Μαρία, δεν κατάλαβα αν ζητάς σύγκριση των 10 πρώτων χαρακτήρων του Α2 με το Β2 ή αναζητάς οπουδήποτε μέσα στη στήλη Β τους 10 πρώτους χαρακτήρες του Α2.
    Για τη πρώτη περίπτωση ο τύπος είναι:

    =IF(LEFT(A2;10)=B2;A2)

    και για τη δεύτερη :

    =IF(SUMPRODUCT(N(LEFT(A2;10)=$B$2:$B$2200))>0;A2)

    Ο δεύτερος τύπος ψάχνει σε όλη τη στήλη Β2:Β2200 για τους 10 πρ. χαρ. και αν τους βρει μία ή περισσότερες φορές, τους επιστρέφει, αλλιώς επιστρέφει FALSE.
    Για ότι δεν κατάλαβα, επανέρχεσαι άφοβα.

  176. Ο/Η Μαρία λέει:

    Σας ευχαριστώ!!!!!
    Δεν ξέρετε απο τι πράγμα ξεκόλλησα….είναι η δεύτερη περίπτωση, σας ευχαριστώ πολύ

  177. Ο/Η Αντιόπη λέει:

    Καλησπέρα!!Έχω μία ερώτηση, δεν ξέρω αν είναι εφικτό βέβαια. Έχω ν εγγραφές σε έναν πίνακα. Ας υποθέσουμε ότι έχω 2 στηλες και ν γραμμές. Στην πρώτη στήλη υπάρχουν οι αριθμοί 1 έως 940 από αρκετές φορές ο καθένας. Τους έχω ταξινομήσει. Δίπλα η άλλη στήλη έχει τιμές. Θέλω να φτιάξω έναν νέο πίνακα ο οποίος θα έχει τις τιμές της δεύτερης στήλης ανάλογα με το αν ανήκουν στο 1, 2, 3, κτλ..Δηλαδή αν για παράδειγμα για τον αριθμό 1 υπήρχαν 12 εγγραφές όπως εδώ
    User ID Movie ID
    1 61
    1 189
    1 33
    1 160
    1 20
    1 202
    1 171
    1 265
    1 155
    1 117
    1 47
    1 222
    θα ήθελα να μου δίνεται μία γραμμή
    61 189 33 160 20 202 171 265 155 117 47 222
    Αυτό μπορώ να το κάνω για μία περίπτωση με αντιμετάθεση αλλά θα πρέπει να βρω για 940 εγγραφές π.χ. που κόβεται το 1 και γίνεται 2 κ.ο.κ. κι αυτό δεν είναι εφικτό με το χέρι. Έχετε κάποια ιδέα. Αν είναι δύσκολο να μη σας παιδέψω. Ευχαριστώ πάρα πολύ!!

  178. Ο/Η vioannis λέει:

    Αντιόπη, δες μια λύση με μακροεντολή.
    Σε ένα καθαρό φύλλο στις στήλες Α και Β μετέφερε με αντιγραφή τα δεδομένα σου με τους τίτλους User ID και Movie ID στα κελιά Α1 και Β1 αντίστοιχα και τα δεδομένα (ταξινομημένα όπως είπες) να ξεκινούν από τα κελιά Α2 και Β2 αντίστοιχα.
    Τρέχεις τότε την παρακάτω μάκρο η οποία θα δημιουργήσει τον πίνακα που ζητάς .
    Αν κάτι πάει στραβά, επανέρχεσαι άφοβα.

    Sub adiopi()
    Dim i As Integer
    Dim pl As Integer
    Dim k As Integer
    Dim Astili As Range
    Set Astili = Range("A1:A10000")
    Range("G1") = 1
    Columns("G:G").DataSeries Rowcol:=xlColumns, Step:=1, Stop:=940
    For i = 1 To 30
    pl = Application.WorksheetFunction.CountIf(Astili, i)
    If pl = 0 Then GoTo linenext
    k = k + 1 + pl
    ActiveSheet.Range("$A$1:$B$1").AutoFilter Field:=1, Criteria1:=i
    Range(Cells(2, 2), Cells(k, 2)).Copy
    Cells(i, 8).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=True
    linenext:
    Next
    Application.CutCopyMode = False
    ActiveSheet.Range("$A$1:$B$1").AutoFilter
    End Sub
    

    = = = Αντιόπη, δες πιο κάτω, μια διόρθωση = = =

  179. Ο/Η Χριστιαννα λέει:

    Καλησπέρα,
    Θα ήθελα μία συνάρτηση για να μου υπολογίζει την διαφορα μεταξύ δύο ωρών > απο 24 ώρες.
    π.χ. 1/11/2013 14:00 στο κελί Α1 και 5/11/2012 10:00 στο κελί Β1
    Πια συνάρτηση πρέπει να χρησιμοποιήσω για να έχω το αποτέλεσμα β1-α1

  180. Ο/Η vioannis λέει:

    Στο παράδειγμα που έστειλες η διαφορά Β1-Α1 είναι αρνητική. Αρνητική διαφορά σε χρόνους δεν υπολογίζεται , μόνο η απόλυτη διαφορά, γι αυτό στο κελί που θέλεις τη διαφορά γράψε το τύπο =ABS(B1-A1). Δεν τελειώσαμε. Θα σου επιστραφεί η διαφορά σε ημέρες και δέκατα ημέρας , ενώ εσύ ζητάς τη διαφορά σε ώρες. Για να γίνει αυτό πρέπει στο κελί να δώσουμε μια πολύ ειδική μορφοποίηση. Λοιπόν, επιλέγεις το κελί που έγραψες το τύπο, δεξί κλικ, μορφοποίηση κελιών, στην καρτέλα «Αριθμός» επιλέγεις » Προσαρμογή» και στο κουτάκι κάτω από τη λέξη «Τύπος:» διαγράφεις ότι γράφει και γράφεις
    [ω]:λλ:δδ
    Πρόσεχε, η ώρα είναι κλεισμένη σε αγκύλη.
    ή αν δουλεύεις σε excel στην Αγγλική γλώσσα
    [h]:mm:ss
    και πατάς ΟΚ
    Για το παράδειγμα σου, θα έχεις επιστροφή 8668:00:00, η διαφορά των 2 ημερομηνιών σε ώρες.

  181. Ο/Η Χριστιαννα λέει:

    Σε ευχαριστώ πάρα πολύ το δοκίμασα και είμαι οκ.
    Θα ήθελα να μπορούσα να είχα την επιστροφή 8668:00:00 διαφορά των 2 ημερομηνιών σε ώρες με μορφή 8668 (απλός αριθμός για να μπορέσω να τον επεξεργαστώ σε πράξεις πολλαπλασιασμού).

  182. Ο/Η vioannis λέει:

    Τροποποίησε τη μορφοποίηση χωρίς λεπτά και δευτερόλεπτα, μόνο ώρα σε αγκύλες , έτσι: [ω]

  183. Ο/Η vioannis λέει:

    Αντιόπη, συγγνώμη, μου ξέφυγε ένα λάθος στον κώδικα
    Η γραμμή :
    For i = 1 To 30
    πρέπει να γραφτεί
    For i = 1 To 940

    Επίσης, πιθανώς η στήλη Α με τα δεδομένα σου να είναι μεγαλύτερη από 10000 γραμμές, οπότε τροποποιείς κατάλληλα τη γραμμή του κώδικα:
    Set Astili = Range(«A1:A10000»)

  184. Ο/Η Αντιόπη λέει:

    Καταρχάς ευχαριστώ πάρα πολύ γιατί είναι όντως αυτό που ψάχνω!Το μόνο θέμα είναι ότι παρά ότι άλλαξα το Set Astili = Range(“A1:A10000″) σε Set Astili = Range(“A1:A150000″) γιατί είναι γύρω στις 110000 οι εγγραφές μου, μου βγάζει μήνυμα «error 6 overflow» και προφανώς καταλαβαίνω ότι δε χωράνε οι εγγραφές..Τι να κάνω;Μήπως πρέπει να αλλαξω κάτι στον κώδικα;Μήπως να το κάνω σε δύο-τρεις φάσεις;Αλλά το δοκίμασα και μου έβγαλε μετά αυτό «run-time error 1004, δεν είναι δυνατή η επικόλληση των πληροφοριών γιατί η περιοχη που επιλέχτηκε για αντιγραφή και η περιοχή επικόλλησης δεν έχουν το ίδιο μέγεθος. Άλλαξα κάτι στον κώδικα όμως μετά έβαλα «For i = 305 To 940
    pl = Application.WorksheetFunction.CountIf(Astili, i)» για να ξεκινήσει από το 305 που σταμάτησε πριν..Ευχαριστώ και πάλι!!!

  185. Ο/Η vioannis λέει:

    Αντιόπη, για την υπερχείλιση φταίει ότι όρισα τις μεταβλητές σαν Integer, ενώ έπρεπε να τις ορίσω long. Όταν έγραψα τη μάκρο δεν σκέφτηκα ότι τα δεδομένα σου είναι τόσο πολλά. Έμεινε το μυαλό μου στο 940. Η παρακάτω εκδοχή πρέπει να τρέξει χωρίς πρόβλημα. Σε μένα έτρεξε. Έφτιαξα ένα παράδειγμα με 140000 εγγραφές και δούλεψε. Καθυστερεί λίγο, σε μένα έκανε περίπου 4 λεπτά, και με την Application.ScreenUpdating = False δεν παίζει η οθόνη, και εμφανίζει όλο μαζί τον πίνακα στο τέλος. Πρόσεξε όμως όταν τρέξεις την μάκρο να μην υπάρχει στις στήλες Α και Β φίλτρο. Αν υπάρχει διάγραψέ το. Το φίλτρο μπορεί να υπάρχει από προηγούμενο μη ολοκληρωμένο τρέξιμο της μάκρο. Όπως κατάλαβες η μάκρο κάνει επανειλημμένα (δηλαδή 940) φιλτραρίσματα και αντίστοιχες αντιγραφές και επικολλήσεις. Πες μου αν δούλεψε.

    Sub adiopi()
    Application.ScreenUpdating = False
    Dim i As Long
    Dim pl As Long
    Dim k As Long
    Dim Astili As Range
    Set Astili = Range("A1:A150000")
    Range("G1") = 1
    Columns("G:G").DataSeries Rowcol:=xlColumns, Step:=1, Stop:=940
    For i = 1 To 940
    pl = Application.WorksheetFunction.CountIf(Astili, i)
    If pl = 0 Then GoTo linenext
    k = k + 1 + pl
    ActiveSheet.Range("$A$1:$B$1").AutoFilter Field:=1, Criteria1:=i
    Range(Cells(2, 2), Cells(k, 2)).Copy
    Cells(i, 8).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=True
    linenext:
    Next
    Application.CutCopyMode = False
    ActiveSheet.Range("$A$1:$B$1").AutoFilter
    Application.ScreenUpdating = True
    End Sub
    
    
  186. Ο/Η Αντιόπη λέει:

    Είναι τέλειο τώρα!Τρέχει μια χαρά!Κάνει ακριβώς αυτό που ήθελα!Τι να πω, ένα ευχαριστώ είναι πολύ λίγο!!Πραγματικά!!

  187. Ο/Η Άγης Χαραλάμπους λέει:

    Κύριε Γιάννη χαίρετε,
    Έχω φτιάξει ένα αρκετά πολύπλοκο spreadsheet με μία πληθώρα combo boxes, buttons (όχι active x) τα οποία με διάφορες φόρμουλες βγάζουν ένα τελικό αποτέλεσμα.
    Το βασικό μου πρόβλημα είναι ότι μετά από κάποια ώρα εντέλως «άσχετα» τα combo boxes & buttons παραμορφώνονται και μικραίνουν και αναγκάζομαι να κλείσω το spreadsheet και να το ξανά ανοίξω για να επανέλθουν στην αρχική τους μορφή.
    Δοκίμασα να απενεργοποιήσω το «hardware graphics acceleration» αλλά πάλι μου δημιουργείται η παραμόρφωση.

    Σας έτυχε ποτέ κάτι τέτοιο;

  188. Ο/Η vioannis λέει:

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

  189. Ο/Η Άγης Χαραλάμπους λέει:

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

  190. Ο/Η manolis λέει:

    γεια σας,τι συναρτηση θα πρεπει να χρησιμοποιησω για να βρω την δευτερη μικροτερη τιμη απο ενα συνολο αριθμων?

  191. Ο/Η vioannis λέει:

    Παράδειγμα, για την περιοχή Α1: Α100, η συνάρτηση:

     = SMALL (A1:A100;2) 

    Η περιοχή μπορεί να είναι γραμμή, στήλη ή ορθογώνια περιοχή. Μπορεί να είναι και συνάθροιση διαφόρων περιοχών, αλλά τότε θα γραφούν μέσα σε παρένθεση, έτσι:

     = SMALL ((A1:A100;D11:G18;S1:S11);2) 

    Στην περιοχή (ή τις περιοχές) μπορούν να υπάρχουν κενά ή αλφαριθμητικά διότι θα αγνοηθούν, όχι όμως σφάλματα ή λογικές τιμές .
    Αν όμως αναζητάς την δεύτερη μικρότερη τιμή αγνοώντας τα διπλότυπα (δηλαδή από τις τιμές: 10, 10, 10, 15, 15, 17, 20, 20 …… θέλεις να σου επιστραφεί 15 και όχι 10 θα χρησιμοποιήσεις τον τύπο :

     = SMALL (IF(FREQUENCY(A1:A100;A1:A100)>0;A1:A100;"");2) 

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

  192. Ο/Η AKIS λέει:

    καλησπερα «Γιατρέ «. Το δικό μου πρόβλημα εχει ως εξής . Σε 2 φυλλα εργασίας , θελω ενα τυπο που να κανει το εξης :
    AN sheet1!A2=sheet2!E2 τοτε φερε μου απο sheet2! το κελι C2
    ΕΥΧΑΡΙΣΤΩ ΘΕΡΜΑ

  193. Ο/Η vioannis λέει:
     =IF(sheet1!A2=sheet2!E2;sheet2!C2;"") 

    …….και τέλος ο πονοκέφαλος…..

  194. Ο/Η Γιώργος λέει:

    Μεγάλο κόλλημα ,έχω δυο στήλες θέλω όταν αναζητώ έναν αριθμό πχ (3) από την a1:a6 να ένωση σε κείμενο την στήλη b1:b6 όταν επαληθεύεται.
    Σας ευχαριστώ!
    2 12 16,18,9
    3 16
    3 18
    5 15
    6 16
    3 9

  195. Ο/Η vioannis λέει:

    Γιώργο, για αυτό που ζητάς θα χρειαστείς μία vba συνάρτηση χρήστη.Η συνάρτηση JoinLookup, τον κώδικα της οποίας σου στέλνω , δέχεται 3 ορίσματα
    pinakas : είναι τα δεδομένα σου , ο πίνακα των 2 στηλών, στο παράδειγμα που έστειλες η περιοχή Α1:Β6
    lookup_value : η τιμή που αναζητάς στην πρώτη στήλη του πίνακα. Την γράφεις απευθείας στη συνάρτηση ή την δίνεις από κελί.
    delimite: το διαχωριστικό μεταξύ των αριθμών που θα επιστραφούν από τη δεύτερη στήλη, πχ κόμμα.
    Στο παράδειγμά σου η συνάρτηση:

       =JoinLookup(A1:B6;3;",")   

    θα επιστρέψει : 16,18,9
    Σχετικά θέματα έχουμε συζητήσει στη σελίδα about του ιστολογίου με την Αντιόπη στις 11,12,13 Νοεμβρίου 2013 και με τον συνονόματό σου Γιώργο στις 31 Ιανουάριου 2013. Δες τα αν θέλεις.
    Ο κώδικάς της συνάρτησης:

    Function JoinLookup(pinakas As Range, lookup_value As Double, _
                delimiter As String) As String
    Application.Volatile True
    Dim pl As Long, j As Long, k As Long
    Dim Varr As Variant
    pl = Application.CountIf(pinakas.Columns(1), lookup_value)
    ReDim Varr(pl - 1)
    k = 0
    For j = 1 To pinakas.Columns(1).Cells.Count
    If pinakas.Columns(1).Cells(j, 1) = lookup_value Then
    Varr(k) = pinakas.Cells(j, 2)
    k = k + 1
    End If
    Next
    JoinLookup = Join(Varr, delimiter)
    End Function
    
  196. Ο/Η Γιώργος λέει:

    Σας ευχαριστώ για την άμεση απάντηση, περίμενα πιο απλή λύση γιατί δεν γνωρίζω καθόλου vba ? . ( Αυτό δεν το περιμένατε )

    Είδα ότι κάτι ταίριαζε με αυτό που ζήτησα ( Σχετικά θέματα έχουμε συζητήσει στη σελίδα about ….) ήταν σε vba και μου φαίνονται κινέζικα ,τώρα το πρόβλημα είναι ότι το A1:B6 είναι στο φύλλο 1 και το 3 στο φύλλο 2, εννοείτε ότι θα προσπαθήσω να το διορθώσω, σας ευχαριστώ που ασχοληθήκατε με το πρόβλημα.
    Γιώργος

  197. Ο/Η vioannis λέει:

    Μα δεν χρειάζεται να ξέρεις vba, αρκεί να αντιγράψεις τον κώδικα της συνάρτησης και να τον επικολλήσεις σε ένα module του βιβλίου σου. Για το πώς γίνεται αυτό, δίνω μία περιγραφή στην απάντηση στην Στεφανία στη σελίδα του ιστολογίου «Χρήση VBA συναρτήσεων σε επικυρώσεις και μορφοποιήσεις υπό όρους».
    Η συνάρτηση δουλεύει άριστα και αν ο πίνακας βρίσκεται σε άλλο φύλλο, παράδειγμα:

      =JoinLookup(Φύλλο1!A1:B10;Φύλλο3!G6;",")  

    Η συνάρτηση είναι γραμμένη στο φύλλο2, ο πίνακας στο φύλλο1 και η τιμή αναζήτησης στο κελί G6 του φύλλου3, και δουλεύει μια χαρά

  198. Ο/Η Γιώργος λέει:

    Τα κατάφερα και είναι πολύ γρήγορο το αποτέλεσμα, με γλιτώσατε απo “χιλιόμετρα” κώδικα που θα έγραφα με εντολές ,και πάλι σας ευχαριστώ .

    Γιώργος

  199. Ο/Η Fanis Spingos λέει:

    Καλη σας ημέρα κύριε Γιάννη . Οντως πολυ ενδιαφέρον η δουλεια σας!
    Παρακαλω αν ειναι εύκολο να μου πείτε πως μπορω απο ενα κελί ,στο excel,το οποίο περιέχει σε μορφή κειμένου την τοποθεσια ενός αλλού κελιου (εχει προέλθει απο τη συνάρτηση CONCATENATE(N2;N3) οπου N2=Q και N3=1 δηλαδή έχουμε Q1 στο κελί N4) να χρησιμοποιήσω αυτη την τοποθεσια σε μια συνάρτηση π.χ. SUM(N4…..)
    Ευχαριστω πολυ!!!!!

  200. Ο/Η vioannis λέει:

    Φάνη, δοκίμασε:
    =SUM(INDIRECT(N4)……)

  201. Ο/Η faroscafe λέει:

    Ευχαριστώ πολύ!

  202. Ο/Η marimarou λέει:

    Καλημέρα και συγχαρητήρια για την βοήθεια που προσφέρεις!! Θα ήθελα να ρωτήσω το εξής: έχω έναν πίνακα στην στήλη Α με ονοματεπώνυμα και στην στήλη Β με αριθμούς. Σε μια ανεξάρτητη στήλη έχω μία λίστα (στη στήλη Ε) μόνο με ονόματα. Πως μπορώ από τη λίστα που έχω στη στήλη Ε να μου εμφανίζει ποια ονόματα υπάρχουν στην στήλη Α και να αθροίζει από τη στήλη Β τους αριθμούς, αν υποθέσουμε ότι ένα όνομα υπάρχει πάνω από 1 φορά; Αν υπάρχει μόνο μια φορά απλά να εμφανίζει τα δεδομένα όπως είναι. Ελπίζω να έγινα κατανοητή.

  203. Ο/Η vioannis λέει:

    Στο κελί F1 γράψε τη συνάρτηση:

      =SUMIF($A$1:$A$100;E1;$B$1:$B$100)  

    και αντίγραψέ την σε όλο το ύψος των ονομάτων της στήλης Ε.
    Θεωρώ ότι τα δεδομένα σου βρίσκονται στις γραμμές 1 έως 100. Προσαρμόζεις κατάλληλα. Αν αυτό δεν σε καλύπτει, θα πει ότι δεν κατάλαβα, και επανέρχεσαι πιο αναλυτικά.

  204. Ο/Η marimarou λέει:

    Σε ευχαριστώ πάρα πολύ για τη βοήθεια. Το μόνο πρόβλημα μου, τώρα, είναι ότι στην στήλη Α έχω περισσότερες πληροφορίες από ένα όνομα και δεν πρέπει να τις χωρίσω σε άλλες στήλες. Μπορεί μέσα από αυτήν να παίρνει σαν πληροφορία μόνο τη λέξη που εγώ ζητάω; π.χ. στην στήλη Α έχουμε Ιωάννης Παπαδόπουλος Ετών 63. Στη στήλη Ε αναζητάμε μόνο τη λέξη Ιωάννης. Αυτό είναι δυνατόν να γίνει;

  205. Ο/Η vioannis λέει:

    Αν τα δεδομένα στη στήλη Ε είναι σε όλες τις περιπτώσεις τα από αριστερά της στήλης Α, δοκίμασε την συνάρτηση

     =SUMPRODUCT(--(E1=LEFT($A$1:$A$100;LEN(E1)))*$B$1:$B$100)
    

    Αν τα δεδομένα στη στήλη Ε είναι κάπου μέσα της στήλης Α, δοκίμασε την συνάρτηση:

     =SUMPRODUCT(N(NOT(ISERROR(FIND(E1;$A$1:$A$100))))*$B$1:$B$100)
    

    Αλλά, καλή μου φίλη, αυτά είναι επικίνδυνα πράγματα, πως εξασφαλίζεσαι από συμπτώσεις στις εγγραφές; Ελπίζω το παράδειγμα που έστειλες να είναι απλοποιημένο, διότι Γιάννηδες υπάρχουν πολλοί. Μήπως πρέπει να φτιάξεις μια βοηθητική στήλη της Α με δεδομένα που να ταιριάζουν στην Ε; Δες για βοήθεια και για ιδέες το σημείωμα του ιστολογίου “Παίζοντας με τις λέξεις”

  206. Ο/Η marimarou λέει:

    Σ ευχαριστώ πάρα πολύ για όλα. Ήταν πολύ σημαντική η βοήθεια σου.

  207. Ο/Η Κασαπάκης Μιχάλης λέει:

    Της γενιάς του Μικρού Ήρωα κι εγώ, καταφεύγω συχνά στο ιστολόγιο σου. Παρακολουθώ, πειραματίζομαι, μαθαίνω και μπορεί όπως λένε, με την εξάσκηση, να γλιτώσω το Αλτσχάιμερ!
    Κι έρχομαι στο πρόβλημα.
    Σε 50 προϊόντα (γραμμένα σε μια στήλη), θα γίνονται 70 δειγματοληψίες, 15 διαφορετικών κάθε φορά. Με την {=RANDBETWEENplus()} σε 70 στήλες (κάθε πίνακας 1 στήλη και 15 γραμμές)
    παίρνω 70 διαφορετικές 15άδες. Το πρόβλημα όμως είναι πως στους 70 διαδοχικούς ελέγχους, θέλω το κάθε προϊόν να ελέγχεται x φορές (το x για κάθε προϊόν, να το ορίζω εγώ).
    Με όσα ξέρω, μάλλον θέλει VBA την οποία δεν γνωρίζω.
    Δεν ξέρω πως να σου στείλω το σχετικό αρχείο, για να καταλάβεις καλύτερα τι έχω κάνει και τι θέλω.
    Ευχαριστώντας σε ούτως ή άλλως για όσα έχω μάθει από δω μέσα
    Εύχομαι Καλές Γιορτές
    και πάντα Υγεία και Χαρά.

  208. Ο/Η vioannis λέει:

    Διαγράφεται μια λέξη: Αλτσχάιμερ Δεν επιτρέπω κακές λέξεις στο ιστολόγιό μου !
    Διατυπώνεις πολύ σαφώς το ερώτημα, κατάλαβα τη ζητάς, αλλά δεν έχω εύκολη απάντηση. Πρέπει να το δουλέψω. Η RANDBETWEENplus έχει σχεδιαστεί να είναι αμερόληπτη και πράγματι είναι. Έχω κάνει δεκάδες τεστ για να βεβαιωθώ. Δεν μπορώ να σκεφτώ πως θα συμβιβαστεί μαζί της η απαίτηση » θέλω το κάθε προϊόν να ελέγχεται x φορές». Μάλλον θα σχεδιαστεί κάτι από την αρχή, σε άλλη βάση, σίγουρα σε vba. Αν χρειαστώ το βιβλίο θα στείλω μήνυμα στο email σου. Καλά Χριστούγεννα Μιχάλη της παρέας του Γιώργου Θαλάσση.

  209. Ο/Η Στεφανία λέει:

    Κύριε Γιάννη, καλησπέρα σας. Οι γνώσεις μου στο excel είναι λίγες. Ψάχνοντας στο διαδίκτυο να βρω λύση σε κάποιο πρόβλημά μου, έπεσα τυχαία στο blog σας και σκέφτομαι ότι σίγουρα εσείς θα μπορέσετε να μου βρείτε λύση.
    Έχω σε μηνιαία βάση ένα φύλλο excel με πολλές χιλιάδες γραμμές. Μεταξύ αυτών, είναι και μια στήλη με κωδικούς καταστημάτων (44 κωδικοί). Έστω ότι είναι η στήλη Α. Στα υπάρχοντα δεδομένα, προσθέτω στο φύλλο μου δυο ακόμη στήλες (Β και C). Έτσι, συμπληρώνω στη στήλη Β (με γράμματα) ποιο κατάστημα αφορά ο κωδικός και στη στήλη C την περιοχή που ανήκει το κατάστημα της στήλης Α. Δεδομένου ότι οι γραμμές είναι πάρα πολλές, μου παίρνει αρκετό χρόνο μέχρι να συμπληρωθεί όλος ο πίνακας. Υποθέτω ότι υπάρχει μια συνάρτηση που θα μπορούσα να ορίσω ανά κελί, αλλά δεν ξέρω πως θα την δημιουργήσω.
    Παραθέτω την κατάσταση με τους κωδικούς και τις στήλες που επιπρόσθετα δημιουργώ.

    ΣΤΗΛΗ Α ΣΤΗΛΗ Β ΣΤΗΛΗ C
    ΚΩΔΙΚΟΣ ΚΑΤΑΣΤΗΜΑ ΚΑΤΑΣΤ. ΕΛΕΓΧΟΥ
    5003 Κηφισιας ΚΕΝΤΡΙΚΟ
    5010 Ιεράπετρα ΗΡΑΚΛΕΙΟ
    5011 Μυτιλήνη ΚΕΝΤΡΙΚΟ
    5012 Τρίκαλα ΛΑΡΙΣΑ
    5013 Ξάνθη ΚΑΒΑΛΑ
    5017 Λειβαδιά ΚΕΝΤΡΙΚΟ
    5031 Αγρίνιο ΑΓΡΙΝΙΟ
    5032 Αίγιο ΠΑΤΡΑ
    5033 Αλεξ/πολη ΚΑΒΑΛΑ
    5035 Άργος ΚΟΡΙΝΘΟΣ
    5038 Βέροια ΘΕΣ/ΝΙΚΗ
    5039 Βόλος ΛΑΡΙΣΑ
    5043 Ζάκυνθος ΠΑΤΡΑ
    5044 Γρεβενά ΚΟΖΑΝΗ
    5135 Δράμα ΚΑΒΑΛΑ
    5138 Έδεσσα ΘΕΣ/ΝΙΚΗ
    5139 Ελευσίνα ΚΕΝΤΡΙΚΟ
    5231 Ηράκλειο ΗΡΑΚΛΕΙΟ
    5234 θεσ/νικη ΘΕΣ/ΝΙΚΗ
    5238 Ιωάννινα ΑΓΡΙΝΙΟ
    5330 Καβάλα ΚΑΒΑΛΑ
    5331 Καλαμάτα ΠΑΤΡΑ
    5333 Καρδίτσα ΛΑΡΙΣΑ
    5335 Καστοριά ΚΟΖΑΝΗ
    5336 Κατερίνη ΘΕΣ/ΝΙΚΗ
    5339 Κέρκυρα ΚΕΡΚΥΡΑ
    5435 Κοζάνη ΚΟΖΑΝΗ
    5437 Κομοτηνή ΚΑΒΑΛΑ
    5439 Κόρινθος ΚΟΡΙΝΘΟΣ
    5534 Λαμία ΛΑΜΙΑ
    5537 Λάρισα ΛΑΡΙΣΑ
    5632 Μεσολόγγι ΑΓΡΙΝΙΟ
    5733 πατρα ΠΑΤΡΑ
    5735 Πειραιάς ΚΕΝΤΡΙΚΟ
    5830 Πύργος ΠΑΤΡΑ
    5832 Ρόδος ΡΟΔΟΣ
    5836 Σέρρες ΘΕΣ/ΝΙΚΗ
    5931 Τρίπολη ΚΟΡΙΝΘΟΣ
    5934 Φλώρινα ΚΟΖΑΝΗ
    5935 Χαλκίδα ΚΕΝΤΡΙΚΟ
    5936 Χανιά ΧΑΝΙΑ
    5937 Ορεστιάδα ΚΑΒΑΛΑ
    9030 Κεντρικό ΚΕΝΤΡΙΚΟ
    Η συνδρομή σας θα με γλυτώσει από άσκοπο χρόνο δουλειάς.
    Εύχομαι καλά Χριστούγεννα και μια νέα χρονιά με υγεία, ευτυχία και δύναμη.
    Στεφανία

  210. Ο/Η vioannis λέει:

    Στεφανία!
    Πήγαινε σε μία περιοχή του φύλλου σου, περιοχή που δεν επικαλύπτεται από τη βάση σου, και γράψε τον πίνακα που μου έστειλες. Ας πούμε ότι η περιοχή είναι: U1:W43. Στην πρώτη στήλη U θα είναι οι κωδικοί, στη δεύτερη V τα καταστήματα και στην τρίτη W τα καταστήματα ελέγχου.
    Τώρα πήγαινε στο κελί Β2 (υποθέτω ότι στην πρώτη γραμμή υπάρχου τίτλοι) και γράψε τη συνάρτηση:

     =VLOOKUP(A2;$U$1:$W$43;2;FALSE)
    

    Και στο κελί C2 γράψε:

    =VLOOKUP(A2;$U$1:$W$43;3;FALSE)
    

    Αντίγραψε αυτές τις συναρτήσεις κάτω-κάτω σε όλο το ύψους της βάσης σου. Μόλις τώρα γράψεις ένα κωδικό σε κελί της στήλης Α, τα διπλανά κελιά της Β και της C θα γεμίσουν αυτόματα. Επειδή όμως όσο τα κελιά της Α είναι κενά, στις στήλες Β και C εμφανίζονται ενοχλητικά #Δ/Υ, καλλίτερα στη θέση των δύο παραπάνω τύπων, χρησιμοποίησε αντίστοιχα τους:

    =IF(ISERROR(VLOOKUP(A2;$U$1:$W$43;2;FALSE));"";VLOOKUP(A2;$U$1:$W$43;2;FALSE))
    =IF(ISERROR(VLOOKUP(A2;$U$1:$W$43;3;FALSE));"";VLOOKUP(A2;$U$1:$W$43;3;FALSE))
    

    Ακόμα καλλίτερα, και πιο σωστά, τον πίνακα μπορείς να τον γράψεις σε ένα άλλο φύλλο, ας ονομάσουμε αυτό το φύλλο helpful, και ο πίνακας είναι στην περιοχή Α1:C43 του φύλλου αυτού. Τώρα οι συναρτήσεις σου πρέπει να γραφούν:

    =VLOOKUP(A2;helpful!$A$1:$C$43;2;FALSE)
    
    =VLOOKUP(A2;helpful!$A$1:$C$43;3;FALSE)
    
    =IF(ISERROR(VLOOKUP(A2;helpful!$A$1:$C$43;2;FALSE));"";VLOOKUP(A2;helpful!$A$1:$C$43;2;FALSE))
    
    =IF(ISERROR(VLOOKUP(A2;helpful!$A$1:$C$43;3;FALSE));"";VLOOKUP(A2;helpful!$A$1:$C$43;3;FALSE))
    

    Το φύλλο helpful, μπορείς αν θες, να το ορίσεις κρυφό.
    Καλά Χριστούγεννα Στεφανία!
    Αν κάτι πάει στραβά, επανέρχεσαι άφοβα.

  211. Ο/Η Στεφανία λέει:

    Το έκανα και δούλεψε! Αχ, κύριε Γιάννη, δεν ξέρετε από πόσο κόπο με γλιτώνετε! Να είστε καλά. Και πάλι χρόνια πολλά.
    Στεφανία

  212. Ο/Η Varvara λέει:

    κ. Γιάννη,
    Αντιμετωπίζω ένα πρόβλημα στο ΟpenΟffice calc και όχι στο Excel γι΄ αυτό και δεν ξέρω την λύση παρόλο που τα προγράμματα κατά βάθος είναι ίδια, τυχαία λοιπόν ανακάλυψα το μπλοκ και σας συγχαίρω για την πολύτιμη αυτή προσπάθεια που κάνετε .
    Το πρόβλημα μου λοιπόν είναι το εξής: Στην δουλειά μου καταχωρώ συνδυασμό δεδομένων (κείμενο και αριθμούς ) σε διαφορετικά κελιά π.χ. στο Α1 αααααα, Β1 ββββββ, C1 123123 θα ήθελα λοιπόν να κάνω ταξινόμηση όλων αυτών με κριτήριο το φόντο του κελιού. Ίσως να είναι πολύ απλή η απορία μου αλλά για μένα θα ήταν πολύ χρήσιμη η λύση της.
    Σας ευχαριστώ εκ τον προτέρων για την βοήθεια.
    Χρόνια πολλά για την ερχόμενη γιορτή σας !!

  213. Ο/Η vioannis λέει:

    Δεν γνωρίζω καθόλου το open.
    Στο excel 2007 και πάνω η δυνατότητα ταξινόμησης κατά χρώμα κελιού ή χρώμα γραμματοσειράς δίνεται άμεσα από το μενού της ταξινόμησης (Δεδομένα, ταξινόμηση και ανοίγεις το πτυσσόμενο μενού “Ταξινόμηση με βάση” κλπ).
    Για τις παλιότερες εκδόσεις του excel οι παρακάτω vba συναρτήσεις επιστρέφουν, η πρώτη τον κωδικό(αριθμό) του χρώματος του κελιού και η δεύτερη τον κωδικό του μοτίβου (γραμμοσκίαση) του κελιού. Όταν λες φόντο μπορεί να εννοείς το ένα ή το άλλο. Δεν ξέρω αν το open είναι συμβατό με την vba. Αν είναι θα σου λύσουν το πρόβλημα. Τις εισάγεις σε μία άδεια στήλη δίπλα στα δεδομένα σου και ταξινομείς ως προς την στήλη αυτή. Πρόσεξε ότι αν αλλάξεις το χρώμα ή τη σκίαση του κελιού, αφού έχεις εισάγει την (ή τις) συναρτήσεις, η συνάρτηση δεν θα προσαρμοστεί αυτόματα για να επιστρέψει τον νέο κωδικό. Πρέπει να πατήσεις F9 για να γίνει επαναυπολογισμός των συναρτήσεων. Αυτό είναι ένα γενικό πρόβλημα (ή επιλογή) του excel. Οι αλλαγές στις μορφοποιήσεις δεν προκαλούν επαναυπολογισμό των ήδη εισηγμένων συναρτήσεων.

    Function ColorIndexNumber(keli As Range) As Double
    Application.Volatile True
    ColorIndexNumber = keli.Interior.ColorIndex
    End Function
    
    
    Function PatternNumber(keli As Range) As Double
    Application.Volatile True
    PatternNumber = keli.Interior.Pattern
    End Function
    
    
  214. Ο/Η Alexandros λέει:

    Καλησπέρα και συγχαρητήρια για το πολύ χρήσιμο ιστολόγιο σου!
    Επεξεργάζομαι στατιστικά δεδομένα επιχειρήσεων και θελω να αθροίσω σε 2 στήλες στοιχείων τα στοιχεία από 5 αντίστοιχες στήλες (π.χ. έχω για 5 νομούς Θεσσαλονίκη, Πέλλα, Σέρρες κλπ με στοιχεία: αριθμός επιχειρήσεων και κύκλος εργασιών και θέλω να τα αθροίσω σε 2 στήλες με αριθμό επιχειρήσεων και κύκλο εργασιών στο σύνολό τους)
    Τα στοιχεία των επιχειρήσεων είναι κατηγοριοποιημένα ανά κλάδο εργασιών με αύξοντα αριθμό από το 01 έως το 99. Το πρόβλημά μου είναι ότι έτσι όπως μου έδωσαν τα δεδομένα κάποιοι κλάδοι λείπουν και είναι διαφορετικοί σε κάθε νομό (π.χ. από τη θεσσαλονίκη λέιπουν οι 24, 26, 28 και από την Πέλλα οι 24, 28, 29 και 30 κλπ).
    Υπάρχει τρόπος να αθροίσω αυτόματα τα δεδομένα από τις σειρές με ίδιο αύξοντα αριθμό χωρίς να επηρεάσουν αυτές που λέιπουν, για να μην χρειαστεί να τα αθροίσω ένα – ένα. Ίσως αν μπορούσε να συμπληρώσει το excel ότι αριθμό λέιπει με 00?
    Χρησιμοποιώ excel 2007.
    Ελπίζω να έγινα κατανοητός και ευχαριστώ εκ των προτέρων.

  215. Ο/Η vioannis λέει:

    Αλέξανδρε, φυσικά και γίνεται, αλλά δεν λες πως είναι τοποθετημένα τα δεδομένα σου στο φύλλο για να σου δώσω σαφή απάντηση. Δες όμως ένα παράδειγμα στο βιβλίο alexandrosexample που σου στέλνω. Το παράδειγμα είναι δομημένο με ότι κατάλαβα. Τα αθροίσματα επιτυγχάνονται με την SUMPRODUCT. Αν δεν σε κάλυψα, επανέρχεσαι άφοβα,

  216. Ο/Η dimitris λέει:

    καλημερα και καλη χρονια με υγεια…δεν ειμαι γνωστης του εξελ….θα ηθελα να ρωτησω στην δουλεια μου εχουμε το εξελ 2003.χρειαζομαι μερικες φορες εξελ 2007.τι μπρορω να κανω ωστε να μην πειραξω την εκδοση του 2003?..

    ευχαριστω

  217. Ο/Η Alexandros λέει:

    Ήταν ακριβώς έτσι! Σε ευχαριστώ πολύ για την γρήγορη απάντηση. :)

  218. Ο/Η vioannis λέει:

    Δημήτρη, βιβλία excel 2007 και νεώτερα για να ανοίξουν σε 2003, πρέπει προηγουμένως να αποθηκευτούν σε μορφή «βιβλίο εργασίας του excel 97-2003 (*.xls)» Υπάρχει αυτή η δυνατότητα στο 2007, πάτα το κουμπί του office, πάνω αριστερά, και μετά πάτα «Αποθήκευση ως». Μία άλλη λύση είναι, στον υπολογιστή που έχεις το 2003, να εγκαταστήσεις το πακέτο συμβατότητας που δίνει η Microsoft, δες εδώ την παράγραφο «Κάντε λήψη και εγκατάσταση του πακέτου συμβατότητας».

  219. Ο/Η Κασαπάκης Μιχάλης λέει:

    Καλή Χρονιά σε όλους!
    Να ‘χεις την υγειά σου Γιάννη και την ίδια όρεξη πάντα να μας βοηθάς.
    Ήθελα να σε ρωτήσω το εξής: στο πρόβλημα του Alexandros χρησιμοποίησες την SUMPRODUCT. Υπάρχει κάποιος λόγος ή απλώς την προτιμάς έναντι της SUMIF;
    Ρωτάω γιατί διαπίστωσα πως αν κάποιο κελί με τα κριτήρια (κλάδος) είναι μορφοποιημένο ως κείμενο, η SUMPRODUCT δεν δουλεύει ενώ η SUMIF δουλεύει. Το αντίστροφο βέβαια συμβαίνει αν είναι μορφοποιημένο ως κείμενο κάποιο από τα υπό άθροιση κελιά. Τότε η SUMPRODUCT δουλεύει ενώ η SUMIF δεν δουλεύει, κάτι που φαίνεται φυσιολογικό αφού δεν γίνεται να αθροίσεις κείμενο με αριθμό (το περίεργο είναι πως το καταφέρνει αυτό η SUMPRODUCT).
    Οπότε μένουμε στο «άγνωστες οι βουλές» του Excell ή υπάρχει κάποια εξήγηση για όλα αυτά;
    ΥΓ. Στη θέση της

    =SUMPRODUCT(($A$3:$A$101=M3)*$B$3:$B$101)+SUMPRODUCT(($E$3:$E$101=M3)*$F$3:$F$101)+SUMPRODUCT(($I$3:$I$101=M3)*$J$3:$J$101)
    

    χρησιμοποίησα την

     
    =SUMIF($A$3:$A$101;M3;$B$3:$B$101)+SUMIF($E$3:$E$101;M3;$F$3:$F$101)+SUMIF($I$3:$I$101;M3;$J$3:$J$101)
    
  220. Ο/Η vioannis λέει:

    Μιχάλη,
    Χρησιμοποίησα την SUMPRODUCT διότι είμαι πολύ εξοικειωμένος μαζί της, αυτή σκέφτομαι πρώτα. Η SUMIF που προτείνεις ίσως είναι πιο λογική λύση για το συγκεκριμένο πρόβλημα και πιο κοντά στο μέσο χρήστη. Πάντως, η SUMPRODUCT δίνει λύσεις σε σύνθετες αθροίσεις υπό όρους όπου η SUMIF και η COUNTIF δεν μπορούν. Το ίδιο θα μπορούσα να κάνω με την SUM

    =SUM(($A$3:$A$101=M3)*$B$3:$B$101)+SUM(($E$3:$E$101=M3)*$F$3:$F$101)+SUM(($I$3:$I$101=M3)*$J$3:$J$101)
    

    αλλά θα έπρεπε να την εισάγω σαν πίνακα με Ctrl+Shift+Enter. Η SUMPRODUCT που από τη κατασκευή της είναι σχεδιασμένη να χειρίζεται πίνακες, μπορεί άμεσα να επιστρέψει τα αποτελέσματά της. Τώρα, για τη μορφή που θα έχουν τα δεδομένα του ορίσματος «κλάδος», χρειάζεται μια στοιχειώδης συνέπεια από τον χρήστη. Αν δεν φροντίσει να έχουν την ίδια μορφή, ακόμα και η απλή SUM θα αποδειχτεί ανίκανη. Αν τα δεδομένα «κλάδος», έχουν την ιδία μορφή παντού στο φύλλο, είτε αριθμητική είτε κειμένου, και η SUMPRODUCT και η SUMIF και η SUM θα δουλέψουν.

  221. Ο/Η Ευθύμιος Βαγγέλης λέει:

    Γεια σας κύριε Βαρλάμη.
    Λέγομαι Ευθύμιος Βαγγέλης(επ) και κάποιες φορές βοηθάω τη γυναίκα μου σε λογιστικά θέματα της δουλειάς της.
    Η γυναίκα μου χειρίζεται ένα αρχείο που έχει 6 φύλλα. Όλα έχουν στήλες με ονοματεπώνυμο, όνομα πατρός ή συζύγου, και μετά στήλες οφειλών, δόσεων, υπολογισμών μερικών και γενικών συνόλων ανά αντικείμενο φύλου, πχ πάγια τέλη, αρδευτικά τέλη, πρόστιμα κλπ.Στο κάθε φύλλο τα ονόματα είναι αλφαβητικά αλλά δεν είναι κατ’ ανάγκην τα ίδια, κάποιος που υποχρεούται να πληρώσει πάγια τέλη αν δεν ποτίσει δεν οφείλει αρδευτικά κλπ. Θέλω να φτιάξω ένα έβδομο φύλλο που να μπορώ να βρίσκω ότι έχει να κάνει με το ίδιο άτομο από τα 6 φύλλα και να βγάζω γενικά αθροίσματα. Είναι εφικτό αυτό; Προσπαθώ να γλιτώσω τη γυναίκα μου από πάρα πολλή δουλειά γιατί τα ονόματα είναι περίπου 700. Συγνώμη που σε ζάλισα κι ελπίζω να κατάλαβες τι ακριβώς θέλω.

  222. Ο/Η vioannis λέει:

    Ευθύμιε!
    Δες αν σε εξυπηρετεί το εργαλείο «Συνολική Εικόνα». Θα το βρεις στο μενού δεδομένα. Είναι απλό και μπορείς να συνενώσεις πίνακες με διαφορική δομή. Αν κάποιοι πίνακες έχουν τα ίδια πεδία (στήλες) και στην Συνολική Εικόνα, σου εμφανίζονται αθροίσματα, και εσύ δεν θέλεις αθροίσματα, άλλαξε τους τίτλους στα πεδία (στήλες) ώστε να είναι διαφορετικοί και να δημιουργήσουν χωριστά πεδία στην ΣΕ. Μετά απομονώνεις τις πληροφορίες για κάθε όνομα με φίλτρο.
    Μία άλλη, παρόμοια τεχνική είναι να δημιουργήσεις μια ενιαία βάση με ένα πολυσυλλεκτικό pivot. Από τον pivot με διπλό κλικ σε ένα όνομα, το excel ανοίγει αυτόματα ένα νέο φύλλο με όλες τις πληροφορίες από όλους τους πίνακες για το όνομα αυτό. Πιο δύσκολη τεχνική, αλλά θα βρεις περιγραφή στο σημείωμα του ιστολογίου «Συγκέντρωση διάσπαρτων πινάκων σε μία βάση»
    (Εμφάνισα στο ιστολόγιο μόνο το μέρος που αφορά το excel, από την κατά τα άλλα πολύ φιλική επιστολή σου. Να είσαι καλά εσύ και η σύζυγός σου)

  223. Ο/Η Γιώργος λέει:

    Γειά σας.
    Πως θα μπορούσα να έχω αμέσως την αρίθμηση μιας τιμής που συμπληρώνω σε ένα πίνακα; Δηλαδή κάθε φορά που συμπληρώνω μια τιμή, στην διπλανή στήλη να μου δείχνει αν αυτή είναι η 1,2,3 κλπ φορά που εμφανίζεται η συγκεκριμένη τιμή.
    Ευχαριστώ

  224. Ο/Η vioannis λέει:

    Αν τα δεδομένα σου αρχίζουν από το κελί Α1, τότε στο κελί Β1 γράψε τον τύπο:

      =IF(ISBLANK(A1);"";COUNTIF($A$1:A1;A1))   

    και αντίγραψέ τον όσο κάτω χρειάζεται, στη στήλη Β

  225. Ο/Η Γιώργος λέει:

    Ευχαριστώ πολύ για την άμεση απάντηση (και λύση). Να είσαι πάντα καλά.

  226. Ο/Η nektarios λέει:

    28/1/2014
    για 1 μηνα για 2 μηνες για 3 μηνες 1-3 μηνες 4-6 μηνες 7-9 μηνες
    Από 2014001 2013012 2013011 2013011 2013008 2013005
    Έως 2014001 2014001 2014001 2014001 2013010 2013007

    Θα ήθελα αν μπορείς να μου πεις . Με βάση την ημερομηνία που βάζω πάνω πάνω θα ήθελα οι υπόλοιπες ημερομηνίες να βγαίνουν αυτόματα στην μορφή που φαίνονται πχ 2013001 που σημαίνει χρονιά 2013 μήνας πρώτος .Αν αλλάζει η ημερομηνία πάνω θέλω να αλλάζουν και οι υπόλοιπες με βάση αυτή και τις κατηγορίες που έχω βάλει.
    Ευχαριστώ πολύ.

  227. Ο/Η vioannis λέει:

    Νεκτάριε! Παρ όλες τις προσπάθειές μου, δεν κατάλαβα καλά το πρόβλημα.
    Για μία ημερομηνία στο κελί Α1 η παρακάτω συνάρτηση θα επιστρέψει την ημερομηνία στη μορφή «τετραψήφιο έτος τριψήφιος μήνας»

     =TEXT(DATE(YEAR(A1);MONTH(A1);DAY(A1));"εεεε")&"0"&TEXT(DATE(YEAR(A1);MONTH(A1);DAY(A1));"μμ") 

    Αν στο κελί Α1 είναι 28/1/2014
    θα επιστρέφει: 2014001
    αφαιρώντας ή προσθέτοντας έναν ακέραιο στο MONTH μεταφέρεσαι μπρος ή πίσω
    Παράδειγμα ο :

     =TEXT(DATE(YEAR(A1);MONTH(A1)-15;DAY(A1));"εεεε")&"0"&TEXT(DATE(YEAR(A1);MONTH(A1)-15;DAY(A1));"μμ") 

    θα επιστρέφει: 2012010
    Οι επιστροφές είναι κείμενο και όχι αριθμοί
    Αν δεν σε κάλυψα ,σε παρακαλώ διατύπωσε ξανά, πιο αναλυτικά

  228. Ο/Η Στεφανία λέει:

    Κύριε Γιάννη καλησπέρα. Προ ημερών μου δώσατε μια λύση στο πρόβλημά μου η οποία πραγματικά με γλύτωσε από πάρα πολύ κόπο.
    Αυτή τη φορά επανέρχομαι για ένα δεύτερο θέμα που με απασχολεί.
    Στο φύλλο με τίτλο data έχω μια λίστα από 20.000 γραμμές περίπου και στήλες μέχρι το Χ. Οι μισές από τις στήλες είναι ήδη συμπληρωμένες από τη Μηχανογράφηση και οι υπόλοιπες πρέπει να συμπληρωθούν με αποτελέσματα ελέγχου. Κάθε γραμμή αφορά μια περίπτωση. Μεταξύ των στηλών υπάρχουν και οι S, T, U (Παρατήρηση Ι, Παρατήρηση ΙΙ, Παρατήρηση ΙΙΙ) με αναπτυσσόμενες λίστες που έχω φτιάξει, όπου συμπληρώνονται αντίστοιχα οι παρατηρήσεις που αφορούν κάθε μια περίπτωση. Η στήλη S (Παρατήρηση Ι), συμπληρώνεται σε κάθε περίπτωση (δεν έχει κενά κελιά), ενώ δεν είναι απαραίτητο να συμπληρωθούν οι στήλες Τ και U αν δεν υπάρχουν άλλες παρατηρήσεις.
    Το θέμα μου είναι το εξής: Από όλο αυτό τον πίνακα, θέλω να βγάλω pivotable και να δω ανά Συνεργάτη και συμβόλαιο τις παρατηρήσεις που τον αφορούν. Μου βγάζει όμως 3 στήλες στο pivot, γεγονός που δεν με εξυπηρετεί επειδή πρώτον βγαίνει ένα πολύ μεγάλο φύλλο σε πλάτος, ενώ θα το ήθελα σε 3 γραμμές και δεύτερο, βγαίνουν στο pivot και τα κενά κελιά των στηλών Τ και U. Μέχρι τώρα, κάνω την εξής “πατέντα” :
    1. Αντιγράφω άλλες 2 φορές όλο το φύλλο κάτω από το αρχικό.
    2. βάζω διαφορετικό χρώμα στα αντιγραμμένα κελιά (κίτρινο και πράσινο).
    3. Παίρνω με αντιγραφή τη στήλη Τ και τη βάζω κάτω από τη στήλη S στο κίτρινο που την αφορά.
    4. Το ίδιο κάνω και για τη στήλη U στο πράσινο.
    5. Διαγράφω τις στήλες Τ και U,
    6. Επιλέγω τις γραμμές που έχουν κίτρινο και πράσινο χρώμα και διαγράφω εκείνες που έχουν κενά στη στήλη S.
    7. Φτιάχνω το Pivot.
    Λάθος δεν είναι, μου βγαίνει σωστά, αλλά, κατά πρώτον, μου δημιουργεί ένα τεράστιο αρχείο στο data και από την άλλη δεν είμαι σίγουρη αν οι συνεργάτες μου στους οποίους θα αναθέσω να κάνουν κάποια στιγμή το ίδιο δεν θα κάνουν κάποιο λάθος.Και φυσικά, είναι λίγο μπακαλίστικο. Φαντάζομαι, λοιπόν, πως ίσως να υπάρχει κάποιος τρόπος περισσότερο “αυτόματος” και χωρίς χρωματάκια και αντιγραφές που να μου δίνει, ανά περίπτωση, τα αποτελέσματα των 3 παρατηρήσεων που περιλαμβάνουν οι στήλες S,T,U σε 3 γραμμές στο pivot.
    Εύχομαι να υπάρχει κάποια λύση στο πρόβλημά μου και σας ευχαριστώ πολύ για ακόμα μια φορά για το χρόνο σας.
    (Μεγάλο το ερώτημα, αλλά προσπάθησα να είμαι όσο το δυνατόν σαφέστερη).

    Στεφανία

  229. Ο/Η Γιάννης λέει:

    Γιάννη καλησπέρα και πολλά μπράβο για ό,τι κάνεις. Το πρόβλημά μου: Έχω ένα πίνακα που αποτελείται από 365 στήλες, (όσες οι ημέρες του έτους) και 600 γραμμές όσοι οι εργαζόμενοι στην εταιρεία. Τα 365 κελιά που αντιστοιχούν σε κάθε εργαζόμενο παίρνουν έναν κωδικό σε μορφή κειμένου, (π.χ. 01,02,03,…..έως και 10), που υποδηλώνουν σε ποια ομάδα ρεπο ανήκει ο καθένας τους. Αυτός ο κωδικός παραμένει ο ίδιος όλο το χρόνο, εκτός από ορισμένες μέρες που λόγω ιδιαίτερων αναγκών καποιος δεν κάνει το προκαθορισμένο του ρεπο αλλά εργάζεται και κάνει ρεπό μια άλλη μέρα. Στα κελία που υπάρχει αυτή η διαφοροποίηση εισάγονται οι τιμές «X» και «R» αντιστοίχως. Αυτό που θέλω είναι μία λίστα που να περιέχει κατ’ αντιστοιχία τις ημερομηνίες που περιέχουν αυτές και μόνο αυτές τις μεταβολές ανα εργαζόμενο, είτε για όλο το έτος, είτε για κάποιο συγκεκριμένο μήνα. Δύσκολο? Περιμένω και ελπίζω….

  230. Ο/Η vioannis λέει:

    Στεφανία, πρέπει να ξέρω σε ποια έκδοση του excel δουλεύεις. Οι pivot έχουν αρκετές διαφορές στις διάφορες εκδόσεις. Ο pivot φτιάχνεται από σένα στην έκδοση που δουλεύεις ή σου έρχεται έτοιμος και εκεί που φτιάχνεται έχουν παλιότερη έκδοση από τη δική σου;

  231. Ο/Η Στεφανία λέει:

    Αχ! Είναι μια πληροφορία που δεν την έχω εύκαιρη αφού δεν με απασχόλησε ποτέ. Τον pivot (μιλάμε για εμπειρική και όχι σε βάθος γνώση) τον φτιάχνω εγώ, αφού ολοκληρωθεί ο έλεγχος στο φύλλο data . Θα επανέλθω μόλις ενημερώθω για την έκδοση του excel που μας έχουν εγκαταστήσει στη δουλειά. Καλό μήνα να έχουμε κι εσείς να είστε καλά που μας διευκολύνετε τη excelοζωή!

  232. Ο/Η vioannis λέει:

    Εντάξει Στεφανία θα περιμένω, θα βρούμε λύση, Καλό μήνα!

  233. Ο/Η vioannis λέει:

    Γιάννη, η παρακάτω μακροεντολή είναι σίγουρη και απλή λύση στο πρόβλημά σου. Την τρέχεις και ανοίγει ένα νέο φύλλο στο βιβλίο σου, με τον πίνακα που ζητάς. Εσύ πρέπει να αλλάξεις στη εντολή: Set pinakas = Worksheets(«mydata»).Range(«a1:nb600») το mydata με το πραγματικό όνομα του φύλλου που είναι ο αρχικός πίνακας και την περιοχή a1:nb600 με την πραγματική περιοχή του αρχικού πίνακα. Υποθέτω ότι στην πρώτη γραμμή είναι οι ημερομηνίες, και στην πρώτη στήλη τα ονόματα. Τις τιμές “X” και “R” τις υπέθεσα κεφαλαία λατινικά. Αν υπάρχουν και πεζοί ή ελληνικοί χαρακτήρες πρέπει να γίνουν μεταβολές στον κώδικα. Πες μου. Στο παράδειγμα που έστησα εγώ, δούλεψε καλά. Για κάθε πρόβλημα επανέρχεσαι.

    
    Sub make_XR_table()
    Dim sheetname As String
    Dim pinakas As Range
    Dim keli As Range
    Dim grammi As Integer
    Dim stili As Long
    Dim hmerominia
    Dim onoma As String
    Dim j As Long
    Set pinakas = Worksheets("mydata").Range("a1:nb600")
    Sheets.Add
    sheetname = ActiveSheet.Name
    For Each keli In pinakas
    If keli.Value = "X" Or keli.Value = "R" Then
    j = j + 1
    grammi = keli.Row
    stili = keli.Column
    hmerominia = pinakas.Item(1, stili)
    onoma = pinakas.Item(grammi, 1)
    Worksheets(sheetname).Cells(j, 1) = onoma
    Worksheets(sheetname).Cells(j, 2) = hmerominia
    Worksheets(sheetname).Cells(j, 3) = keli.Value
    End If
    Next
    End Sub
    
    
  234. Ο/Η Στεφανία λέει:

    Κύριε Γιάννη, καλημέρα σας.
    Τελικά η έκδοση του excel είναι του 2007.
    Ευχαριστώ και πάλι.
    Στεφανία

  235. Ο/Η Γιάννης λέει:

    Γιάννη κατ’ αρχήν σε ευχαριστώ, δεν περίμενα να μου απαντήσεις τόσο άμεσα. Έκανα ό,τι μου είπες και κάτι πάει να γίνει. Διευκρινίζω: Ο πίνακας που παίρνω θέλω να έχει τρεις στήλες: στην πρώτη, το όνομα του εργαζόμενου, στη δεύτερη την ή τις ημερομηνίες που έχει «X» και στην τρίτη την ή τις ημερομηνίες με τα «R». Π.χ. Εργαζόμενος, 15/1/14, 23/1/14
    16/1/14, 28/1/14
    Δεν έχω πρόβλημα το όνομα να επαναλαμβάνεται όσες φορές χρειάζεται. Αν σε κάποια ημερομηνία με «X»,δεν αντιστοιχεί κάποια άλλη με «R», τότε το κελί να μένει κενό.
    Τώρα, έτσι όπως μου είπες, εμφανίζει : Εργαζόμενος, 15/1/14
    23/1/14
    16/1/14
    28/1/14
    Αυτό δεν θα ήταν τόσο μεγάλο πρόβλημα, το θέμα όμως είναι ότι τα δεδομένα που μου εμφανίζει δεν είναι σωστά και δεν μπορώ να καταλάβω γιατί. Π.χ. μου εμφανίζει εργαζόμενους με μεταβολή σε ημερομηνίες όπου δεν έχουν. Αν θέλεις ψάξε το. Σ’ ευχαριστώ και πάλι.
    Γιάννης.

  236. Ο/Η vioannis λέει:

    Γιάννη, όλες τις ημερομηνίες τις εμφανίζει λάθος ή μερικές; Αν πχ η ημερομηνία 4/10/2013 είναι λάθος μήπως η 10/4/2013 είναι σωστή;

  237. Ο/Η Γιάννης λέει:

    Ναι, όλες οι ημερομηνίες είναι λάθος.

  238. Ο/Η Γιάννης λέει:

    Επίσης, αν επιλέξω ένα μόνο μέρος του πίνακα, πχ τον μήνα Ιανουάριο, (αλλάζοντας το Range στη μακροεντολή), τα αποτελέσματα μου φέρνουν εργαζόμενους με ημερομηνία 1/2/14. Γενικά δε μπορώ να πω ότι κάτι συμφωνεί με τα πραγματικά δεδομένα, βγαίνουν όλα λάθος.
    Ευχαριστώ και πάλι.

  239. Ο/Η Γιάννης λέει:

    Ερώτηση: Μήπως την μακρο πρέπει να την γράψω κάπου αλλού? Εγώ την έγραψα στο This Workbook, έκανα καλά?

  240. Ο/Η Γιάννης λέει:

    Γιάννη επανέρχομαι με καλά νέα. Αυτό που εμπόδιζε την μακροεντολή να φέρει τα σωστά αποτελέσματα ήταν ότι ο αρχικός πίνακας είχε πρώτο κελί το B3 και όχι το A1. Μόλις διέγραψα την πρώτη στήλη και τις δυο πρώτες γραμμές και άλλαξα και το Range σε Α1:ΝΒ600, η μακρο έτρεξε με τα σωστά αποτελέσματα. Έχεις μήπως κάποια εξήγηση γι’ αυτό? Η αλήθεια είναι ότι θα ήθελα στο αρχείο μου να κρατήσω τη στήλη και τις γραμμές που διέγραψα. Τι προτείνεις? Κοίταξε κι αυτό που σου είπα με τη μορφή του πίνακα, ( 3 στήλες, 1η στήλη: εργαζόμενος, 2η στήλη: ημερομηνία όπου «X», τρίτη στήλη: ημερομηνία όπου «R».)
    Ευχαριστώ ξανά.

  241. Ο/Η vioannis λέει:

    Γιάννη, η μάκρο πρέπει να γραφτεί σε ένα module, σε καμία περίπτωση στο This Workbook. Πρέπει να την διαγράψεις από εκεί. Στο περιβάλλον της VBA κάνε διπλό κλικ στο VbAProject του βιβλίου σου (πάνω από το ThisWorkbook) και από το μενού Insert εισάγεις ένα module. Εκεί θα γράψεις την μάκρο. Τώρα, η περιοχή a1:nb600 που έχω γράψει στη μάκρο είναι ενδεικτική. Εσύ θα την αλλάξεις και θα γράψεις τη δικιά σου στη θέση της. Σημειώνω ότι στην περιοχή είναι μέσα η γραμμή με τις ημερομηνίες και η στήλη με τα ονόματα. Δηλαδή στα παράδειγμα το δικό μου από Β2 έως NB1 είναι οι ημερομηνίες και από Α2 έως Α600 είναι τα ονόματα και στην μεγάλη περιοχή Β2 έως NB600 είναι τα δεδομένα 01, 02. 03…. X, R. Στο κελί Α1 ας είναι ότι θέλει.
    Δοκίμασε την παρακάτω μικρή παραλλαγή που τοποθετεί σε άλλη στήλη τα Χ και σε άλλη τα R. Και μια τελευταία ερώτηση: Οι ημερομηνίες στην πρώτη γραμμή είναι πραγματικές ημερομηνίες ή κείμενο;

    Sub make_XR_table()
    Dim sheetname As String
    Dim pinakas As Range
    Dim keli As Range
    Dim grammi As Integer
    Dim stili As Long
    Dim hmerominia As String
    Dim onoma As String
    Dim j As Long
    Set pinakas = Worksheets("mydata").Range("a1:nb600")
    Sheets.Add
    sheetname = ActiveSheet.Name
     
    For Each keli In pinakas
    If keli.Value = "X" Or keli.Value = "R" Then
    j = j + 1
    grammi = keli.Row
    stili = keli.Column
    hmerominia = pinakas.Item(1, stili)
    onoma = pinakas.Item(grammi, 1)
    Worksheets(sheetname).Cells(j, 1) = onoma
    If keli.Value = "X" Then Worksheets(sheetname).Cells(j, 2) = hmerominia
    If keli.Value = "R" Then Worksheets(sheetname).Cells(j, 3) = hmerominia
    End If
    Next
    End Sub
    

    Αν οι ημερομηνίες είναι κείμενο, τότε πρόσθεσε αυτές τις γραμμές κώδικα μετά την γραμμή: sheetname = ActiveSheet.Name και πριν τη γραμμή: For Each keli In pinakas

    With ActiveSheet
    Columns("B:B").NumberFormat = "@"
    Columns("C:C").NumberFormat = "@"
    End With
    
  242. Ο/Η Γιάννης λέει:

    Γιάννη, τα κελιά των ημερομηνιών έχουν μορφοποίηση ημερομηνίας, εντούτοις, χρειάστηκε να προσθέσω τις τελευταίες 4 γραμμές κώδικα που μου έστειλες για να δουλέψει σωστά. Πριν από αυτό μπέρδευε τις ημερομηνίες και έβγαζε πχ αντί 4/1/14, 1/4/14. Το μόνο πρόβλημα που έχω τώρα, είναι ότι σε κάθε σειρά του πίνακα μου εμφανίζει είτε την ημερομηνία του Χ, είτε την ημερομηνία του R, ενώ θα προτιμούσα να έχει και τις δύο διαφορετικές ημερομηνίες στην ίδια γραμμή και όπου κάποια ημερομηνία δεν υπάρχει το κελί να μένει κενό.
    Συγνώμη που γίνομαι κουραστικός, με έχεις βοηθήσει ήδη απίστευτα, αν μου λύσεις κι αυτό το θεματάκι…..
    Πολλά ευχαριστώ…

  243. Ο/Η Γιάννης λέει:

    Και κάτι τελευταίο, επειδή οι εργαζόμενοι εμφανίζονται με τον αριθμό μητρώου τους, έναν 4ψήφιο αριθμό με μορφή κειμένου, τι μπορώ να κάνω ώστε στον πίνακα που παίρνω να εμφανίζονται με την ίδια μορφή, πχ τον 0269 τον φέρνει 269, τον 0061, τον φέρνει 61 κ.ο.κ.
    THANKS THANKS THANKS…

  244. Ο/Η vioannis λέει:

    Γιάννη, Το θέμα της εμφάνισης των ονομάτων(κωδικών) είναι απλό, πρόσθεσε την γραμμή κώδικα

      Columns("A:A").NumberFormat = "@"  

    μαζί με τις άλλες, μετά την γραμμή: With ActiveSheet.
    Το άλλο θέμα δεν είναι απλό, πρέπει να γνωρίζω πολλά πράγματα ακόμα πχ όλη την δομή του πίνακα, τη συχνότητα εμφάνισης των R και X, ειδικές περιπτώσεις…ειδάλλως ο κίνδυνος για λάθη είναι μεγάλος.

  245. Ο/Η Γιάννης λέει:

    Γιάννη, σ’ ευχαριστώ πολύ για τη βοήθειά σου, πραγματικά μου έλυσες ένα σωρό προβλήματα και είμαι σίγουρος ότι παρακολουθώντας το blog θα μου λυθούν πολλές απορίες για ένα σωρό exceloθέματα. Να σαι πάντα καλά.

  246. Ο/Η Βαγγέλης λέει:

    Άλλη μια ευχάριστη έκπληξη στο διαδίκτυο. Παρακαλώ για την πολυτιμη η βοήθειά σας.
    Θέλω στη στήλη με τις ημ/νίες να μορφοποιείται το κελί, 5 μέρες πριν την αναγραφόμενη σε αυτο ημ/νία.
    Παράδειγμα: Σήμερα 4/2/14 να εμφανίζονται κοκκινες οι ημ/νίες <= 9/2/14.
    Ευχαριστώ.
    Βαγγέλης.

  247. Ο/Η vioannis λέει:

    Βαγγέλη
    Αν η στήλη με τις ημερομηνίες είναι η Α, την επιλέγεις και εισάγεις μορφοποίηση υπό όρους με τύπο:

    =AND(A1>TODAY()-6;A1<TODAY()+6)
    

    για να μορφοποιηθούν 5 ημέρες πριν και 5 ημέρες μετά την σημερινή (θα μορφοποιηθεί και η σημερινή) ή

    =AND(A1>TODAY()-6;A1<TODAY()+6;A1<>TODAY()) 
    

    για να μορφοποιηθούν 5 ημέρες πριν και 5 ημέρες μετά την σημερινή (δεν θα μορφοποιηθεί η σημερινή) ή

    =AND(A1>TODAY()-6;A1<TODAY()) 
    

    για να μορφοποιηθούν 5 ημέρες πριν από την σημερινή (δεν θα μορφοποιηθεί η σημερινή) ή

    =AND(A1<TODAY()+6;A1>TODAY()) 
    

    για να μορφοποιηθούν 5 ημέρες μετά από την σημερινή (δεν θα μορφοποιηθεί η σημερινή)

    Αν οι μορφοποιήσεις δεν εξαρτώνται από την τρέχουσα(σημερινή) ημερομηνία, αλλά από μια ημερομηνία που είναι γραμμένη σε ένα κελί, ας πούμε το C1, τότε αντικατάστησε στους παραπάνω τύπους την TODAY() με $C$1
    Παράδειγμα:

    =AND(A1>$C$1-6;A1<$C$1)
    
  248. Ο/Η Στεφανία λέει:

    Καλησπέρα σας κύριε Γιάννη.
    Υπάρχει απάντηση στο ερώτημά μου που είχα υποβάλει 1/2 και με συμπληρωματική πληροφορία στις 2/2;
    Εύχομαι ένα ευχάριστο σαββατοκύριακο

  249. Ο/Η vioannis λέει:

    Στεφανία, έχω στείλει μήνυμα στο email σου την Δευτέρα 3 Φεβ.

  250. Ο/Η Θέμης Κ. λέει:

    Καλησπέρα και συγχαρητήρια και απο εμένα! Εδώ και λίγες μέρες προσπαθώ να βελτιώσω ένα αρχείο σε excel 2007 που χρησιμοποιώ στην δουλειά μου. Κάθε μέρα δημιουργώ ένα καινούργιο αρχείο excel με ονομασία την τρέχουσα ημερομηνία, πχ 14-2-2014.xlsm
    Το αρχείο περιέχει υπολογισμούς, συναρτήσεις, μακροεντολές, αναφορές σε άλλα κελιά και διάφορα άλλα και δουλεύει σωστά! Το μοναδικό πρόβλημα είναι το εξής: Το κελί Β2 αναφέρει αν εργάζεται κάποιος την συγκεκριμένη ημερομηνία (πχ στις 14-2-2014). Στο αρχειο που
    δημιουργώ στις 15-2-2014, έχει αναφορα στο συγκεκριμένο κελί του αρχείου 14-2-2014.xlsm (δηλαδή κάθε φορά στο αρχείο της προηγούμενης ημέρας) και αν δούλεύε ο ‘Κάποιος’, στο κελί C67 γράφει «ΚΑΤΙ», ενώ αν δεν δούλευε την προηγούμενη ημέρα, γράφει «ΚΑΤΙ ΑΛΛΟ!». Για την αναφορά στο κελί έχω γράψει ολόκληρη την διαδρομή και έχει την μορφή κάπως έτσι :
    =IF(INDIRECT(«‘C:\Users\Works\[«&AΑ1&».xlsm]24′!B2″)»»;»ΚΑΤΙ»;»ΚΑΤΙ ΑΛΛΟ») όπου ΑΑ1 η χθεσινή ημερομηνία δηλαδή πχ 14-2-2014 και ’24’ το όνομα του φύλλου εργασίας.
    Αν έχω ανοιχτό το αρχείο της προηγούμενης ημέρας, όλα λειτουργούν άψογα, αν ωστώσο το αρχείο της προηγούμενης ημέρας είναι κλειστό, στο κελί που έπρεπε να γράφει το «ΚΑΤΙ» ή το «ΚΑΤΙ ΑΛΛΟ», εμφανίζει πρόβλημα αναφοράς #ΑΝΑΦ!. Μόλις ανοίξω το αρχείο της προηγούμενης ημέρας, φεύγει το πρόβλημα και εμφανίζει το σωστό μήνυμα. Μάλλον είναι κάτι απλό αλλά δεν έχω καταλάβει τι φταίει ακόμα! Θα ήμουν ευγνώμων αν μπορούσατε να βοηθήσετε.
    Ευχαριστώ…

  251. Ο/Η vioannis λέει:

    Θέμη,
    Τίποτα δεν κάνεις λάθος, απλώς η συνάρτηση INDIRECT δεν ενημερώνεται από κλειστά βιβλία. Δεν είναι η μόνη συνάρτηση με την αδυναμία αυτή. Κάνε ένα πείραμα να το δεις. Σε ένα βιβλίο γράψε τις συναρτήσεις SUM, AVERAGE και COUNTIF με ορίσματα κελιά άλλου βιβλίου. Θα δεις ότι όταν ανοίγεις το βιβλίο οι SUM και AVERAGE θα ενημερώνονται από το κλειστό βιβλίο αλλά η COUNTIF θα επιστρέφει το σφάλμα #ΤΙΜΗ!
    Μόλις ανοίξεις το βιβλίο-πηγή των ορισμάτων θα ενημερωθεί και η COUNTIF.
    Δες εδώ μία VBA συνάρτηση του Harlan Grove, την Pull. που κυκλοφορεί στο δίκτυο και υποκαθιστά την συνάρτηση INDIRECT και ενημερώνεται από κλειστά βιβλία. Την προτείνω με επιφύλαξη, την έχω δοκιμάσει επιφανειακά μόνο, όχι σε εργασία μου.
    Και δες αν μπορείς να δομήσεις το βιβλίο σου όχι με έμμεση αναφορά στο κελί-πηγή μέσω της INDIRECT αλλά άμεσα. (βέβαια το λέω αυτό χωρίς να γνωρίζω τη δομή του βιβλίου σου)

  252. Ο/Η Θέμης Κ. λέει:

    Ενσωμάτωσα την συνάρτηση που μου έδωσες, και αν και δεν κατάλαβα τίποτα απ’ ότι έγραφε μιας και μου φάνηκαν κινέζικα, το σημαντικό είναι ότι πλέον το βιβλίο εργασίας λειτουργεί αψογα! Ευχαριστώ πολύ! :)

  253. Ο/Η vioannis λέει:

    Θέμη, σημασία έχει ότι δουλεύει στο βιβλίο σου, τα υπόλοιπα είναι απλώς λεπτομέρειες….!

  254. Ο/Η Niobi λέει:

    Καλησπερα
    θα ηθελα να ρωτησω πως μπορω να αντικαταστησω σε 1 στηλη excel με αριθμους οπως 0,00123 το κομμα σε τελεια.αλλα να το κανω αυτο για ολουσ τουσ αριθμους τησ στηλης ταυτοχρονα χωρισ να χρειαζεται να τους επιλεξω γιατι ειναι παρα πολλοι

  255. Ο/Η vioannis λέει:

    Niobi,
    Έστω ότι οι αριθμοί είναι στη στήλη Α, από το κελί Α1 και κάτω. Ας δούμε πρώτα αν οι αριθμοί είναι πράγματι αριθμοί, ή είναι κείμενα που δείχνουν σαν αριθμοί. Σε ένα άδειο κελί γράψε τη συνάρτηση =ISNUMBER(A1). Αν η συνάρτηση αυτή επιστρέψει TRUE, τότε είναι αριθμοί, και αν αλλάξεις το κόμμα σε τελεία, θα πάψουν να είναι αριθμοί και θα μετατραπούν σε κείμενα (και ας μοιάζουν σε αριθμούς με τελεία), δεν θα μπορείς να κάνεις πράξεις με αυτούς και αν οι αριθμοί αυτοί είναι ορίσματα (χρησιμοποιούνται) σε άλλες συναρτήσεις, τότε αυτές θα επιστρέψουν λάθη. Έτσι αυτό που ζητάς, γίνεται μεν, θα σου πω παρακάτω πως, αλλά σκέψου αν πραγματικά το θέλεις. Αν τώρα, η =ISNUMBER(A1) επιστρέψει FALSE, τότε οι αριθμοί στη στήλη Α, φαίνονται σαν αριθμοί, στην πραγματικότητα είναι κείμενα. Στην περίπτωση αυτή δεν υπάρχει σημαντικό πρακτικό πρόβλημα από την μετατροπή. Λοιπόν, πως θα το κάνεις:
    Σε μία διπλανή άδεις στήλη ας πούμε την Β γράφεις τη συνάρτηση:

      =SUBSTITUTE(A1;",";".")   

    και την αντιγράφεις κάτω- κάτω έως εκεί που φτάνουν οι αριθμοί στην στήλη Α. Βλέπεις τώρα τους αριθμούς-κείμενα όπως ζήτησες. Επιλέγεις τώρα όλες τις εγγραφές της στήλης Β, δεξί κλικ, αντιγραφή, δεξί κλικ στο κελί Α1, ειδική επικόλληση, Επικόλληση =Τιμές, Πράξη =Καμία και ΟΚ. Διάγραψε τώρα τη στήλη Β, και είσαι έτοιμη.
    Σημείωση: Αν οι αρχικοί αριθμοί είναι πράγματι αριθμοί, αυτό σημαίνει ότι σαν διαχωριστικό δεκαδικών έχεις το κόμμα. Μπορείς να το αλλάξεις από τα settings του υπολογιστή σου σε τελεία. Αυτό όμως δεν το συνιστώ, διότι αυτό θα επηρεάσει όλα τα βιβλία excel, και όχι μόνο στο διαχωρισμό δεκαδικών. Η ρύθμιση αυτή στο excel 2007 και άνω μπορεί να γίνει και μέσα από excel: Κουμπί office,Επιλογές excel, Για προχωρημένους, Χρήση διαχωριστικών συστήματος κλπ. Η αλλαγή όμως θα αφορά όλα τα βιβλία, όπως είπα δεν τη συνιστώ.

  256. Ο/Η jigger9 λέει:

    Καλησπέρα και συγχαρητήρια για την υπέροχη προσπάθεια. Θα ήθελα να με βοηθήσετε στο εξής: Σε 2 φυλλα εργασίας , θελω ενα τυπο που να κανει το εξης :
    AN sheet1!A2=με καποιο στοιχειο της στήλης Α από sheet2! τοτε φερε μου απο sheet2! το περιεχόμενο του κελιού που βρίσκεται δίπλα στο στοιχείο που επαληθεύει την ισότητα. Δηλαδή αν sheet1!A2=φ. κ. τεστ(κείμενο)=sheet2!Α47 τότε δείξε μου το sheet2!Β47.
    Το έχω καταφέρει με LOOKUP αλλά δεν κανει αναζητηση σε ολοκληρο το κελι αλλα περιοριζεται στο φ. κ., δηλαδη το κελι με φ. κ. τεστ και το κελί φ. κ. τεστ 2 μου δίνει το ίδιο αποτέλεσμα από τη στήλη Β

  257. Ο/Η vioannis λέει:

    Δοκίμασε την Ctrl+Shift+Enter συναρτήση:

      =INDIRECT("sheet2!b"&MATCH(TRUE;(sheet1!A2=sheet2!A:A);0))  

    και τα ξαναλέμε.
    Ευχαριστώ πολύ για το like

  258. Ο/Η vioannis λέει:

    Δοκίμασε ακόμα αντί την LOOKUP την VLOOKUP

     =VLOOKUP(sheet1!A2;sheet2!A:B;2;FALSE) 
  259. Ο/Η jigger9 λέει:

    Η VLOOKUP δούλεψε τέλεια!!! Σε ευχαριστώ πολύ!!!!!!!

  260. Ο/Η apostolos orfanidis λέει:

    Καλήμερα σας, πολύ καλή δουλειά. Σπουδαίο το μπλογκ σας.
    Μια απλή ερώτηση, σε μια κολόνα Β10 έως Β20 υπάρχουν πχ ποδοσφαιρικές ομάδες. Βάζω φίλτρο και επιλέγω τον Παναθηναϊκό. Υπάρχει η δυνατότητα, και εάν πως, να εμφανιστεί το αποτέλεσμα του φιλτραρίσματος σε ένα άλλο κελί πχ στο κελί Α1.
    Ευχαριστώ πολύ για τις ενέργειες σας.

  261. Ο/Η vioannis λέει:

    Απόστολε, ευχαριστώ για τα καλά σου λόγια. Μερικά πράγματα δείχνουν εύκολα, αλλά δεν είναι. Αυτό που ρωτάς είναι ένα από αυτά. Έχω ξοδέψει, στο παρελθόν, πολλές ώρες έως ότου βρω λύση στο πρόβλημα αυτό με συνάρτηση φύλλου. Λοιπόν, υπάρχει λύση. Όπως λες, τα δεδομένα σου είναι στην στήλη B11:B20, και εννοώ τα δεδομένα χωρίς τον τίτλο που σίγουρα υπάρχει στο κελί Β10. Δηλαδή υποθέτω ότι στο κελί Β10 υπάρχει ο τίτλος ΟΜΑΔΕΣ και οι ίδιες οι ομάδες είναι στα κελιά Β11 έως Β20.Τότε στο κελί Α1 γράψε το τύπο:

    =VLOOKUP(1;CHOOSE({2;1};B11:B20;SUBTOTAL(3;OFFSET(B11:B20;ROW(B11:B20)-ROW(B11);;1)));2;FALSE)
    

    Η συνάρτηση είναι “συνάρτηση – πίνακα ενός κελιού”, και για να εισαχθεί σωστά μόλις γράψεις ή αντιγράψεις τη συνάρτηση στο κελί, πατάς F2 και μετά πατάς Ctrl+Shift+Enter. Θα δεις το excel να περικλείει τη συνάρτηση σε άγκιστρα {……}. Για τις συναρτήσεις-πίνακες δες το σχετικό σημείωμα του ιστολογίου εδώ. Κάθε φορά που θα κάνεις φίλτρο, στο κελί Α1 θα βλέπεις την πρώτη-πρώτη (ή τη μοναδική) τιμή που επιστρέφει το φιλτράρισμα. Αν εφαρμόσεις με ακρίβεια τα παραπάνω, και δεν παίρνεις σωστά αποτελέσματα, ίσως να χρειαστεί να κάνεις μια αλλαγή. Το τμήμα του τύπου:

    CHOOSE({2;1}
    

    αλλάξετε το σε:

    CHOOSE({2\1}
    

    Αυτό, για να προσαρμόσεις τη συνάρτηση στους διαχωριστές του υπολογιστή σου. Αν θέλεις κάνε το τεστ που περιγράφω στην παράγραφο «Πως θα δω ποιους διαχωριστές έχω;» στο σημείωμα του ιστολογίου «Απαραίτητες διευκρινίσεις για τους διαχωριστές ορισμάτων (Separators)»

    Ας διατυπώσω το πρόβλημα πιο γενικά, ίσως να χρειάζονται το τύπο και άλλοι φίλοι του ιστολογίου. Ο παρακάτω Ctrl+Shift+Enter τύπος, επιστρέφει στο κελί που θα εισαχθεί, την πρώτη ή την μοναδική τιμή που θα επιστραφεί από ένα φιλτράρισμα.

    =VLOOKUP(1;CHOOSE({2;1};mydata;SUBTOTAL(3;OFFSET(mydata;ROW(mydata)-ROW(firstcell);;1)));2;FALSE)) 
    

    Στον τύπο:
    mydata είναι η στήλη με τις τιμές που φιλτράρονται, χωρίς τον τίτλο των δεδομένων, τα καθαρά δεδομένα.
    firstcell είναι το πρώτο κελί των καθαρών δεδομένων πριν το φιλτράρισμα.
    Αν τα δεδομένα σας είναι στη στήλη Α1:A5000 και στο κελί Α1 είναι ο τίτλος των δεδομένων, τότε
    mydata είναι A2:A5000
    firstcell είναι Α2
    Προσαρμόστε το τμήμα του τύπου

    CHOOSE({2;1}
    

    στους δικούς σας διαχωριστές σταθερών πινάκων. Ίσως θα χρειαστεί η αλλαγή:

    CHOOSE({2\1}
    

    Από τη στιγμή που η συνάρτηση δουλέψει στον υπολογιστή σας, θα δουλέψει και σε οποιοδήποτε άλλον υπολογιστή, δεν υπάρχει πρόβλημα συμβατότητας με τους διαχωριστές. Δέστε λεπτομέρειες για αυτούς,εδώ. Η δύσκολη αυτή συνάρτηση είναι μία ακόμα εφαρμογή του τρόπου χρήσης της συνάρτησης CHOOSE, όπως περιγράφεται στο ιστολόγιο εδώ.

  262. Ο/Η apostolos orfanidis λέει:

    Σας ευχαριστω παρα πολυ ( χρειαστηκε να γινει η περιπτωση 2\1 ) να ειστε παντα καλα .. σας διαβαζω σχεδον απο τοτε που εφτιαξες το βλογκ σου .

  263. Ο/Η Σάλτας Μελέτιος λέει:

    Γιάννη καλημέρα σου. Επεσα πάνω στήν σελίδα σου τελείως τυχαία, και δέν σου κρύβω οτι «έφαγα» 1 ώρα σε αυτό χωρίς να το καταλάβω. Πραγματικά έχεις κάνει μια καταπληκτική δουλειά.
    Μπράβο σου.

  264. Ο/Η vioannis λέει:

    Ευχαριστώ, Μελέτιε για τα καλά σου λόγια. Ελπίζω η ώρα που «έφαγες» να σου άφησε ωραία γεύση…

  265. Ο/Η Θανασης λέει:

    http://prntscr.com/31dg26
    Κύριε Γιάννη , έχω το excel που εμφανίζετε στη παραπάνω εικόνα και αυτή τη στιγμή το γεμίζω διότι είπα να ασχοληθώ πάλι μετά από τρία χρόνια , έχω μία βάση δεδομένων από τις 1/4/2005 ως τις 14/9/2011 χρειάζομαι χωρίς να δημιουργήσω άλλη στήλη να συνδέσω την στήλη Ε με τη Μ , η στήλη Μ είναι γενική και θέλω όταν εμφανίζετε εκεί το 0-0 , 1-1 , 1-0 , 2-0 , 0-1 , 0-2 το στη Ε να βγαίνει το A και όταν δεν είναι κάτι από τα παραπάνω να βγαίνει το O.

  266. Ο/Η vioannis λέει:

    Θανάση, στο κελί Ε2 γράψε τη παρακάτω συνάρτηση με φωλιασμένα IF :

    =IF(TRIM(M2)="0-0";"A";IF(TRIM(M2)="1-1";"A";IF(TRIM(M2)="1-0";"A";IF(TRIM(M2)="2-0";"A";IF(TRIM(M2)="0-1";"A";IF(TRIM(M2)="0-2";"A";"O"))))))
    

    ή τον επόμενο τύπο:

    =IF(TRIM(LEFT(SUBSTITUTE(M2;"-";REPT(" ";100));10))+TRIM(RIGHT(SUBSTITUTE(M2;"-";REPT(" ";100));10))<3;"A";"O")
    

    ο οποίος αθροίζει το σκορ και αν το βρει μικρότερο του 3 επιστρέφει «Α»
    Αντίγραψέ τον και στα παρακάτω κελιά της στήλης Ε.

  267. Ο/Η Παύλος λέει:

    Κύριε Γιάννη καλημέρα… Καταπληκτικό blog και ευχαριστούμε πολύ για τις λύσεις που μας προσφέρετε!
    Έχω το εξής θέμα:

    Έχω ένα excel με δύο στήλες. Στη στήλη a συμπληρώνονται αυτόματα ονόματα που το φύλλο τα παίρνει από άλλο εξωτερικό excel.
    Στη στήλη b συμπληρώνονται αυτόματα το σύνολο των βαρδιών που έχουν κάνει αυτά τα ονόματα, που και αυτό το παίρνει από εξωτερικό excel…

    Το πρόβλημά μου είναι ότι όταν πάω να του κάνω ταξινόμηση στη στήλη b ώστε να μου βγάλει με σειρά τον αριθμό βαρδιών από το μεγαλύτερο προς το μικρότερο, μου πετάει μήνυμα λάθους ότι «δεν είναι δυνατή η αλλαγή τμήματος ενός πίνακα».

    Γιατί συμβαίνει αυτό? Επειδή όλα τα δεδομένα των κελιών λαμβάνονται από εξωτερικό excel? Και πως μπορώ τελικά να δω τις βάρδιες που έκανε κάθε όνομα, με σειρά από τις περισσότερες προς τις λιγότερες βάρδιες???

    Ευχαριστώ!

  268. Ο/Η vioannis λέει:

    Παύλο, αυτή καθ’ αυτή η διασύνδεση δεν εμποδίζει την ταξινόμηση. Στην περίπτωσή σου, (κρίνοντας από το μήνυμα που σου βγάζει), η ταξινόμηση εμποδίζεται από το είδος της ή των συναρτήσεων που δημιουργούν την διασύνδεση. Υποπτεύομαι ότι είναι συνάρτηση-πίνακας πολλών κελιών. Αν έχω δίκιο, επιλέγοντας ένα κελί από τη στήλη Β, θα βλέπεις στην γραμμή των τύπων τη συνάρτηση μέσα σε άγκιστρα, έτσι {=……… }. Δες, αν θες, εδώ το σχετικό σημείωμα του ιστολογίου για τις συναρτήσεις αυτές. Μια μόνιμη λύση στο πρόβλημά σου είναι να ξαναφτιαχτούν, αν είναι εφικτό, οι διασυνδέσεις με χρήση άλλων απλών συναρτήσεων ή συναρτήσεων-πινάκων ενός κελιού. Αυτές δεν εμποδίζουν την ταξινόμηση. Μια δεύτερη μόνιμη λύση είναι, το βιβλίο σου να ενημερώνεται από το ή τα βιβλία-πηγές μέσω μίας μακροεντολής. Με τη μάκρο θα φτάνουν στις στήλες Α και Β του βιβλίου σου, καθαρές τιμές (αξίες) και όχι συναρτήσεις, που φυσικά ταξινομούνται χωρίς πρόβλημα. Τέλος, χωρίς να αλλάξεις τίποτα στα βιβλία σου, με λίγο επί πλέον μπελά κάθε φορά, αντιγράφεις τις στήλες Α και Β, τις μεταφέρεις με ειδική επικόλληση-τιμές σε δύο άλλες κενές στήλες, και εκεί κάνεις ταξινόμηση

  269. Ο/Η Paul λέει:

    Πράγματι, αυτό ακριβώς που λες συμβαίνει! Ήδη ακολούθησα τη πρώτη λύση που αναφέρεις και έλυσα το πρόβλημα (με τις μακροεντολές δεν τα πάω καλά δυστυχώς…)

    Χωρίς να θέλω να καταχραστώ την ευγενική σου προσφορά να μας βοηθάς στα προβλήματά μας με το excel, θα ήθελα να σου θέσω ένα ακόμη ερώτημα… Πρόκειται για ερώτημα που έχω θέσει και σε forums στο εξωτερικό κι όμως λύση δεν έχει βρει κανείς!

    Έχω φτιάξει λοιπόν δύο Excel αρχεία, τα οποία είναι shared σε δίκτυο σε κοινό φάκελο.
    Ας πούμε το αρχείο 1 και το αρχείο 2.

    Το αρχείο 1 παίρνει τιμές από το αρχείο 2. (μέσω απλών συναρτήσεων του στυλ «=» που απλά αντιγράφει τιμές)

    Όταν επεξεργάζομαι και τα δύο αρχεία στο ίδιο pc, τότε ότι τιμές βάζω στο αρχείο 2 , αυτόματα ενημερώνεται το αρχείο 1 (χωρίς να κάνω απολύτως τίποτα)

    Όταν όμως το αρχείο 2 το επεξεργάζεται άλλο pc (το έχει ανοίξει μέσα από το κοινόχρηστο δικτυακό folder) τότε το αρχείο 1 δεν ενημερώνει αυτόματα τις τιμές του στο δικό μου pc. Για να ενημερωθεί, πρέπει να κλείσω το αρχείο και να το ξανανοίξω…. Πως θα γίνει να συνεχίσει το αρχείο 1 να ενημερώνεται αυτόματα????? (σημειωτέον τα αρχεία ανοίγονται πάντα από τον κοινόχρηστο φάκελο, και από τα δύο pc)

    Και επίσης κάτι ακόμα… Πως μπορώ να βάλω σε ένα πεδίο να ενημερώνει τη τρέχουσα ώρα και ημερομηνία όποτε το κάνω save? (θέλω να παίρνει τιμή, μόνο στο save, ώστε να ξέρουμε πότε ενημερώθηκαν οι τιμές του…)

    Αν αυτά τα δύο προβλήματα έχουν λύσεις, κυριολεκτικά με σώζεις!!!!! (και υπενθυμίζω πως δυστυχώς με VBA δεν τα πάω καλά)

  270. Ο/Η vioannis λέει:

    Παύλο: Το πρώτο πρόβλημα δεν είναι εύκολο να απαντηθεί, δεν είναι τόσο θέμα excel, όσο θέμα διασύνδεσης. Η ίδια η Microsoft λέει πχ για το 2007: Όταν ανοίγετε ένα βιβλίο εργασίας που περιέχει συνδέσεις δυναμικής ανταλλαγής δεδομένων (DDE) σε ένα απομακρυσμένο αρχείο προέλευσης στο Microsoft Office Excel 2007, δεν ενημερώνονται αυτόματα οι συνδέσεις DDE. Δες εδώ και ίσως εδώ. Καλύτερα να ψάξεις για πληροφορίες στο σύστημα υποστήριξης της Microsoft για την έκδοση του excel που έχεις, και να συζητήσεις το θέμα με τον συντηρητή του συστήματος.
    Το δεύτερο είναι θέμα μίας μακροεντολής τύπου Before Save η οποία θα ενεργοποιείται μόλις ο χρήστης σώσει το βιβλίο.
    Η παρακάτω μακροεντολή η οποία πρέπει να γραφτεί στο ThisWorkbook και όχι σε ένα module, ενεργοποιείται από το συμβάν Save ή το συμβάν Save as, και στο κελί Α1 του φύλλου xxxx, αφήνει ένα αποτύπωμα χρόνου: 20/3/2014 7:57:27 πμ

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Range("xxxx!A1") = VBA.Date & "  " & VBA.Time
    End Sub
    

    Παρόμοια, η παρακάτω μάκρο δημιουργεί στη στήλη Α του φύλλου xxxx, μία βάση με τους χρόνους και ώρες που ενεργοποιήθηκε το συμβάν Save ή το συμβάν Save as. Σε κάθε κλήση του συμβάντος ο χρόνος γράφεται στο επόμενο κενό κελί της στήλης.

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim myLastRow As Long
    Dim mysheet As Object
    Set mysheet = Sheets("xxxx")
    myLastRow = mysheet.Cells(Rows.Count, "A").End(xlUp).Row
    mysheet.Cells(myLastRow + 1, "A") = VBA.Date & "  " & VBA.Time
    End Sub
    

    Βέβαια πρέπει να επιλέξεις ότι θα έχεις βιβλία xlsm με μάκρο και ο χρήστης θα πρέπει να ενεργοποιεί τις μάκρο κατά το άνοιγμα του βιβλίου. Αναλυτικά βήματα για να εισάγεις τον κώδικα στο ThisWorkbook θα βρεις εδώ

  271. Ο/Η Παύλος λέει:

    Η πληρέστερη και ουσιαστικότερη απάντηση που έλαβα όπου κι αν έστειλα αυτά τα ερωτήματα!
    Είσαι the Number1 !

    Ευχαριστώ πολύ!

  272. Ο/Η vioannis λέει:

    Ευχαριστώ, Παύλο, για τα καλά σου λόγια!

  273. Ο/Η Θανασης λέει:

    Κύριε Γιάννη όντως είστε θεός , μόλις σήμερα μπόρεσα και ασχολήθηκα διότι έχουμε φόρτο εργασίας αυτές τις μέρες στη δουλειά και δούλεψε τελεία
    Μπορούμε να βάλουμε περισσότερες επιλογές ; δηλαδή να μου βγάζει τα ημίχρονα τελικά άμεσα , κάνοντας χρήση των σκορ ?

  274. Ο/Η vioannis λέει:

    Θανάση και εγώ απουσιάζω, σε ολίγων ημερών διακοπές. Θα τα πούμε μόλις γυρίσω. Όλα γίνονται.

  275. Ο/Η Γιώργος λέει:

    Γιάννη γειά σου. Αν γύρισες από τις ολιγοήμερες διακοπές σου, μακάρι να πέρασες καλά και να ξεκουράστηκες. Έχω ένα πρόβλημα να λύσω και δεν μπορώ: Κατά τη διαδικασία μαζικής αντιγραφής από άσχετο αρχείο και επικόλησης σε excel, μεταφέρονται και επικολλώνται κάποια εικονίδια, πάντα τα ίδια, πάντα στην ίδια θέση, δύο εικονίδια στην αρχή κάθε εγγραφής, στις δύο πρώτες στήλες. Επειδή δεν γίνεται να τα διαγράψω μαζικά επιλέγοντας τις στήλες και επειδή είναι χιλιάδες, μήπως υπάρχει κάποιος τρόπος μαζικής διαγραφής τους;
    Ευχαριστώ.

  276. Ο/Η θανασης λέει:

    Σε αυτό δε χρειάζεται ο κος Γιάννης ΑΠΛΑ πριν το μεταφέρεις στο excel επειδή έχει υπερσυνδέσεις πρέπει πρώτα να το κάνεις επικόλληση σε ένα σημειωματάριο για να μείνει μόνο το κείμενο και μετά το αποτέλεσμα το αντιγράφεις στο excel .

  277. Ο/Η Γιώργος λέει:

    Ευχαριστώ πολύ Θανάση. Και να πώ ότι δεν το έχω κάνει. Αλλά μωραίνει κύριος……..

  278. Ο/Η Γιώργος λέει:

    Και επίσης λύνεται με την «ειδική επικόλληση»>»τιμές». Αλλά και αυτό ακόμη μόλις τώρα το επιβεβαίωσα. και πάλι ευχαριστώ.

  279. Ο/Η vioannis λέει:

    Γιώργο, η μέθοδος που περιγράφει ο Θανάσης είναι πολύ καλή, εκτός των άλλων απαλλάσσει το κείμενο και από μορφοποιήσεις που η απλή επικόλληση μεταφέρει. Πολύ σωστό και αυτό που προτείνεις εσύ: Αντιγράφεις και αντί για επικόλληση κάνεις ειδική επικόλληση και επιλέγεις «κείμενο Unicode» ή «Τιμές», ανάλογα από πού προέρχεται το κείμενο. Εναλλακτικά, Γ τρόπος: Αντιγράφεις, κάνεις επικόλληση σε μία πρόχειρη περιοχή του φύλλου ή σε ένα πρόχειρο φύλλο, στη συνέχεια αντιγράφεις την πρόχειρη περιοχή στην οποία μόλις επικόλλησες, πας στην περιοχή του φύλλου ή το φύλλο που θες, και κάνεις ειδική επικόλληση – Τιμές . Διαγράφεις την πρόχειρη περιοχή ή πρόχειρο φύλλο. Δ τρόπος: Αντιγράφεις, κάνεις επικόλληση, πατάς F5, στο πλαίσιο της Μετάβασης που εμφανίζεται επιλέγεις Ειδικά σε…στη συνέχεια επιλέγεις Αντικείμενα και OK, (όλα τα αντικείμενα του φύλλου είναι τώρα επιλεγμένα) και πατάς το πλήκτρο Delete στο πληκτρολόγιο. Οι τρόποι Γ και Δ είναι καλοί για μεταφορά δεδομένων από στήλες σε στήλες, Στην Δ μέθοδο θα διαγραφούν και άλλα αντικείμενα τα οποία υπάρχουν στο φύλλο και ενδεχομένως τα χρειάζεσαι. Επίσης με τον τρόπο Δ, θα διατηρηθούν οι λοιπές μορφοποιήσεις του αρχικού κειμένου.

  280. Ο/Η vioannis λέει:

    Θανάση,(για την ερώτηση 22/3/2014)
    Η στήλη L από τη Μ:

    =IF(--LEFT(M2;FIND("-";M2)-1)>--RIGHT(M2;LEN(M2)-FIND("-";M2));1;IF(--LEFT(M2;FIND("-";M2)-1)<--RIGHT(M2;LEN(M2)-FIND("-";M2));2;"X"))
    

    Η στήλη Ν από τις στήλες Μ και Ο:

    =IF(--LEFT(O2;FIND("-";O2)-1)>--RIGHT(O2;LEN(O2)-FIND("-";O2));1;IF(--LEFT(O2;FIND("-";O2)-1)<--RIGHT(O2;LEN(O2)-FIND("-";O2));2;"X"))&"-"&IF(--LEFT(M2;FIND("-";M2)-1)>--RIGHT(M2;LEN(M2)-FIND("-";M2));1;IF(--LEFT(M2;FIND("-";M2)-1)<--RIGHT(M2;LEN(M2)-FIND("-";M2));2;"X"))
    

    Από ένα σκορ, ας πούμε 4-2 που είναι στο κελί Μ2, ο τύπος

    =--LEFT(M2;FIND("-";M2)-1)
    

    ψάχνει που είναι το διαχωριστικό – και επιστρέφει τον αριθμό αριστερά, το 4
    και ο τύπος

    =--RIGHT(M2;LEN(M2)-FIND("-";M2))
    

    επιστρέφει τον αριθμό δεξιά της παύλας, δηλαδή το 2.
    Μετά συνδυάζεις τα αποτελέσματα αυτά με τη συνάρτηση If και παίρνεις τα παραπάνω.

  281. Ο/Η Γιώργος λέει:

    Σας ευχαριστώ πολύ. Γιάννη επιπρόσθετα μου είναι πολύ χρήσιμος και ο Δ τρόπος. Μάλλον αυτό είχα κατά νου. Πάντως εξαντλήθηκε το θέμα. Καληνύχτα σε όλους.

  282. Ο/Η Χρήστος Κ. λέει:

    Κε Βαρλάμη καλησπέρα σας. Θα μπορούσατε να μου δώσετε μια βοήθεια με το εξής: Άν στο κελι Α1 εχω περάσει μια ημερομηνία, π.χ 17/4/2014 θα ήθελα στο κελί Β1 όταν μπώ μετά απο 45 ημέρες να μου δείχνει το αποτέλεσμα των ημερών που έχουν περάσει από τις 17/4/2014 έως την μέρα που θα ξαναμπώ στο αρχείο μου

  283. Ο/Η Χρήστος Κ. λέει:

    Π.χ έχω μία τιμή σε ευρώ στο Α1 και δίπλα στο Β1 περνώ την ημερομηνία που ενημέρωσα την τιμή στο Α1.Κλείνω το φύλλο και μετα απο 45 ημέρες που το ξανανοίγω να μου εμφανίζει τις μέρες που έχουν μεσολαβίσει ,και να αποικωνίζεται στο C1.

  284. Ο/Η vioannis λέει:

    Χρήστο, στο κελί C1 γράψε τον τύπο:

    =TODAY()-B1
    

    To excel, κάθε φορά θα αφαιρεί από την τρέχουσα ημερομηνία την ημερομηνία του κελιού Β1, και θα επιστρέφει την διαφορά. Την τρέχουσα ημερομηνία διαβάζει από τον υπολογιστή. To excel εκτιμά ότι αφού αφαιρείς ημερομηνίες και το αποτέλεσμα θα είναι ημερομηνία και έτσι θα δεις να σου επιστέφει μια ημερομηνία κάπου στο 1900. Για αυτό, άλλαξε μετά, την μορφοποίηση του κελιού: Κάνε δεξί κλικ στο κελί C1 και από το μενού που θα εμφανιστεί, επιλέγεις μορφοποίηση κελιών και στην καρτέλα των αριθμών επιλέξεις την κατηγορία γενική και πατάς ΟΚ. Είσαι έτοιμος.
    Δεύτερος τρόπος είναι να γράψεις στο κελί C1 τον τύπο:

     
    =DATEDIF(B1;TODAY();"d")
    

    Για την συνάρτηση DATEDIF έχω γράψει αναλυτικά εδώ:
    https://varlamis.wordpress.com/2011/09/30/date_time_function/#comment-652

  285. Ο/Η Χρήστος Κ. λέει:

    Σας ευχαριστώ που μοιράζεστε τις γνώσεις σας, έτσι απλόχερα. Να είστε καλά.Είστε καταπληκτικός.Σας ευχαριστώ πολύ.Και καλό Πάσχα!!!

  286. Ο/Η vioannis λέει:

    Καλή Ανάσταση και σένα Χρήστο και σε όλους τους φίλους και επισκέπτες του ιστολογίου.

  287. Ο/Η Pela Papadopoulou λέει:

    Αγαπητέ κύριε Γιάννη .
    Πολλά συγχαρητήρια για το σάιτ σας ……….
    Αντιμετωπίζω και εγώ ένα πρόβλημα και ελπίζω να γίνω κατανοητή και αν είχατε την ευκαιρία να με βοηθούσατε λιγάκι !
    Έστω οτι έχουμε 3 στήλες στο excel .
    Η Α , Β & C

    Οι δύο πρώτες στήλες μας έχουν πχ 15 σειρές , ενώ η τρίτη στήλη μπορεί να έχει και χίλιες .
    Η Α στήλη περιέχει αριθμούς που αντιστοιχούν πχ σε αυτοκίνητα
    Η Β έχει αριθμούς που αντιστοιχούν σε αριθμό κυκλοφορίας
    και στην Γ στήλη απλά επαναλαμβάνονται με τυχαία σειρά αριθμοί της Β για χίλιες σειρές .
    Εγώ θέλω , κάθε φορά που θα βρίσκει στην Γ στήλη τον αριθμό κυκλοφορίας , σε μία νέα στήλη την Δ να μου γράφει τον αριθμό του αυτοκινήτου όσες φορές βρίσκει αυτόν τον αριθμό .
    Για να γίνω πιο κατανοητή .

    Α Β Γ Δ(νέα στήλη)
    301 1502 1501 305
    302 1504 1509
    303 1511 1502 301
    304 1550 1504
    305 1501 1550
    1512
    1513
    1502 301
    1501 305

    θα ήθελα δίπλα ακριβώς απο την Γ στήλη , κάθε φορά πχ που βλέπει το 1502 να αντιγράφει τον αριθμό που είναι στα αριστερά του .

    Σαν τέλος ελέγχου θα μπορούσα να βάλω το 0 .

    Η Α και η Γ στήλες μου δεν αλλάζουν ποτέ !
    ΑΥτό που αλλάζει κάθε μέρα είναι η Β και φυσικά η Δ .

    Δοκίμασα διάφορες μαθόδους αλλά τίποτα δεν λειτουργεί σωστά !
    Παρακαλώ , αν δείτε το πρόβλημά μου και είναι εύκολο , αναρτήστε μου μία λύση !
    Ευχαριστώ προκαταβολικά !

  288. Ο/Η vioannis λέει:

    Πέλα, το πρόβλημά σου, αν σωστά το κατάλαβα, είναι το κλασικό πρόβλημα αριστερού Vlookup. Μία- μία τις (χιλιάδες) τιμές της Γ αναζητάς στη στήλη Β του πίνακα Α1:Β15 και ζητάς να σου επιστραφεί η αντίστοιχη τιμή από στήλη αριστερά της Β. Μόνη της η vlookup δεν το κάνει αυτό. Θέλει βοήθεια από άλλες συναρτήσεις όπως η MATCH ή η CHOOSE. Εγώ προτιμώ την CHOOSE. Δες αν θέλεις τη σχετική παράγραφο για το αριστερό Vlookup , στο σημείωμα του ιστολογίου: “Ένας πρωτότυπος τρόπος χρήσης της συνάρτησης CHOOSE και οι εφαρμογές του”. Όχι δεν σε βάζω να διαβάσεις. Ο τύπος που λύνει το πρόβλημά σου είναι :

    =IFERROR(VLOOKUP(C2;CHOOSE({2;1};$A$2:$A$15;$B$2:$B$15);2;FALSE);0)
    

    Υπέθεσα ότι τα δεδομένα αρχίζουν στη 2η σειρά και ότι στη πρώτη υπάρχουν τίτλοι.
    Παράλληλα ετοίμασα στα γρήγορα ένα βιβλίο με το παράδειγμά σου με διάφορες χρήσιμες παραλλαγές του τύπου. Κατέβασέ το να το δεις. Αν δεν κατάλαβα, ή δεν σε κάλυψα, επανέρχεσαι άφοβα.

  289. Ο/Η Pela Papadopoulou λέει:

    Κύριε Γιάννη , δούλεψε πολύ καλά και κάνει αυτό που θέλω !
    Ευχαριστώ πάρα πολύ και για το βιβλίο με τα παραδείγματα , ήταν πάρα πολύ καλό !
    Κάποια στιγμή θα το εμπλουτίσω και θα το κάνω με κώδικα τον οποίο έχω ήδη γράψει σε C++ , μισό γιατί δεν πρόλαβα να τον τελειοποιήσω , αλλά πρέπει και να μεταφράσω σε Visual για να γίνει μακροεντολή στο excel ! Μόλις βρώ χρόνο και τρέξει σωστά θα σας τον στείλω ….
    Ίσως εξυπηρετήσουμε κάποιον με το ίδιο πρόβλημα …..
    Ευχαριστώ πάρα πολύ για την τόσο πολύτιμη βοήθεια , να είστε καλά >!!1<1!!!!!!

  290. Ο/Η vioannis λέει:

    Πέλα, ευχαρίστως να τον στείλεις!

  291. Ο/Η Anastasia λέει:

    καλησπέρα, και τα συγχαρητήρια μου για τη σελίδα σας πραγματικά έχει κάποια πολύ χρήσιμα και ενδιαφέροντα θέματα.
    Θα ήθελα να κάνω μια ερώτηση, μου ζήτησαν από τη δουλειά μου να κάνω μια συνάρτηση που να διαλέγει τυχαία έναν αριθμό από την πρώτη στήλη και στη συνέχεια ανάλογα με αυτό που διάλεξε να γράφει ένα κείμενο το οποίο όμως είναι σε 3 άλλες γραμμές ή και πέντε (είναι ερωτήσεις με πολλαπλή επιλογή), και δεν μπορώ να το πετύχω με τίποτα….
    Ακόμα νομίζω ότι μπορώ να το γράψω σε c++ αλλά δεν ξέρω πως μπορώ να το μεταφέρω μετά σε excel.
    Ευχαριστώ

  292. Ο/Η vioannis λέει:

    Αναστασία, από αυτά που γράφεις υποθέτω ότι υπάρχει σταθερή αντιστοιχία μεταξύ των αριθμών που κληρώνονται και των 3-5 σειρών κειμένου που θα εμφανίζονται. Με δεδομένο αυτό, έστησα ένα παράδειγμα και σε αυτό που ζητάς έδωσα δύο λύσεις: Μια με συναρτήσεις φύλλου και μια με μακροεντολή. Ελπίζω να σου δώσουν κάποιες ιδέες. Αν κατάλαβα κάτι στραβά, επανέρχεσαι. Με την γλώσσα C δεν μπορώ να σε βοηθήσω καθόλου.
    Κατέβασε το βιβλίο anastasiatest.xls, έχω περιγράψει τα βήματα στον κώδικα αναλυτικά.

  293. Ο/Η jenny λέει:

    Γιάννη καλησπέρα, εχω το εξής θέμα: Σε ένα αρχείο excel έχω στις στήλες Α και Β κάποιους κωδικούς και στη στήλη C μια τιμή που αντιστοιχεί σε αυτούς τους κωδικούς. Θέλω η μακροεντολή που προσπαθώ να φτιάξω να συγκρίνει τους κωδικούς και εάν είναι ίδιοι να προσθέτει τις τιμές τους και να τις βάζει σε μία νέα στήλη (που προφανώς θα είναι πολύ λιγότερες οι εγγραφές).
    Μπορείς να βοηθήσεις???

  294. Ο/Η vioannis λέει:

    Τζένη, μερικές διευκρινίσεις:
    Η σύγκριση θα γίνει στους κωδικούς των στηλών Α & Β ;
    Οι τιμές της στήλης C τι ρόλο παίζουν, δεν θα λάβουν μέρος στη μάκρο;
    Οι τελικές αθροίσεις θα ίδιων κωδικών θα επιστραφούν απλά σε μία νέα στήλη, χωρίς να ενδιαφέρεσαι από ποιος κωδικούς προήλθαν ή από ποια κελιά;

  295. Ο/Η Ioannis Polatkeisoglou λέει:

    Καλημέρα σας, προσπαθώ να συσχετίσω δυο αρχεία όπου περιέχονται και στα δυο, σε μία στηλη, ένας εξαψήφιος κωδικός και διαφορετικά δεδομένα στις υπόλοιπες στήλες. Θα ήθελα να αντιγράψω τα δεδομένα του ενός αρχείου στο άλλο, βάση αυτού του εξαψήφιου, μπορεί να γίνει κάτι τέτοιο? Χρησιμοποιώ Office 2010, σας ευχαριστώ!

  296. Ο/Η vioannis λέει:

    Ιωάννη,
    Ας υποθέσουμε ότι ο ένας πίνακας (βάση) είναι στο BOOK1 Φύλλο1 και ο άλλος στο BOOK2 Φύλλο2. Θα μεταφέρουμε τις στήλες του BOOOK2 στο BOOK1.
    Άνοιξε και τα δύο βιβλία. Φρόντισε και στα δύο βιβλία η στήλη με τους κωδικούς να είναι η πρώτη αριστερά. Τότε η συνάρτηση
    =VLOOKUP(A2;[BOOK2.xls]Φύλλο2!$A$1:$G$60;2;FALSE)
    την οποία θα γράψεις στο πρώτο άδειο κελί δεξιά του πίνακα1 (του BOOK1) θα επιστρέψει την αντίστοιχη τιμή από τη στήλη 2 του πίνακα 2. Ο πίνακας2 είναι ο [BOOK2.xls]Φύλλο2!$A$1:$G$60
    Για τη μεταφορά των δεδομένων της 3ης στήλης αλλάζεις στον παραπάνω τύπο μόνο το 2 σε 3:
    =VLOOKUP(A2;[BOOK2.xls]Φύλλο2!$A$1:$G$60;3;FALSE)
    Στην πράξη χρησιμοποίησα τον τύπο
    =IFERROR(VLOOKUP(A2;[BOOK2.xls]Φύλλο2!$A$1:$G$60;2;FALSE);»»)
    για να αντιμετωπίσω και τις περιπτώσεις όπου υπάρχουν κωδικοί στο βιβλίο1 που δεν υπάρχουν στο βιβλίο2. Κατέβασε και άνοιξε και τα δύο βιβλία BOOK1 και book2.xls για να δεις τις λεπτομέρειες και πως δουλεύουν. Εκεί αντιμετωπίζω και την αντίθετη περίπτωση, όπου κωδικοί του βιβλίου2 δεν υπάρχουν στο βιβλιο1. Όταν ολοκληρώσεις, αντικατάστησε τους τύπους με αξίες , εκτός αν θέλεις να διατηρείται ο σύνδεσμος μεταξύ των 2 βιβλίων με τους τύπους . Αν οι στήλες με τους κωδικούς δεν είναι ή δεν μπορούν να μεταφερθούν πρώτες αριστερά στους πίνακες, υπάρχει λύση, αλλά είναι πιο πολύπλοκη. Για όποιο πρόβλημα επανέρχεσαι.

  297. Ο/Η Ioannis Polatkeisoglou λέει:

    Σας ευχαριστώ για την άμεση και πολύ επιτυχημένη συμβουλή σας! Το μόνο που χρειάστηκε έξτρα ήταν να σορτάρω τους πίνακες βάσει της 1ης στήλης. Ευχαριστώ και πάλι!

  298. Ο/Η Paul λέει:

    Καλημέρα κύριε Γιάννη!

    θα ήθελα να σας ρωτήσω το εξής. Έχω πολλά διαφορετικά αρχεία Excel (workbook1 -workbook2 – workbook3 κοκ) που έχουν το καθένα για παράδειγμα 10 στήλες και 10 γραμμές.

    Έχω και ένα συγκεντρωτικό Excel (final_workbook), όπου τα πεδία του ενημερώνονται με τιμή «=» από τα πολλά διαφορετικά αρχεία Excel που έγραψα παραπάνω.

    Αυτή τη στιγμή πάω στο final_workbook και του λέω για παράδειγμα να αντιστοιχήσει (εντολή =) το πεδίο D3 με το πεδίο D3 του workbook1, το πεδίο D4 με το πεδίο D4 του workbook1 και ούτω καθ’εξής…

    Επειδή όμως τα αρχεία και τα πεδία είναι πάρα πολλά και είναι πολύ χρονοβόρο να βάζω για κάθε πεδίο ξεχωριστά τη τιμή = και να του δηλώνω από που θα παίρνει τιμή, πως γίνεται να του κάνω μια μαζική ενημέρωση πεδίων? Δηλαδή να πω στο final_workbook ότι οι τιμές από D3 μέχρι H10 θα είναι = με τις τιμές από D3 μέχρι H10 του workbook1 ?

    Πρέπει να πάω ένα ένα πεδίο? Φαντάζομαι υπάρχει κάποιος μαζικός τρόπος…

    Ελπίζω να έγινα κατανοητός!

    Ευχαριστώ πολύ για τη …διασπορά γνώσεων!

  299. Ο/Η vioannis λέει:

    Παύλο,
    Α) Γίνεται με ειδική επικόλληση. Αντίγραψε την περιοχή κελιών που θέλεις (ορθογώνια περιοχή, στήλη ή γραμμή) , από το βιβλίο book1. Πήγαινε στο βιβλίο final και κάνε δεξί κλικ στο πρώτο πάνω αριστερά κελί της περιοχής που θέλεις να δημιουργηθούν οι συνδέσεις. Από το μενού που εμφανίζεται επιλέγεις: “Ειδική επικόλληση” και από την καρτέλα της ειδικής επικόλλησης που θα εμφανιστεί, επιλέγεις “Επικόλληση σύνδεσης”. Είσαι έτοιμος. Αν στην καρτέλα αυτή προηγουμένως τσεκάρεις “Αντιμετάθεση”, τότε οι στήλες θα γίνουν γραμμές, οι γραμμές στήλες και οι ορθογώνιες ν*μ περιοχές θα αλλάξουν διάσταση σε μ*ν. Σε μερικές περιπτώσεις το excel σου επιτρέπει να επιλέξεις και να αντιγράψεις μη συνεχόμενα κελιά. Παράδειγμα κρατώντας πατημένο το Ctrl επίλεξε μη συνεχόμενα κελιά από την ίδια στήλη ή την ίδια γραμμή. Κάνε την ειδική επικόλληση σύνδεσης, όπως είπαμε παραπάνω, στο βιβλίο σου final και θα δεις οι συνδέσεις να επικολλώνται σε συνεχόμενα κελιά χωρίς κενά μεταξύ τους. Μπορείς να αντιγράψεις δυο ή περισσότερες μη συνεχόμενες στήλες που αντιστοιχούν όμως στις ίδιες ακριβώς γραμμές (πχ Β10:Β20, F10:F20, J10:J20) όχι όμως Β10:Β20 και F11:F21. Πειραματίσου, αν θες, οι περιπτώσεις είναι αρκετές.

    Β) Οι συνδέσεις όμως μπορούν να γίνουν και χειριστικά. Ας δούμε ένα παράδειγμα. Ας πούμε ότι θέλεις να δημιουργήσεις συνδέσεις για τα 19 κελία της στήλης F7:F25 του book1 στα κελιά Α1:Α19 του final.
    Β1) Με αντιγραφή.
    Στο κελί Α1 δημιούργησε τον σύνδεσμο προ το κελί F7. Τώρα στο κελί Α1 έχεις ένα τύπο σαν αυτόν:

    =[book1.xls]Φύλλο1!$F$7
    

    Διόρθωσε το τύπο αυτό έτσι:

    =[book1.xls]Φύλλο1!F7
    

    Διαγράφεις δηλαδή τα δολάρια ($). Αντίγραψε (σύρε) τώρα τον τύπο του κελίου Α1 στα κελιά Α2 έως Α19. Το ίδιο θα κάνεις αν θέλεις να αντιγράψεις γραμμή σε γραμμή ή ορθογώνια περιοχή σε ορθογώνια ίδιων διαστάσεων.

    Β2) Με συνάρτηση-πίνακα πολλών κελιών.
    Παρακολούθησε το παρακάτω παράδειγμα και θα καταλάβεις τον μηχανισμό. Στο κελί Α1 γράψε = και στη συνέχεια επίλεξε όλη τη στήλη F7:F25 (και όχι μόνο το κελί F7) και πάτα Enter. Τώρα στο κελί Α1 έχεις ένα τύπο σαν αυτόν:

    =[book1.xls]Φύλλο1!$F$7:$F$25
    

    Ο σύνδεσμος για την ώρα επιστρέφει το λάθος #ΤΙΜΗ!, μην ανησυχείς αυτό είναι πρόσκαιρο. Επίλεξε όλη τη στήλη Α1:Α19, πάτα F2 και αμέσως μετά πάτα (μαζί) τα πλήκτρα Ctrl, Shift και Enter. Θα δεις να δημιουργούνται όλες οι ζητούμενες συνδέσεις και ο τύπος μπαίνει μέσα σε αγκύλες.

    {=[book1.xls]Φύλλο1!$F$7:$F$25}
    

    Κάθε μέθοδος έχει πλεονεκτήματα και μειονεκτήματα, δουλεύουν όμως. Με την δεύτερη μέθοδο μπορείς να δημιουργείς μαζικά συνδέσμους, κάνοντας αντιμετάθεση στηλών σε γραμμές ή αντίθετα και ορθογώνιων ν*μ περιοχών σε περιοχές μ*ν. Παράδειγμα, για τα δεδομένα της στήλης F7:F25 του book1, να φτιάξεις συνδέσμους στην γραμμή A1:S1. Όπως προηγούμενα, δημιουργείς σύνδεσμο στο κελί Α1 για όλη την στήλη F7:F25

    =[book1.xls]Φύλλο1!$F$7:$F$25
    

    Τροποποίησε τον τύπο αυτό έτσι:
    =TRANSPOSE([book1.xls]Φύλλο1!$F$7:$F$25)
    Επίλεξε τα κελιά A1:S1
    Πάτα F2
    Πάτα Ctrl+Shift+Enter
    Είσαι έτοιμος.
    Για τις Ctrl+Shift+Enter συναρτήσεις, δες μερικές ακόμα χρήσιμες λεπτομέρειες στο σχετικό άρθρο του ιστολογίου.
    Και ένα ακόμα παράδειγμα μονό και μόνο για επίδειξη των δυνατοτήτων που υπάρχουν. Την ορθογώνια περιοχή 6 γραμμών και 3 στηλών, F7:H12 του book1 να την διασυνδέσεις σε μία ορθογώνια περιοχή 3 γραμμών και 6 στηλών του βιβλίου final, αλλά γραμμές και στήλες να έρχονται από το τέλος προς την αρχή.
    Σε ένα κελί του final γράψε τον τύπο:

    =INDEX([book1.xls]Φύλλο1!$F$7:$H$12;7-COLUMN(INDIRECT("A:F"));4-ROW(INDIRECT("1:3")))
    

    Επίλεξε, ξεκινώντας από το κελί αυτό δεξιά και κάτω, μια περιοχή 3 γραμμών και 6 στηλών, πάτα F2 και μετά πάτα Ctrl+Shift+Enter.

  300. Ο/Η Paul λέει:

    …!!!!!!! Δεν έχω λόγια, μόνο θαυμαστικά!!!

    Ευχαριστώ πολύ! Νομίζω πρέπει να σε προλάβει η Microsoft για τεχνική υποστήριξη πελατών! Να είσαι καλά! :)

  301. Ο/Η Δημήτρης λέει:

    Φίλε Γιάννη καλησπέρα,
    Γνωρίζοντας τη βαθειά σου γνώση και την πολύχρονη εμπειρία σου στο Excel Θα ήθελα τη βοήθειά σου σε ένα θέμα που με απασχολεί. Θέλω να δημιουργήσω ένας είδος « κωδικοποιημένης γλώσσας» η οποία θα αποτελείται από κάποιους χαρακτήρες. Ας υποθέσουμε ότι τα γράμματα του λατινικού αλφάβητου αντιστοιχούν σε κάποιους αριθμούς ή χαρακτήρες . Έτσι, το a αντιστοιχεί στο 1 το b στο 2 κ.ο. κ. Εισάγοντας σε κελί της στήλης Α τη συνάρτηση IF με σύνταξη της μορφής: IF(b1=”a”;”1”;IF(b1=”b”;”2” ……)) και στη συνέχεια αντιγράφοντας τον τύπο κατακόρυφα και πληκτρολογώντας στη στήλη Β τα αντίστοιχα γράμματα θα είχα τα επιθυμητό αποτέλεσμα. Αυτό θα μπορούσε να γίνει και με κάποια άλλη διαδικασία;
    Πως θα μπορούσα να επεκτείνω αυτή τη δυνατότητα και πληκτρολογώντας κάποιο κείμενο να μου το μετατρέπει σε κωδικοποιημένη μορφή ή το αντίστροφο; Μπορεί να γίνει κάτι τέτοιο με τη μορφή Μακροεντολής ή χρήση κώδικα VBA;
    Ευχαριστώ εκ των προτέρων!!

  302. Ο/Η vioannis λέει:

    Υπάρχει ήδη στο ιστολόγιο μια συνάρτηση που κάνει ακριβώς αυτό που ζητά. Είναι η vba συνάρτηση για excel: Function transfer που βρίσκεται στο τέλος της σελίδας “Μετατροπή Ελληνικών σε γκρίκλις”. Στη συνάρτηση αυτή η αντιστοιχία μεταξύ των χαρακτήρων που θα μετατρέπονται δίνεται από δύο στήλες ή γραμμές σε ένα φύλλο.
    Η αμέσως προηγούμενη vba συνάρτηση για excel: Function Greeklish κάνει ακριβώς το ίδιο με αντιστοιχίες που δίνονται μέσα στον κώδικα της συνάρτησης. Άλλαξε: (α) το όνομα της συνάρτησης από Greeklish σε όποιο σου αρέσει (κάνε αλλαγή της λέξης Greeklish και τις δύο φορές που εμφανίζεται στον κώδικα) (β) τα γράμματα(χαρακτήρες) στους πίνακες inchar και exchar. Ο πίνακας inchar περιέχει τους χαρακτήρες που θα αντικατασταθούν και ο exchar αυτούς που θα τους αντικαταστήσουν. Πρόσεχε μόνο όσους χαρακτήρες έχει ο inchar τόσους ακριβώς να έχει και ο exchar και να βρίσκονται σε αντιστοιχία. Για να επαναφέρεις το κείμενο στην αρχική μορφή, απλώς εναλλάσσεις τους πίνακες στην ίδια συνάρτηση ή έχεις μια άλλη συνάρτηση με άλλο όνομα και εναλλαγμένους τους πίνακες inchar και exchar και κατά τα άλλα ακριβώς ίδιες. Αν κάτι δεν δουλέψει, επανέρχεσαι.

  303. Ο/Η Ειρήνη λέει:

    Καλησπέρα,η απορία μου σχετικά με το excel είναι η εξής:
    Έχω ένα ερωτηματολόγιο και θέλω τις απαντήσεις της κάθε ερώτησης να τις κάνω σε μορφή ποσοστών αλλά δυστυχώς δεν μπορώ να τα καταφέρω.Να σημειώσω ότι οι απαντήσεις δεν είναι αριθμητικά αποτελέσματα.Κι αυτό είναι που με δυσκολεύει περισσότερο.Ευχαριστώ!

  304. Ο/Η vioannis λέει:

    Αγαπητή Ειρήνη το ερώτημά σου είναι πολύ γενικό. Αν οι (πολλές;) απαντήσεις που έχεις είναι τυποποιημένες δες αν μπορούν να καταμετρηθούν από τη συνάρτηση φύλλου COUNTIF ή την COUNTIFS.

  305. Ο/Η Ειρήνη λέει:

    Καλημέρα,ευχαριστώ για την απάντηση αρχικά και για να γίνω πιο συγκεκριμένη,για παράδειγμα έχω ερωτήσεις που οι απαντήσεις τους είναι ναι ή όχι και ερωτήσεις με συγκεκριμένες επιλογές απάντησης αλλά και ερωτήσεις ανοιχτού τύπου.Για όλους τους τύπους των απαντήσεων θα χρησιμοποιήσω την COUNTIFΕυχαριστώ πολύ και πάλι!

  306. Ο/Η vioannis λέει:

    Ειρήνη, με την COUNTIF μπορείς να μετρήσεις τυποποιημένες μόνο απαντήσεις όπως ΝΑΙ ΟΧΙ και με την προϋπόθεση ότι έχουν απαντηθεί με τους ίδιους χαρακτήρες, Αν υπάρχουν απαντήσεις ΝΑΙ –ελληνικοί χαρακτήρες και ΝΑΙ- αγγλικοί χαρακτήρες αρχίζουν προβλήματα. Για τα προβλήματα αυτά κατά κανόνα φροντίζει αυτός που συντάσσει αρχικά το ερωτηματολόγιο. Μετά είναι δύσκολο να συμμαζευτεί η ποικιλία των απαντήσεων.

  307. Ο/Η pantelis λέει:

    Καλημερα κύριε Γιάννη, θα ήθελα και εγώ την βοήθεια σας.Σε ένα parking κρατάμε σε ένα excel τα αυτοκίνητα που έρχονται.Β Ημερομηνία C ώρα D αριθμός κυκλοφορίας E μάρκα F μοντέλο G χρώμα.θα ήθελα οταν ξαναερθει το ιδιο οχημα βάζοντας μόνο τον αριθμό κυκλοφορίας να συμπληρώνονται αυτόματα τα υπόλοιπα κελιά.

  308. Ο/Η vioannis λέει:

    Παντελή
    Πρώτα θα εισάγεις ένα όνομα για τη βάση των δεδομένων σου, το οποίο θα την παρακολουθεί δυναμικά:

    MyData =OFFSET(Φύλλο1!$D$1;0;0;COUNTA(Φύλλο1!$D:$D)-1;4)
    

    Στον τύπο του ονόματος θα αλλάξεις το “Φύλλο1” με αυτό που έχεις εσύ στο βιβλίο σου. Μετά θα πας στον επεξεργαστή της vba, και στη λειτουργική μονάδα του ίδιου φύλλου (και όχι σε ένα module) θα περάσεις τον παρακάτω κώδικα.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim kelia As Range
    Dim keli As Range
    Dim CountaColumnD As Long
    CountaColumnD = Application.WorksheetFunction.CountA(Range("D:D"))
    Set kelia = Range("D" & CountaColumnD & ":D50000")
    Set keli = Intersect(Target, kelia)
    If Not keli Is Nothing Then
    If Not IsEmpty(keli) Then
    keli.Item(1, -1) = VBA.Date
    keli.Item(1, 0) = VBA.Time
    On Error GoTo telos
    keli.Item(1, 2) = MyVlookup(keli.Value, 2)
    keli.Item(1, 3) = MyVlookup(keli.Value, 3)
    keli.Item(1, 4) = MyVlookup(keli.Value, 4)
    End If
    End If
    telos:
    End Sub
    
    Private Function MyVlookup(lookup_value As String, col_index_num As Integer) As String
    MyVlookup = Application.WorksheetFunction.VLOOKUP(lookup_value, Range("MyData"), col_index_num, False)
    End Function
    

    Κάθε φορά που θα εισάγεις έναν νέο αριθμό πινακίδας σε κελί της στη στήλη D, στα κελιά της ίδιας γραμμής θα εισάγονται: Στη στήλη Β η ημερομηνία, στη στήλη C η ώρα, στη στήλη Ε η μάρκα, στη στήλη F το μοντέλο και στη στήλη G το χρώμα. Αν η πινακίδα εμφανίζεται για πρώτη φορά και δεν υπάρχουν δεδομένα για αυτή, τα κελιά στις στήλες E, F, G, θα παραμείνουν κενά για να τα συμπληρώσεις με τα χέρι. Την επόμενη φορά που θα εμφανιστεί το αυτοκίνητο, η vlookup που συμμετέχει στον κώδικα, θα αναλάβει την αυτόματη συμπλήρωση. Σημειώνω ότι η δράση του κώδικα αρχίζει από το πρώτο κενό κελί της στήλης D και επεκτείνεται έως το κελί D50000. Φυσικά αυτό το επεκτείνεις όσο οι δουλειές πάνε καλά!. Ο κώδικας δεν δρα σε ήδη περασμένες εγγραφές, γιατί φαντάζομαι ένα πολύ σημαντικό στοιχείο της βάσης είναι η ημερομηνία και ή ώρα και δεν πρέπει να μεταβάλλονται σε ήδη περασμένες στη βάση εγγραφές. Αν η σκέψη μου είναι λάθος και θέλεις ο κώδικας να ενεργοποιείται σε κάθε αλλαγή οποιοδήποτε κελιού, στη στήλη D των πινακίδων, τότε άλλαξε την παρακάτω γραμμή του κώδικα

    Set kelia = Range("D" & CountaColumnD & ":D50000")
    

    Έτσι:

    Set kelia = Range("D:D50000")
    

    Δες ένα παράδειγμα στο βιβλίο parkingexample.xls

  309. Ο/Η dimos λέει:

    πολυ καλό το μπλοκ Γιάννη. Εψαχνα πάντου για τέτοιες απαντήσεις.
    Εχω ένα βιβλίο με 10 φύλλα .
    Θέλω απο το κάθε φύλλο να επιλέγω τυχαία απο 1 εως 20 ερωτήσεις και αυτές να αντιγράφονται
    στο φύλλο 11,12 κ.ο.κ.

  310. Ο/Η vioannis λέει:

    Δήμο, χρειάζομαι μερικές διευκρινίσεις: (1) Το πλήθος ν των ερωτήσεων (1-20) το αποφασίζει κάθε φορά ο χρήστης είναι τυχαία επιλογή; (2) το πλήθος αυτό ν θα είναι το ίδιο για όλα τα φύλλα 11,12,13 κλπ ή διαφορετικό για το καθένα; (3) Οι τυχαίες ν ερωτήσεις του φύλλου 11 θα προέρχονται όλες από το φύλλο1 και όμοια του φύλλου 12 από το φύλλο2 κλπ σε αντιστοιχία ή κάτι άλλο; (4) Τα φύλλα 11, 12 ,13 κλπ προϋπάρχουν στο βιβλίο ή θα δημιουργούνται αυτόματα από τη μάκροεντολή; Αν προϋπάρχουν και έχουν ήδη περιεχόμενο τι θα γίνει με το περιεχόμενο αυτό; (5) Οι ερωτήσεις στα φύλλα 1-10 που βρίσκονται, σε ποια στήλη; Πόσες είναι σε κάθε φύλλο; Αν ο αριθμός τους μεταβάλλεται ποιο είναι το πιθανό μέγιστο πλήθος; Και το σπουδαιότερο: Κάθε ερώτηση είναι σε ένα κελί; Αν όχι καμιά μάκρο δεν μπορεί να αποφασίσει αν το περιεχόμενο ενός κελιού αποτελεί ολοκληρωμένη πρόταση ή όχι

  311. Ο/Η dimos mpoy λέει:

    Γιάννη καλησπέρα

    Καταρχήν συγγνώμη για την καθυστέρηση, θα ήθελα επίσης να σου πω ότι το
    νούμερο 20 το έδωσα στο περίπου. Θα ήθελα επίσης να με συγχωρήσεις που δεν
    ήμουν πιο συγκεκριμένος. Τωρα οσο αφορα τις διευκρινησεις:

    1 και 2)το πλήθος των ερωτήσεων είναι συγκεκριμένο στο 1 φύλλο από 36
    ερωτήσεις θέλουμε να επιλέξουμε 18 από το 2 φύλλο θέλουμε από 36 ερωτήσεις
    να επιλέξουμε και τις36 από το 3 φύλλο θέλουμε από 75 ερωτήσεις τις 26,
    από 4 φύλλο… σου παραθέτω τον παρακάτω πίνακα γα μην γίνομαι παραπάνω
    κουραστικός.

    επιλογή από Ερωτήσεις

    Φύλλο 1 18 36

    Φύλλο 2 36 36

    Φύλλο 3 26 75

    Φύλλο 4 12 84

    Φύλλο 5 1 12

    Φύλλο 6 2 19

    Φύλλο 7 3 14

    Φύλλο 8 2 21

    3 και 4) αυτό που με ενδιαφέρει να βγαίνουν και σε ένα φύλλο (πχ φύλλο 9)
    όλες μαζί αλλά με την σειρά. Αυτό το φύλλο θα το αδειάζω εγώ κάθε φορά πριν
    από την επόμενη κλήρωση..

    5) Σου στέλνω ένα excel σαν παράδειγμα στο τέλος.

    6) η ερώτηση είναι σε ένα κελί αλλά από κάτω ακλουθούν οι απαντησεις οι
    οποες επιλέγονται με ένα χ.

    Σε ευχαριστώ και μόνο που ασχολήθηκες με το πρόβλημα μου.

    ΕΡΩΤΗΣΗ

    ΑΠΑΝΤΗΣΗ

    *1*

    *Τι ονοµάζεται θερµοκρασία *

    *X*

    *2*

    *Ποια είναι η ταχύτητα*

    *X*

    *3*

    *Επιλέξτε ποιοι από τους παρακάτω είναι*

    *X*

    *X*

    *X*

    *X*

  312. Ο/Η vioannis λέει:

    Δήμο,
    Στο excel βιβλίο SheetWithRandomQuestions.xls θα βρεις μία λύση που προσεγγίζει όσο καλύτερα μπορούσα το θέμα σου. Στη σελίδα “Επιλογές” του βιβλίου υπάρχει ένας πίνακας όπου προετοιμάζεις την εργασία σου. Παράδειγμα, στα κελιά της πρώτης σειράς του πίνακα γράφεις ότι από το φύλλο1, θέλεις να μεταφερθούν στο φύλλο11, 25 τυχαίες ερωτήσεις. Καλείς την μακροεντολη (πατάς το πλήκτρο), εμφανίζεται το πλαίσιο εισαγωγής, επιλέγεις τα κελία Ε5:G5, θα δεις στο πλαίσιο να γράφεται αυτόματα =$E$5:$G$5 και πατάς Ok. Στο φύλλο11 θα μεταφερθούν 25 τυχαίες ερωτήσεις (για την ακρίβεια, ενότητες, ερωτήσεις με τις απαντήσεις τους) από το Φύλλο1.Αν το αρχικό φύλλο δεν υπάρχει, η μάκρο, δεν θα εκτελεστεί. Αν το παράγωγο φύλλο δεν υπάρχει, θα το δημιουργήσει η μάκρο, ενώ αν υπάρχει η μάκρο θα διαγράψει το προηγούμενο περιεχόμενό του. Για να λειτουργήσουν όμως όλα αυτά, πρέπει απαραίτητα η δομή των αρχικών φύλλων να είναι απόλυτα τυποποιημένη. Σε κάθε αρχικό φύλλο, οι ενότητες ξεκινούν από το κελί Α4 με πρώτη γραμμή κενή, δεύτερη την ερώτηση και αμέσως ακολουθούν οι απαντήσεις χωρίς κενές γραμμές. Επόμενη ενότητα: κενή γραμμή, ερώτηση, απαντήσεις κλπ. Κατέβασε το βιβλίο και δες όλα αυτά σε λειτουργία όπως και τον κώδικα, ο οποίος είναι αρκετές γραμμές και κάνει πολλές ενέργειες στο παρασκήνιο. Σημειώνω ότι όλες οι ερωτήσεις-ενότητες μεταφέρονται στο παράγωγο φύλλο με τις μορφοποιήσεις του αρχικού φύλλου

  313. Ο/Η Nektarios λέει:

    Για σου φίλε μου

    Θέλω σε ένα κελί να μπορώ να βάλω πάνω από μια επιλογές και ανάλογα την περίπτωση να επιλεγώ όποια θέλω.
    Π.χ ALE
    ELI
    H/O
    Να μπουν σε ένα κελί και να έχω την επιλογή να βάλω όποιο θέλω.

    Ευχαριστώ πολύ

  314. Ο/Η vioannis λέει:

    Νεκτάριε, αυτό γίνεται με επικύρωση δεδομένων από λίστα. Το έχω περιγράψει εδώ (η πρώτη παράγραφος)

  315. Ο/Η dimos λέει:

    Γιάννη το αποτέλεσμα ειναι καταπληκτικό
    Σε ευχαριστώ πάρα πολύ

  316. Ο/Η Στράτος Πάτσης λέει:

    Καλησπέρα Γιάννη,
    μια βοήθεια σχετικά με τις συναρτήσεις-πίνακες. Από το άρθρο σου που περιέχει το παράδειγμα της συνάρτησης LARGE, όταν επιλέγω τρία οριζόντια κελιά για την επιστροφή των τριών διαδοχικά μεγαλύτερων τιμών ενός πίνακα με φθίνουσα σειρά (πατώντας Ctrl+Shift+Enter), ενώ βλέπω στο πρώτο κελί που περιέχει τη συνάρτηση (πατώντας F2 και F9) τις τρεις ορθές τιμές, στα γειτονικά δύο κελιά επαναλαμβάνεται η τιμή του πρώτου κελιού και όχι οι δύο επόμενες. Τι κάνω λάθος;

  317. Ο/Η vioannis λέει:

    Μάλλον δεν κάνεις λάθος Στράτο. Στους διαχωριστές σταθερών πινάκων. για το excel σε ελληνικό περιβάλλον, υπάρχει μια μικρή ασυνέπεια στις διάφορες εκδόσεις του excel. Δοκίμασε να εισάγεις τον τύπο οριζόντια όπως τον περιγράφω στο σημείωμα για κάθετα, (ναι σωστά το λέω) και πες μου αν όλα πήγαν καλά. Έχω γράψει σχετικά με το θέμα των σταθερών διαχωριστών εδώ. Κάνε το τεστ που περιγράφω εκεί για να δεις ποιους διαχωριστές έχεις και πες μου σχετικά. Να ξέρεις πάντως πως από τη στιγμή που θα δεις τους τύπους να δουλεύουν στο βιβλίο σου, τότε θα δουλεύουν σε οποιοδήποτε excel και να το ανοίξεις. Μπορεί να υπάρχει διαφορετικός τρόπος γραφής (εισαγωγής) των τύπων αυτών, αλλά δεν υπάρχει κανένα πρόβλημα συμβατότητας.

  318. Ο/Η Στράτος Πάτσης λέει:

    Γιάννη,
    Είναι όπως ακριβώς το γράφεις. Αντίστροφα. Για μια περιοχή 6 κελιών (Α1:Β3), κάνοντας το τεστ που περιγράφεις για την εύρεση των σταθερών διαχωριστών, βλέπω ={0;0;0}.
    Σε ευχαριστώ για την άμεση και κατατοπιστικότατη απάντηση.

  319. Ο/Η Anton λέει:

    Καταρχήν συγχαρητήρια.
    Το θέμα μου είναι ότι θέλω σε ένα κελί, οι χρήστες να μπορούν να προσθέτουν την προσωπική τους υπογραφή (πχ μια εικόνα που έχουν τα στοιχεία τους). Κάνοντας κλικ στο κελί και εισάγοντας ο καθένας το προσωπικό του συνθηματικό να τους εισάγει την αντίστοιχη υπογραφή. Ευχαριστώ όπως και να χει

  320. Ο/Η vioannis λέει:

    Η απάντηση στο τεχνικό μέρος της ερώτησης σου δεν είναι δύσκολη. Για την ακρίβεια υπάρχει ήδη στο ιστολόγιο. Στο σημείωμα “Εικονογραφημένη επικύρωση” θα βρεις ένα excel βιβλίο, το illustrated_validation, όπου ο χρήστης επιλέγοντας ένα όνομα από μία πτυσσόμενη λίστα, εμφανίζει τη κατάλληλη εικόνα. Κατέβασέ το και δες πως δουλεύει. Δεν περιέχει μακροεντολές, μόνο συναρτήσεις φύλλου. Το κύριο πρόβλημα όμως στο ερώτημά σου είναι άλλο, και κρύβεται στη λέξη “συνθηματικό”. Ο κάθε χρήστης, υποθέτω, πρέπει να έχει πρόσβαση στον δικό του κωδικό και μόνο σε αυτόν. Αυτό δεν εξασφαλίζεται, για πληροφορίες που υπάρχουν γραμμένες σε ένα βιβλίο. Κάπου μέσα στο βιβλίο πρέπει να αποθηκεύσεις και να κρύψεις τους κωδικούς και τις αντιστοιχίες τους με τις εικόνες. Όποιο τρόπο και να φανταστείς για να κρύψεις τις πληροφορίες αυτές, για ένα λίγο προχωρημένο χρήστη θα είναι εύκολο να τις βρει και να τις αποκαλύψει. Παράδειγμα στο παραπάνω βιβλίο. Πρώτα διάγραψε τα ονόματα των αθλημάτων στη στήλη Α του φύλλου2. Τα ονόματα είναι τα αντίστοιχα των συνθηματικών – κωδικών για σένα. Έτσι δεν θα φαίνονται στο πτυσσόμενο πλαίσιο στο κελί Α1 του φύλλου1. Μην ανησυχείς όλα θα εξακολουθήσουν να δουλεύουν, γράψε χειριστικά ένα άθλημα πχ Τοξοβολία και η εικόνα θα εμφανιστεί. Δεν τελειώσαμε. Τα αθλήματα (συνθηματικά) και οι αντιστοιχίες τους, υπάρχουν και σαν καθορισμένα ονόματα στο φύλλο. Πήγαινε στο μενού “Τύποι- Διαχείριση Ονομάτων” να τα δεις. Εκεί δεν μπορείς να τα διαγράψεις γιατί αν τα διαγράψεις δεν θα δουλεύει το βιβλίο. Αλλά μπορείς να τα κρύψεις με τη βοήθεια της vba. Πέρασε την παρακάτω μάκρο στο personal βιβλίο σου και τρέξε την, μέσα από το βιβλίο που συζητάμε (το illustrated_validation).

    Sub MakeNamesHidden()
    Dim myName As Name
    For Each myName In ActiveWorkbook.Names
    myName.Visible = False
    Next myName
    End Sub
    

    Μετά το τρέξιμο της μάκρο, όλα τα ονόματα στο βιβλίο δείχνουν να μην υπάρχουν, αλλά είναι εκεί, απόδειξη είναι το βιβλίο, που εξακολουθεί να δουλεύει. Τώρα όλες οι καταγραφές συνθηματικών δεν φαίνονται, και όλα δείχνουν ρόδινα, αλλά δεν είναι. Ένας λίγο προχωρημένος χρήστης της vba που θα υποπτευθεί την ύπαρξη κρυφών ονομάτων, θα τρέξει την ίδια μάκρο αλλάζοντας το False σε True, και τα καθορισμένα ονόματα θα εμφανιστούν ξανά.
    Πέρα από αυτή τη λύση δίνω και την παρακάτω η οποία είναι λύση με vba, με την προϋπόθεση ότι αφού γράψεις, θα κλειδώσεις τον κώδικα με ένα κωδικό πρόσβασης. Το κλείδωμα του κώδικα δείχνει πιο αποτελεσματικό και αποτρέπει τους περισσότερους χρήστες στην προσπέλαση του κώδικα. Δεν θα αντέξει όμως στα βοηθήματα για ξεκλείδωμα που κυκλοφορούν στο δίκτυο. Η διαφορά με το βιβλίο illustrated_validation, είναι ότι οι κωδικοί και οι αντιστοιχίες στις εικόνες τους είναι μέσα στον κώδικα.

    Sub ShowHiddenPicture()
    Dim myPict As Picture
    Dim Varr As Variant
    Dim myCode As String
    Dim j As Integer
    Dim keli As Range
    ActiveSheet.Pictures.Visible = False
    myCode = ActiveSheet.Range("C2").Value
    Set keli = ActiveSheet.Range("C5")
    Varr = Array("CODE1", "Pict1", "CODE2", "Pict2", "CODE3", "Pict3", _
        "CODE4", "Pict4", "CODE5", "Pict5", "CODE6", "Pict6", "CODE7", _
        "Pict7", "CODE8", "Pict8", "CODE9", "Pict9", "CODE10", "Pict10", _
        "CODE11", "Pict11", "CODE12", "Pict12")
    For j = 0 To UBound(Varr)
        If j = UBound(Varr) Then MsgBox "Μή αποδεκτός κωδικός": Exit For
        If Varr(j) = myCode Then
            For Each myPict In ActiveSheet.Pictures
                If myPict.Name = Varr(j + 1) Then
                    myPict.Visible = True
                    myPict.Top = keli.Top
                    myPict.Left = keli.Left
                End If
            Next myPict
            Exit For
        End If
    Next j
    End Sub
    

    Εισήγαγε μία- μία τις εικόνες στο φύλλο που θα εμφανίζονται. Δεν έχει σημασία σε ποιά θέση του φύλλου. Φρόντισε κάθε εικόνα να έχει ένα μοναδικό τίτλο. Ο τίτλος (όνομα της εικόνας) αλλάζει αν θες, καθώς την επιλέγεις, αριστερά στη γραμμή των τύπων. Όταν θα τρέξεις για πρώτη φορά τη μάκρο, η εικόνες θα εξαφανιστούν, θα κρυφτούν. Η εισαγωγή των κωδικών γίνεται στο κελί C2 και η εμφάνιση της επιλεγμένης εικόνας ξεκινά από πάνω αριστερά στο κελί C5. Αυτά τα αλλάζεις στον κώδικα κατά τις ανάγκες σου. Στον κώδικα, ο πίνακας Varr = Array (…) περιέχει όλους τους κωδικούς και αμέσως μετά την εικόνα στην οποία αντιστοιχεί ο καθένας. Ο κωδικός CODE1 αντιστοιχεί στην εικόνα Pict1, ο κωδικός CODE2 αντιστοιχεί στην εικόνα Pict2 κλπ. Εδώ φυσικά απαιτείται τροποποίηση με τις δικές σου αντιστοιχίες κωδικών – συνθηματικών και εικόνων. Μόλις ο χρήστης εισάγει τον κωδικό του στο κελί C2, πατά το πλήκτρο και η εικόνα που αντιστοιχεί στον κωδικό, θα εμφανιστεί. Δες το παράδειγμα σε δράση στο excel βιβλίο: ShowHiddenPicture. Εδώ βέβαια, ο vba κώδικας δεν είναι κλειδωμένος, εσύ στο βιβλίο σου πρέπει να τον κλειδώσεις.

  321. Ο/Η Φώτης Κ. λέει:

    Καλημέρα και συγχαρητήρια για την δουλεία που κάνετε και απο εμένα κ. Βαρλάμη! Αν μπορείτε να πείτε και σε μένα μια ιδέα για ένα προβληματάκι που θα με βοηθούσατε πολύ!!! Έχω κάνει ένα πρότυπο excel που έχει μέσα έναν πίνακα με τροφές και τα στοιχεία τους. Εάν θέλω να τον ενημερώνω με νέα τρόφιμα διαρκώς πως θα γίνει να ανανεώνονται και τα υπόλοιπα φύλλα που έχω κατα καιρούς αποθηκεύσει;
    Ευχαριστώ εκ τον προτέρων για τον χρόνο σας…

  322. Ο/Η Anton λέει:

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

  323. Ο/Η vioannis λέει:

    Anton, χαίρομαι που καλύφτηκες. Σε αυτό εδώ το ιστολόγιο δεν δημιουργούνται υποχρεώσεις, να αισθάνεσαι άνετα. Απαντάω αναλυτικά όταν το θέμα δεν είναι τετριμμένο και εκτιμώ ότι θα ενδιαφέρει και άλλους επισκέπτες του ιστολογίου, και φυσικά όταν έχω κάτι να πω, γιατί δεν είμαι παντογνώστης, απλά βάζω τα δυνατά μου.

  324. Ο/Η vioannis λέει:

    Φώτη ευχαρίστως, αλλά δεν περιγράφεις πως συνδέονται τα άλλα φύλλα (ή μήπως εννοείς άλλα βιβλία) με τον πίνακα του προτύπου. Με συνδέσεις; με συναρτήσεις που αναφέρονται στον πίνακα; περιέχουν pivots ή γραφήματα που φτιάχτηκαν από τον πίνακα; Και όταν λες πρότυπο κυριολεκτείς; δηλαδή είναι ένα βιβλίο .xlt ή .xltx ή .xltm. Γίνε πιο αναλυτικός και θα βρεθεί λύση. Πες μου και πια έκδοση excel χρησιμοποιείς.

  325. Ο/Η Φώτης Κ. λέει:

    Δίκιο έχετε έπρεπε να γίνω πιο σαφής!!! Λοιπόν, έκανα ένα βιβλίο πρότυπο .xltx όπου φτιάχνω διαιτολόγια και μέσα εκεί έχω πίνακα τροφίμων, οπότε κάθε φορά που πατάω αποθήκευση δημιουργείται ένα καινούργιο βιβλίο που το αποθηκεύω στο φάκελο του πελάτη και επεξεργάζομαι τα δεδομένα του. Το πρόβλημα μου βασικά είναι η σύνδεση των καινούργιων βιβλίων που δημιουργώ με το πρότυπο, αυτή δεν ξέρω πως γίνεται. Θα ήθελα αλλάζοντας τον πίνακα που έχω μέσα στο πρότυπο (προσθέτοντας πχ νέο τρόφιμο στον πίνακα) να αλλάζουν και οι πίνακες των καινούργιων βιβλίων έχω αποθηκεύσει μέσα στους φακέλους των πελατών.
    Ευχαριστώ…!!!

  326. Ο/Η vioannis λέει:

    Φώτη, μεταξύ του προτύπου και των βιβλίων που δημιουργούνται από αυτό, δεν δημιουργείται καμία διασύνδεση, και έτσι δεν υπάρχει τρόπος ενημέρωσης των βιβλίων, όταν κάτι αλλάξει στο πρότυπο. Υπάρχει βέβαια η λύση των μακροεντολών. Μια λογική είναι: Όταν κάνεις νέες εγγραφές στο πρότυπο, να καλείς μία ρουτίνα η οποία θα ανοίγει ένα-ένα όλα τα βιβλία που έχουν φτιαχτεί από αυτό, και θα ενημερώνει και αυτά. Πρακτικά, για να δουλέψει αυτή η τεχνική, πρέπει όλα τα αντίγραφα, και μόνο αυτά, να διατηρούνται σε ένα φάκελο. Μία άλλη λογική είναι: Κάθε φορά που ανοίγεις το βιβλίο ενός πελάτη να καλείς μια μάκρο η οποία θα ανοίγει το πρότυπο, θα τα συγκρίνει και αν βρίσκει διαφορές, τότε το πρότυπο θα ενημερώνει το βιβλίο του πελάτη, και στη συνέχεια θα κλείνει το πρότυπο. Η δουλειά θα γίνεται στο παρασκήνιο, εσύ θα δεις μόνο τις αλλαγές στο βιβλίο του πελάτη. Η σύγκριση θα αφορά συγκεκριμένη και σαφώς ορισμένη περιοχή και στα δύο βιβλία. Η μακροεντολή θα φιλοξενείται στο personal βιβλίο σου και έτσι και το πρότυπο και τα βιβλία πελατών δεν θα περιέχουν μακροεντολές. Θα σου στείλω (την Δευτέρα ίσως) παράδειγμα κώδικα, για να δεις πως δουλεύει.

  327. Ο/Η vioannis λέει:

    Φώτη, επανέρχομαι με μία μακροεντολή που κάνει ανανέωση των δεδομένων ενός βιβλίου που δημιουργήθηκε από ένα πρότυπο, αν εν τω μεταξύ έχουν γίνει αλλαγές στο πρότυπο και θέλεις οι αλλαγές αυτές να περάσουν και στο βιβλίο.
    Πρώτα κάνεις τις αλλαγές στο πρότυπο και το αποθηκεύεις και το κλίνεις . Στη συνέχεια ανοίγεις το βιβλίο, καλείς τη μάκρο, την οποία έχεις αποθηκευμένη στο personal βιβλίο σου, και αμέσως το βιβλίο ανανεώνει τα δεδομένα στις περιοχές που θέλεις (μεμονωμένα κελιά, στήλες, γραμμές, ορθογώνιες περιοχές) τις οποίες έχεις ορίσει μέσα στη μάκρο. Ο ορισμός γίνεται στη γραμμή του κώδικα

    Set checRange = Union(Range("A1:C100"), Range("E5:G20"), Range("E1"))
    

    Στο παράδειγμα έχω βάλει 3 περιοχές: A1:C100, E5:G20 και E1
    Η μάκρο θα δράσει μόνο σε αυτές και θα μεταφέρει από το πρότυπο προς το βιβλίο, ότι περιέχουν τα κελιά μαζί με τις μορφοποιήσεις τους ή τυχόν επικυρώσεις. Η συνάρτηση δρά από το ενεργό φύλλο του προτύπου (δηλαδή το φύλλο που ήταν ανοιχτό την στιγμή της αποθήκευσης) προς το ενεργό (ανοιχτό) φύλλο του βιβλίου. Επίσης πρέπει να αλλάξεις στον κώδικα το όνομα του προτύπου και την διαδρομή που βρίσκεται το πρότυπο στον δικό σου δίσκο. Δηλαδή θα προσαρμόσεις τις γραμμές :

    templName = "TemplateTest.xltx"
    templPath = "C:\Users\User\AppData\Roaming\Microsoft\Πρότυπα\"
    

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

    ———–

    Sub RefreshTemplateCopy()
    
    Dim actBook As Workbook
    Dim actSh As String
    
    Dim templBook As Workbook
    Dim templPath As String
    Dim templName As String
    
    Dim checRange  As Range
    Dim UnionElement As Range
    Dim addressElement As String
    
    Application.ScreenUpdating = False
    
    templName = "TemplateTest.xltx"
    templPath = "C:\Users\User\AppData\Roaming\Microsoft\Πρότυπα\"
    
    Set actBook = ActiveWorkbook
    actSh = ActiveSheet.Name
    
    On Error Resume Next
    Set templBook = Workbooks(templName)
    On Error GoTo 0
    If templBook Is Nothing Then
    
    Workbooks.Open filename:=templPath & templName, Editable:=True
    Set templBook = ActiveWorkbook
    
    Set checRange = Union(Range("A1:C100"), Range("E5:G20"), Range("E1"))
    For Each UnionElement In checRange.Areas
    addressElement = UnionElement.Address
    templBook.ActiveSheet.Range(addressElement).Copy _
        Destination:=actBook.Worksheets(actSh).Range(addressElement)
    Next UnionElement
    Else
    MsgBox "Το πρότυπο είναι ανοιχτό! Κλείσε και αν χρειάζεται σώσε"
    GoTo telos
    End If
    Application.DisplayAlerts = False
    Workbooks(templBook.Name).Close
    Application.DisplayAlerts = True
    telos:
    Application.ScreenUpdating = True
    End Sub
    
  328. Ο/Η Φώτης Κ. λέει:

    Σας ευχαριστώ πάρα πολύ για τον χρόνο και τον κόπο σας!!! Μόλις βρώ χρόνο θα τον δοκιμάσω και θα επανέλθω!!!

  329. Ο/Η Νίκος Καπουράλης λέει:

    Κύριε Βαρλάμη γεια σας.
    Σας ευχαριστώ για την βοήθεια που προσφέρετε στον κόσμο.
    Είμαι και ‘γω της ηλικίας σας. Έβαζα μάλιστα τα εξώφυλλα του «Μικρού Ήρωα» κάτω από λάμπες για να τα θαυμάζω καλύτερα!!!!! Και δεν ξεχνώ την γκρίνια της συγχωρεμένης της μάνας μου:’’ παρατάς τα βιβλία σου και διαβάζεις το περιοδικό’’. Ας είναι. Καλές και οι αναμνήσεις.
    Ήθελα να σας ρωτήσω, παρόλο που βλέπω αρκετά εξειδικευμένους να επικοινωνούν μαζί σας (εγώ έκανα κάποτε μόνο κάποια μαθήματα με την παλιά db) αν θα μπορούσα, πάντα υποβοηθούμενος, να φτιάξω ένα έγγραφο του Word το οποίο να περιέχει κείμενο που να συμπληρώνεται από κατακόρυφες αναδυόμενες λίστες του Excel. Ενδεχομένως να υπάρχουν έτοιμες ρουτίνες.
    Θα ήθελα να σας στείλω ένα διάγραμμα που έχω φτιάξει σε μορφή .jpg για να δείτε συγκεκριμένα τι εννοώ. Είναι δυνατόν???
    Ευχαριστώ και πάλι
    Με εκτίμηση
    Νίκος
    Αθήνα/Καλλιθέα

  330. Ο/Η vioannis λέει:

    Νίκο, βίοι παράλληλοι!! Τι μου θύμισες… Πατρίδα μας, λένε, είναι τα παιδικά μας χρόνια. Εγώ λέω, τα παιδικά μας καλοκαίρια. Καρπούζι, παραλία, πετονιά, και ο Σπίθας με τον Γιώργο και την Κατερίνα. Ας είναι, όπως λες κ’ εσύ.
    Νίκο το Word, έχει δικιά του αναπτυσσόμενη λίστα, δεν σε εξυπηρετεί; Δες λεπτομέρειες για αυτή στην παράγραφο “Εισαγωγή μιας αναπτυσσόμενης λίστας που περιορίζει τις διαθέσιμες επιλογές σε αυτές που ορίζετε” στη βοήθεια της Microsoft εδώ: http://office.microsoft.com/el-gr/word-help/HA010030746.aspx
    Αν οι πτυσσόμενες λίστες είναι πολύ μεγάλες και έχουν ήδη δημιουργηθεί στο excel, τότε μπορείς να εισάγεις το κελί του excel με την επικύρωση, σαν αντικείμενο στο word. Τα βήματα: Επιλέγεις το κελί στο excel και το αντιγράφεις. Πήγαινε στη θέση που θέλεις στο έγγραφο του word και από το κεντρικό μενού, επιλέγεις Επικόλληση, Ειδική επικόλληση και από τις επιλογές που εμφανίζονται επιλέγεις : “Φύλλο εργασίας του MO excel ως αντικειμένου” και “Επικόλληση σύνδεσης” και ΟΚ. Αυτό είναι όλο. Κάνοντας ο χρήστης διπλό κλικ στο σημείο της επικόλλησης, μεταφέρεται στο αντίστοιχο κελί του excel και κάνει την επιλογή του, η οποία άμεσα μεταφέρεται στο word. Αν το excel είναι κλειστό, το διπλό κλικ θα το ανοίξει. Φρόνιμο είναι τα δύο αρχεία word και excel να βρίσκονται και να διατηρούνται στον ίδιο φάκελο. Σημειώνω ότι η ειδική επικόλληση μεταφέρει και τις τυχόν μορφοποιήσεις που έχει το κελί του excel. Πες μου αν βοήθησα, τα ξαναλέμε.

  331. Ο/Η Νίκος Καπουράλης λέει:

    Κύριε Βαρλάμη καλημέρα σας.
    Ανεξάρτητα απο το αν καταφέρω να επιτύχω αυτό που προσπαθώ, θελω να σας ευχαριστήσω πάρα πολύ για την άμεση απάντησή σας.
    Θα το παλέψω και πιστεύω κάτι να κάνω.
    Θα ήθελα, αν υπάρχει τρόπος, να στείλω ένα μικρό αρχείο σε μορφή .jpg που δείχνει την δομή του εγγράφου για να βεβαιωθούμε ότι μηλάμε για το ίδιο πράγμα.
    Και πάλι ευχαριστώ.
    Να είστε καλά.
    Νίκος Καπουράλης

  332. Ο/Η Νίκος Γ. λέει:

    Αγαπητε Γιάννη καλημέρα.
    Κατ΄αρχάς συγχαρητήρια για το ιστολόγιο και για την όλη, αφιλοκερδή, προσπάθειά σου.
    Και πάμε τώρα στο πρόβλημα .. !!
    Εδώ και λίγο καιρό χρησιμοποιώ την συνάρτηση DATEDIF, προκειμένου να υπολογίζω χρονικά διαστήματα μεταξύ έναρξης και λήξης συμβάσεων εργασίας, καθώς και διαστήματα διακοπής εργασίας μεταξύ δύο διαδοχικών συμβάσεων.
    Στην αρχή χρησιμοποιούσα την DAYS360 ή την απλή αφαίρεση μεταξύ των ημερομηνιών, αλλά και οι δύο μέθοδοι είχαν αποκλείσεις.
    Χρησιμοποιόντας πλέον την DATEDIF, διαπίστωσα ότι σε ορισμένες περιπτώσεις, όταν χρησιμοποιώ την παράμετρο «md». επιστρέφει λανθασμένο αριθμό ημερών, από λίγο έως πάρα πολύ.
    Σου αναφέρω δύο ενδεικτικά παραδείγματα:
    α. Για τις ημερομηνίες από 31/01/1992 μέχρι 20/03/1993, εφαρμόζοντας τον τύπο:
    =DATEDIF(A36;B36;»y»)&»-«&DATEDIF(A36;B36;»ym»)&»-«&DATEDIF(A36;B36;»md»), παίρνω αποτέλεσμα : 1 έτος – 1 μήνα – 17 ημέρες, το οποίο είναι λάθος.
    β. Για τις ημερομηνίες από 31/03/2003 μέχρι 02/01/2004, εφαρμόζοντας τον ίδιο τύπο, παίρνω αποτέλεσμα : 0 έτη – 9 μήνες – 166 ημέρες !!!!!!!!!!!!.
    Τα ίδια βεβαίως αποτελέσματα παίρνω αν εφαρμόσω τον τύπο μεμονομένα τρείς φορές για «y», «ym» και «md» αντίστοιχα.
    Επειδή με προβλημάτισε πολύ, ειδικά η δεύτερη περίπτωση, πειραματίστικα ως εξής: άρχισα να αυξάνω κατά μία ημέρα την ημερομηνία 02/01/2004 και έτσι αυξανόταν κατά μία ημέρα και ο αριθμός των ημερών που μου έδινε η συνάρτηση, δηλ. για 03/01/2004 δίνει 167, για 04/01/2004 168, κ.λπ.
    Μέχρι όμως την 30/01/2004 που δίνει 194, διότι από κεί και πέρα δίνει σωστές μέρες, δηλ. με 31/01/2004 δίνει 0 ημέρες, με 01/02/2004 1 ημέρα κ.λπ.
    Μετά δοκίμασα το εξής: μετέφερα και τις δύο ημερομηνίες ένα χρόνο πίσω, δηλ. έγιναν, 31/03/2002 μέχρι 02/01/2003, και τότε η συνάρτηση δούλεψε κανονικά και έδωσε 1 έτος – 1 μήνα – 2 ημέρες. Το ίδιο έγινε όταν μείωσα ακόμα ένα χρόνο, δηλ, 31/03/2001 μέχρι 02/01/2002, πήρα πάλι το ίδιο αποτέλεσμα 1 – 1 – 2.
    Όταν όμως μείωσα άλλα δύο χρόνια και οι ημερομηνίες έγιναν 31/03/1999 μέχρι 02/01/2000, πήρα πάλι το αρχικό λανθασμένο αποτέλεσμα, 1- 1 – 166 !!!!!!!
    Οπότε αρχίζω και υποψιάζομαι ότι επειδή τά έτη 2000 κ 2004 είναι δίσεκτα, μήπως φταίει αυτό.
    Αλλά και πάλι άν είναι αυτό, πως θα μπορούσε να λυθεί το πρόβλημα ???
    Από την άλλη γιατί λύνεται το πρόβλημα μετά την 30/01 ??
    Ελπίζω να με βοηθήσεις με το πρόβλημα αυτό, καθόσον θα με διευκολύνει πολύ στην δουλειά μου.
    Πληροφοριακά χρησιμοποποιώ την έκδοση Excel 2007.
    Σε ευχαριστώ εκ των προτέρων και πάλι συγχαρητήρια για την δουλειά σου.
    Με εκτίμηση Νίκος.

  333. Ο/Η vioannis λέει:

    Νίκο, δεν λέγαμε ακριβώς τα ίδια. Στο δείγμα που έστειλες , αν κατάλαβα καλά, θέλεις οι (ανα)πτυσσόμενες λίστες να εμφανίζονται μέσα από έτοιμα σχήματα ή smart art του word . Αυτό δείχνει να μην είναι εφικτό για λίστες του word. Αν το επιχειρήσεις θα πάρεις απαγορευτικά μηνύματα. Παρόμοια δείχνει να μην είναι εφικτή η συνεργασία με το excel. Πιθανά κάποιος εξειδικευμένος στον προγραμματισμό του word να είχε κάτι καλλίτερο να προτείνει.

  334. Ο/Η vioannis λέει:

    Νίκο Γ. (θέμα συνάρτησης DATEDIF)
    Νίκο, σε ευχαριστώ πολύ για το μήνυμα σου αυτό, διότι μου άνοιξες τα μάτια. Εγώ ο καημένος είχα γνωριμία με την DATEDIF από το 1985 από τον καιρό του LOTUS 123 (πρόδρομος του excel) και νόμιζα ότι η συμπεριφορά της, σαν παλιά και η ώριμη, θα ήταν αψεγάδιαστη. Είχα πολύ καιρό να τη χρησιμοποιήσω στην πράξη και δεν είχα δει τα προβλήματα που στο μεταξύ παρουσιάζει. Τις πολύ σωστές παρατηρήσεις σου που επιβεβαίωσα και σε 2007 και σε 2010 (αναλυτικά, πρώτο παράδειγμα , λάθος και σε 2007 και σε 2010, δεύτερο παράδειγμα λάθος μόνο σε 2007). Έκανα μια πρώτη έρευνα στο δίκτυο, και οι αναφορές για λάθη της συνάρτησης είναι πάρα πολλές. Από πρώτη ανάγνωση : το πρόβλημα ξεκίνησε από το service pack 2 της έκδοσης 2007, στο service pack 3 το πρόβλημα διορθώθηκε αλλά όχι για όλα τα περιφερικά (τοπικά) excel. Δες εδώ την επίσημη βοήθεια της Microsoft για τη συνάρτηση, δες πάνω δεξιά τη σημείωση Applies to.
    http://office.microsoft.com/en-us/help/datedif-function-HA001160981.aspx
    Αυτό που κρατάμε για την ώρα είναι ότι η συνάρτηση φύλλου DATEDIF δεν είναι ασφαλής σε 2007, 2010. (Για το 2013 ας μας διαφωτίσει κάποιος φίλος που έχει πρόσβαση). Δεν απογοητευόμαστε όμως, στο excel υπάρχουν πολλοί δρόμοι είτε με άλλες συναρτήσεις φύλλου είτε με vba. Θα επανέλθω.

  335. Ο/Η Νίκος Καπουράλης λέει:

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

  336. Ο/Η Stazybο Hοrn λέει:

    Excel 2013:

    31/01/1992	20/03/1993	1ε 1μ 17η 
    31/03/2003	02/01/2004	0ε 9μ 2η 
  337. Ο/Η Γιάννης Βα λέει:

    Κύριε Γιάννη καλησπέρα.
    Σε ένα φύλλο έχω δημιουργήσει πίνακα με 30 στήλες και 600 γραμμές, όλος με μορφοποίηση κειμένου. Τα κελιά Β1, C1, D1,…….ΑE1, χρησιμοποιούνται σαν επικεφαλίδες, αντιστοιχούν στις ημέρες του μήνα και έχουν τη μορφή 010714, 020714, 030714,……300714. Τα κελιά Α2, Α3, Α4,….Α600, αντιστοιχούν σε τετραψήφιους αριθμούς μητρώου εργαζομένων, πάντοτε με μορφοποίηση κειμένου. Όλα τα υπόλοιπα κελιά, περιέχουν κωδικούς που υποδηλώνουν για κάθε ημέρα του μήνα την κατάσταση του εργαζομένου, πχ: «Ε», αν εργάζεται, «R», αν έχει ρεπό, «ΚΑ» αν έχει κανονική άδεια, κλπ. Ερώτηση: Μπορώ να δημιουργήσω μία φόρμα, σε κάποιο άλλο φύλλο, έτσι ώστε να κάνω μαζική καταχώρηση κάποιου κωδικού σε πολλούς εργαζόμενους κάθε φορά, για μια συγκεκριμένη ημερομηνία, πληκτρολογώντας σε μία στήλη τους αριθμούς μητρώου και να μη χρειάζεται να ψάχνω σε όλο το φύλλο το κελί που θέλω? πχ: η φόρμα να μου ζητάει ημερομηνία, κωδικό και σε μία στήλη να καταχωρώ τα μητρώα που θέλω και με το πάτημα ενός πλήκτρου να μεταφέρει τα δεδομένα στα αντίστοιχα κελιά του πίνακα.
    Ευχαριστώ…

  338. Ο/Η Νίκος Γ. λέει:

    Σ’ ευχαριστώ Γιάννη για την άμεση απάντησή σου …
    Από την μιά χάρηκα γιατί επιβεβαιώθηκε ότι δεν έκανα κάτι στραβά εγώ … κ από την άλλη λυπήθηκα βεβαίως γιατί δεν μου λύθηκε το πρόβλημα … enyway ..
    Πρός το παρόν κάνω μια αλχημεία που σοφίστικα η οποία δείχνει να πηγαίνει καλά.
    Συγκεκριμένα έστω ημερομηνία αρχής η 24-03-2002 (Α1) και τέλους η 05-04-2003 (Β1).
    Εφαρμόζω τον εξής αλγόριθμο :
    α. Β1 – Α1 = 377
    β. Μορφοποιώ το 377 σε ημερομηνία και δίνει 11/1/1901.
    γ. Αφαιρώ από το 1901 το έτος βάσης του Excel … δηλ. το 1900 και παίρνω 1. Το 1 είναι ο αριθμός των ετών.
    δ. Αφαιρώ από τους μήνες τη μονάδα .. δηλ .. 1-1=0. Το 0 είναι οι μήνες.
    ε. Τέλος προσθέτω την μονάδα στις μέρες .. δηλ .. 11+1 = 12. Το 12 είναι η μέρες.
    Άρα το μεσοδιάστημα είναι 12μέρες 0 μήνες και 1 έτος, συμπεριλαμβανομένης και της αρχής και του τέλους (γιαυτό προσθέτω τη μονάδα στις μέρες … δηλ. αυτός εργάσθηκε και την 24/3 και την 5/4. )
    Βέβαια όλα αυτά γίνονται σε στήλες με απόκρυψη.
    Μέχρι τώρα δείχνει ότι πάει καλά … χάνει βέβαια καμμιά μέρα που και που ..!!
    Όσον αφορά τώρα την DATEDIF πιστεύω ότι για τον λόγο αυτό δεν την έχουν στον κατάλογο με τις συναρτήσεις .. γιατί είναι προβληματική !!
    Δεν καταλαβαίνω γιατί τόσα χρόνια δεν φτιάνουν μια σωστή.
    Τώρα κάτι άλλο περίεργο με την Microsoft … στο link που μου έγραψες σε κάποιο σημείο λέει … «By default, December 31, 1899 is serial number 1» !!!!!! … ενώ 1 είναι η 1/1/1900.
    Τέλος πάντων χάρηκα που τάπαμε κ αν έχεις κάτι νεώτερο μου λές.
    Καλό σ/κ ..

  339. Ο/Η vioannis λέει:

    Για Νίκο Καπουράλη
    Νίκο, κατέβασε αυτό το παραδειγματάκι για να δεις τη εννοώ λέγοντας αναπτυσσόμενη λίστα στο word. Αυτή τοποθετείται όπου θέλεις μέσα στη σελίδα, όχι όμως πάνω σε σχήμα.

  340. Ο/Η vioannis λέει:

    Καλέ φίλε Stazybo, ευχαριστώ πολύ. Μάθαμε λοιπόν και για το 2013.

  341. Ο/Η Νίκος Γ. λέει:

    Stazybο Hοrn !! ..
    άρα και με το Excel 2013 έχει πρόβλημα το πρώτο διάστημα ..
    Σ’ ευχαριστώ
    Καλό σ/κ ..

  342. Ο/Η vioannis λέει:

    Για το Νίκο Γ.
    Νίκο, ότι δουλεύει σωστά, είναι σωστό. Αλλά δεν θα του περάσει, θα βρούμε άλλη λύση με όποιο τρόπο. Θέλω λίγο χρόνο, άλλωστε με περιμένουν (και σένα υποθέτω) δύο τελικοί!

  343. Ο/Η Νίκος Γ. λέει:

    οκ Γιάννη .. κλείνω κ γω τώρα ..
    τα λέμε από βδομάδα

    Γεια χαρα .. !

  344. Ο/Η Stazybο Hοrn λέει:

    Δείτε αρνητικές τιμές με την παράμετρο «md», λόγω της 29/2 στα δίσεκτα:

    start	end	τιμή "md"
    31/01/1992	01/03/1992	-1
    31/01/1992	01/03/1993	-2
    31/01/1992	02/03/1993	-1
    31/01/1992	01/03/1994	-2
    31/01/1992	02/03/1994	-1
    31/01/1992	01/03/1995	-2
    31/01/1992	02/03/1995	-1
    31/01/1992	01/03/1996	-1
    31/01/1992	01/03/1997	-2
    31/01/1992	02/03/1997	-1
    
    
    
  345. Ο/Η Stazybο Hοrn λέει:

    Στα γρήγορα, πριν τον τελικό· σχετική η μέτρηση του χρόνου,ιδίως με τους συμμιγείς αριθμούς, που λέγαμε στο σχολείο. Σχετικοί, γιατί η από τις τρεις συνδυαζόμενες μονάδες, οι δύο -το έτος και ο μήνας- δεν έχουν σταθερή διάρκεια. Οπότε, δεν φταίει η datedif, ούτε αυτός είναι ο λόγος της απόσυρσής της. Άλλωστε, ό,τι κάνει η datefif, μπορείς να το κάνεις και με τις άλλες συναρτήσεις ημερομηνίας:

    =YEAR(B1-A1)-YEAR(0)&"ε "&MONTH(B1-A1)-MONTH(0)&"μ "&DAY(B1-A1)-DAY(0)&"η"

    Αυτό που με κούφανε είναι το «0 έτη – 9 μήνες – 166 ημέρες» που δεν μπορώ να δω εγώ, αλλά με βάζει σε σκέψεις για εξελόφυλλα που παρακολουθούν αρχές και λήξεις συμβάσεων και έργων και υπολογίζουν διάφορα με βάση αυτά.

  346. Ο/Η Stazybο Hοrn λέει:

    Μπα, δεν είναι ακριβώς ισοδύναμο.

  347. Ο/Η vioannis λέει:

    Stazybo, Με συναρτήσεις φύλλου έχω και εγώ κάτι κατά νου, αλλά θέλω να το τεστάρω καλά πρώτα. Πάντως με τα χθεσινά σου ευρήματα έδωσες τη χαριστική βολή. Ναι, τα ημερολόγια είναι δύσκολη υπόθεση και ούτε η vba τα πάει καλά μαζί τους. Πάντως θα προσπαθήσω, δεν ξέρω αν θα τα καταφέρω, μια υποκατάστασή της με μια ισοδύναμη σε vba. Εμένα με εντυπωσιάζει ότι και οι πιο ενημερωμένες σελίδες στο δίκτυο, εξακολουθούν να την προτείνουν, όπως εδώ, ο John Walkenbach, παραπέμπει στον πολύ προσεκτικό και λεπτολόγο Chip Pearson, εδώ, ο οποίος κάνει απλά μία πολύ καλή παρουσίαση της συνάρτησης , τίποτα άλλο.

  348. Ο/Η Stazybο Hοrn λέει:

    Με κώδικα γίνεται, γιατί πολύ απλά μετατρέπεις τον χειροκίνητο αλγόριθμο αφαίρεσης συμμιγών αριθμών, συμπεριλαμβάνοντας όλες τις περιπτώσεις* κατά το δανεισμό μήνα ή έτους για την αφαίρεση μέρας ή μήνα αντίστοιχα.

    *αν είσαι ή πρόκειται να πας με το δανεισμό σε δίσεκτο έτος, και σε τι μήνα είσαι ή/και πρόκειται να πας με το δανεισμό.

  349. Ο/Η vioannis λέει:

    Γιάννη Β, δες στο excel βιβλίο UpdateTableExample ένα παράδειγμα σε λειτουργία, αυτού που με σαφήνεια και αναλυτική περιγραφή, ζήτησες. Φυσικά χρειάστηκαν λίγες γραμμές κώδικα. Τον κώδικα και οδηγίες για να τον προσαρμόσεις στο δικό σου βιβλίο, θα τον δεις στο βιβλίο. Επανέρχεσαι για όποια διευκρίνιση.

  350. Ο/Η vioannis λέει:

    Νίκο Γ. και Stazybο, εξακολουθώ να δουλεύω στο πρόβλημα μας, είμαι σε καλό δρόμο, δεν είμαι έτοιμος ακόμα, πιθανά αύριο.

  351. Ο/Η Γιάννης Βα λέει:

    Κύριε Γιάννη, για μια ακόμα φορά μου δώσατε λύση, ακριβώς όπως την ήθελα. Το «ευχαριστώ», είναι λίγο. RESPECT!

  352. Ο/Η Stazybο Hοrn λέει:

    Γιάννη και Νίκο Γ., νομίζω το κατάφερα.
    Με αρχική ημερομηνία στο A1 και τελική στο B1, η παρακάτω φόρμουλα βγάζει πάντα το αναμενόμενο -σωστό- αποτέλεσμα:

    =IF(DAY(B1)<DAY(A1);DATEDIF(A1;B1;"y")&"ε "&DATEDIF(A1;DATE(YEAR(B1);MONTH(B1)-1;IF(DAY(A1)=DAY(EOMONTH(A1;0));DAY(EOMONTH(DATE(YEAR(B1);MONTH(B1)-1;DAY(A1));0));DAY(A1)));"ym")+IF(DAY((EOMONTH(DATE(YEAR(B1);MONTH(B1)-1;DAY(A1));0))-IF(DAY(A1)=DAY(EOMONTH(A1;0));DAY(EOMONTH(DATE(YEAR(B1);MONTH(B1)-1;DAY(A1));0));DAY(A1))+DAY(B1))=DAY(EOMONTH(B1;0));1;0)&"μ "&MOD((DAY(EOMONTH(DATE(YEAR(B1);MONTH(B1)-1;DAY(A1));0))-IF(DAY(A1)=DAY(EOMONTH(A1;0));DAY(EOMONTH(DATE(YEAR(B1);MONTH(B1)-1;DAY(A1));0));DAY(A1))+DAY(B1));DAY(EOMONTH(B1;0)))&"η";DATEDIF(A1;B1;"y")&"ε "&DATEDIF(A1;DATE(YEAR(B1);MONTH(B1);IF(DAY(A1)=DAY(EOMONTH(A1;0));DAY(EOMONTH(DATE(YEAR(B1);MONTH(B1);DAY(A1));0));DAY(A1)));"ym")&"μ "&MOD(DAY(B1)-IF(DAY(A1)=DAY(EOMONTH(A1;0));DAY(EOMONTH(DATE(YEAR(B1);MONTH(B1);DAY(A1));0));DAY(A1));DAY(EOMONTH(B1;0)))&"η")
    

    Ελπίζω ότι δεν ξέχασα κάτι…

  353. Ο/Η Stazybο Hοrn λέει:

    Την έβαλα κι εδώ για ευκολία:
    http://pastebin.com/BRR3UeG0

  354. Ο/Η vioannis λέει:

    Stazybo, με το ….τέρας που ανέβασες, των 823 χαρακτήρων, θα ασχοληθώ αύριο. Αυτή τη στιγμή κάνω τις τελευταίες δοκιμές στην δικιά μου vba λύση και σε λιγότερο από μία ώρα θα την ανεβάσω, εκτός αν σκάσει κάποιο σφάλμα.

  355. Ο/Η vioannis λέει:

    Νίκο Γ. και Stazybο, στο excel βιβλίο myDatedifFunctionNo1 θα βρείτε την δικιά μου πρόταση με μία vba συνάρτηση, την myDatedif. Η συνάρτηση δίνεται με επιφύλαξη και για δόκιμη από εσάς και από όλους τους φίλους του ιστολογίου που θέλουν να ασχοληθούν. Περιμένω τα αποτελέσματα των δοκιμών σας.

  356. Ο/Η Νίκος Ε. λέει:

    Γιάννη καλησπέρα. Καταρχήν, συγχαρητήρια για τη δουλειά που έχεις κάνει! Είναι καταπληκτική! Θα ήθελα να μου πεις, πως μπορώ να κλειδώσω κάποια συγκεκριμένα κελιά στο excel υπό συνθήκη. Δηλαδή: Έχω φτιάξει π.χ. στα κελιά Α1 έως Α30 μια λίστα με επικύρωση δεδομένων, με τιμές ΝΑΙ και ΟΧΙ. Όταν επιλέγω από τη λίστα το ΝΑΙ, θέλω να κλειδώνει αυτόματα το αντίστοιχο κελί στη στήλη Β (Β1 έως Β30 αντίστοιχα), ενώ όταν επιλέγω ΟΧΙ από τη στήλη Α, το αντίστοιχο κελί στη στήλη Β να είναι ξεκλείδωτο, ώστε να μπορώ να βάλω τιμές. Έχω κάνει προστασία φύλλου και έχω κλειδώσει κάποια κελιά που δεν θέλω έτσι κι’αλλιώς να πειράζονται. Υποθέτω ότι θέλει κώδικα VB, εκτός κι’αν υπάρχει άλλος τρόπος. Δεν έχω ασχοληθεί καθόλου με VB και δεν ξέρω που πρέπει να μπει ο κώδικας και αν θα πρέπει να μπει σε κάθε κελί ξεχωριστά. Θα ήθελα τη βοήθειά σου, αν γίνεται.
    Ευχαριστώ πολύ!

  357. Ο/Η Stazybο Hοrn λέει:

    Με λίγα λόγια:

    Η datedif δείχνει να δουλεύει σωστά όταν οι δύο ημερομηνίες ταυτίζονται στην ημέρα του μήνα, δίνοντας αποτέλεσμα με ακέραιο πλήθος ετών και μηνών και 0 ημέρες, που δεν μας ενδιαφέρει. Έχει κι εδώ προβλήματα όταν μια από τις δύο ημερομηνίες είναι η τελευταία κάποιου μήνα, αλλά και αυτό αντιμετωπίζεται*.

    Σκέφτηκα, λοιπόν, με βάση την αρχική ημερομηνία, να προσεγγίζω πρώτα όσο πιο κοντά μπορώ σε ακέραια έτη και μήνες την τελική ημερομηνία, είτε στον ίδιο μήνα με την τελική, είτε στον προηγούμενό του. Μετά υπολογίζω τις επιπλέον ημέρες που απομένουν μέχρι να πιάσω την τελική. Αν υπολογίσω εδώ 28 μέρες σε κανονικό Φλεβάρη, ή 29 σε δίσεκτο, πρέπει να μηδενίσω (με MOD), και να έχω δώσει +1 μήνα πριν.

    * Η τελευταία μέρα κάθε μήνα απέχει ένα ακριβώς μήνα από την τελευταία του προηγούμενου ή του επόμενου, ασχέτως αν ο ένας τελειώνει στις 28 ή 29 ή 30 κι ο άλλος στις 31. Με την eomonth() βλέπω μήπως πέφτω σε τέτοιες περιπτώσεις.

    Έβαλα ένα xlsx εδώ.

  358. Ο/Η Stazybο Hοrn λέει:

    Νομίζω, Γιάννη, χάνεις αυτό που είπα με τα τέλη των μηνών και το τι λογίζεται μήνας… Δες:

    startdate	enddate 	DATEDIF	      stazybodif	myDatedif	mydateDif OK
    30/04/1992	28/02/1993	0ε 9μ 29η	0ε 10μ 0η	0ε 9μ 29η	FALSE
    31/01/1992	20/03/1993	1ε 1μ 17η	1ε 1μ 20η	1ε 1μ 20η	TRUE
    31/05/1992	01/03/1996	3ε 9μ -1η	3ε 9μ 1η	3ε 9μ 1η	TRUE
    28/02/1993	29/02/1996	3ε 0μ 1η	3ε 0μ 0η	3ε 0μ 1η	FALSE
    30/04/1992	31/05/1993	1ε 1μ 1η	1ε 1μ 0η	1ε 1μ 1η	FALSE
    01/01/1992	01/03/1997	5ε 2μ 0η	5ε 2μ 0η	5ε 2μ 0η	TRUE
    31/01/1992	01/03/1993	1ε 1μ -2η	1ε 1μ 1η	1ε 1μ 1η	TRUE
    31/01/1992	02/03/1993	1ε 1μ -1η	1ε 1μ 2η	1ε 1μ 2η	TRUE
    31/01/1992	01/03/1994	2ε 1μ -2η	2ε 1μ 1η	2ε 1μ 1η	TRUE
    31/01/1992	02/03/1994	2ε 1μ -1η	2ε 1μ 2η	2ε 1μ 2η	TRUE
    31/01/1992	01/03/1995	3ε 1μ -2η	3ε 1μ 1η	3ε 1μ 1η	TRUE
    31/01/1992	02/03/1995	3ε 1μ -1η	3ε 1μ 2η	3ε 1μ 2η	TRUE
    31/01/1992	01/03/1996	4ε 1μ -1η	4ε 1μ 1η	4ε 1μ 1η	TRUE
    31/01/1992	01/03/1997	5ε 1μ -2η	5ε 1μ 1η	5ε 1μ 1η	TRUE
    31/01/1992	02/03/1997	5ε 1μ -1η	5ε 1μ 2η	5ε 1μ 2η	TRUE
    31/03/2003	02/01/2004	0ε 9μ 2η	0ε 9μ 2η	0ε 9μ 2η	TRUE
    
  359. Ο/Η Νίκος Ε. λέει:

    Ξέχασα να πω ότι χρησιμοποιώ excel 2007.

  360. Ο/Η Stazybο Hοrn λέει:

    Και θυμάσαι ότι τα πολλαπλάσια του 100 δεν είναι δίσεκτα, παρά μόνο αν είναι και του 400.

  361. Ο/Η vioannis λέει:

    Stazybo, ευχαριστώ για τις πρώτες επισημάνσεις, φυσικά θα ξαναδουλευτεί ο κώδικας. Από τις 6 περιπτώσεις της DATEDIF, οι 5 μπορούν να λυθούν με εύκολες ή σχετικά εύκολες συναρτήσεις φύλλου. Έχω ήδη μερικές για κάθε περίπτωση. Η πιο δύσκολη είναι η md. Φοβάμαι όμως, ότι όσο δεν έχουμε ορίσει ένα κανόνα (ας πούμε ένα ISO !) τι ορίζουμε σαν διαφορά χρόνου στη μορφή έτη-μήνες-ημέρες , κάποιες οριακές περιπτώσεις θα δημιουργούν μικρές διαφορές. Παράδειγμα, στην πρώτη ημερομηνία που έστειλες, από 30/4/1992 έως 28/2/1993 μία ανάγνωση είναι: Από 1/5/1992 έως 31/1/1993 = 9 μήνες , 27 ημέρες του Φεβρουαρίου και μια η 30η Απριλίου τελικά 9 μήνες και 28 ημέρες. Με αυτή την ανάγνωση και ο δικό σου υπολογισμός ( 0ε 10μ 0η) και ο δικός μου (0ε 9μ 29η χωλαίνουν. Να συμφωνήσουμε πάντως, ότι όπως κάνει η DATEDIF το όρισμα start_date προσμετράται στην καταμέτρηση, και το όρισμα end_date δεν προσμετράται. Τώρα για την παρατήρησή σου για τα δίσεκτα επαιώνια έτη, και γενικά για τα δίσεκτα, δεν με απασχολούν, εκμεταλλεύομαι τη σειριακή – αριθμητική ιδιότητα των ημερομηνιών, και δουλεύω με την DateSerial

  362. Ο/Η vioannis λέει:

    Νίκο Ε, αν θέλεις να προστατεύσεις το φύλλο σου από τυχαίους λανθασμένους χειρισμούς κάποιου χρήστη, υπάρχουν λύσεις. Αν θέλεις να προστατεύεις το βιβλίο από κακόβουλους χρήστες, δεν υπάρχουν αποτελεσματικές λύσεις ούτε με vba. Σκέψου την περίπτωση όπου απλά ο κακόβουλος θα ανοίξει το βιβλίο και δεν θα ενεργοποιήσει τις μακροεντολές, όλη η προστασία πάει περίπατο. Γενικά, επειδή πολλοί φίλοι αναφέρονται σε παρόμοια θέματα, να πω ότι η “υγεία” των βιβλίων που τα χειρίζονται περισσότεροι από ένας χρήστες, είναι ανάλογη της καλοπιστίας των χρηστών και της εκπαίδευσης που έχουν δεχτεί να χειρίζονται το excel ή το συγκεκριμένο αρχείο. Στο πρόβλημα τώρα. Πριν καταφύγουμε στην vba, δοκίμασε το παρακάτω. Επίλεξε τα κελιά Β1:Β30 και κάνε εισαγωγή της παρακάτω επικύρωσης:
    Επιτρεπόμενη επικύρωση : Προσαρμογή, Τύπος:

    =A1<>"Ναι"
    

    Το “Nαι” θα το γράψεις όπως ακριβώς το έχεις γράψει στην στήλη Α, με κεφαλαία, πεζά, αγγλικά ή ότι άλλο, και φυσικά θα έχεις στην καρτέλα “Προειδοποιητικό μήνυμα” της επικύρωσης,Στυλ: Διακοπή.
    Πες μου αν αυτό σε καλύπτει, τα ξαναλέμε.

  363. Ο/Η vioannis λέει:

    Νίκο μου είχε ξεφύγει “τυπογραφικό” λάθος, δες τώρα πως είναι ο τύπος της επικύρωσης.

  364. Ο/Η Stazybο Hοrn λέει:

    ISO μπορεί να μην υπάρχει για τη διαφορά ημερομηνιών σε έτη, μήνες, ημέρες -άλλωστε το έχω πει από πολύ νωρίς αυτό- όμως αυτοί που έχουν ανάλογα ζητήματα στην εργασία τους, χειρίζονται τις διαφορές όπως υπέδειξα. Νομίζω θα το επιβεβαιώσει και ο Νίκος.

    Κάπου πήρε το μάτι μου ένα mod 4 σε έτη, κοιτώντας διαγώνια τα φύλλα σου (εκεί ήταν, όχι στη VBA), γι’ αυτό το ανέφερα.

  365. Ο/Η Νίκος Ε. λέει:

    Γιάννη σ’ευχαριστώ πολύ! Στο δεύτερο μήνυμα που μου έστειλες δεν βλέπω τον τύπο επικύρωσης που αναφέρεις. Για ποιό τυπογραφικό λάθος μιλάς; Το έκανα όπως μου είπες και δούλεψε. Όντως δεν μπορώ να εισάγω τιμή, αλλά θα ήθελα όταν επιλέγω «ΝΑΙ» από το κελί Α1 π.χ., το αντίστοιχο κελί (Β1) να είναι κλειδωμένο με την έννοια να μην μπορεί ο χρήστης να επιλέξει το κελί για να εισάγει ή να σβήσει τιμή. Σαν το κλείδωμα των κελιών στην προστασία του φύλλου. Αυτό δεν ξέρω αν γίνεται…
    Θα σου τα πω από την αρχή γιατί έτσι όπως τα είπα… Έχω λοιπόν στη στήλη Α (την έχω ονομάσει ΦΠΑ) λίστα με τιμές «ΝΑΙ» και «ΟΧΙ». Τη λίστα την έφτιαξα από την καρτέλα Δεδομένα – Επικύρωση Δεδομένων. Όταν επιλέγω από τη στήλη Α την τιμή ΝΑΙ, στη στήλη Β υπολογίζεται με IF η αξία ΦΠΑ. Μέχρι εδώ όλα εντάξει. Θέλω, όταν επιλέγω από τη στήλη Α την τιμή «ΟΧΙ», το αντίστοιχο κελί στη στήλη Β να είναι ελεύθερο να μπορεί ο χρήστης να εισάγει οποιαδήποτε τιμή θέλει, ενώ όταν επιλέγω την τιμή «ΝΑΙ», το κελί στη στήλη Β θέλω να κλειδώνει, ώστε να μην μπορεί ο χρήστης να το επιλέξει καθόλου. Έχω κλειδώσει κάποια κελιά που θέλω (εκεί όπου υπολογίζονται αυτόματα κάποια σύνολα) με την προστασία φύλλου και δεν αφήνω το χρήστη ούτε να τα επιλέξει. Θέλω να κάνω το ίδιο και για τα κελιά της στήλης Β (όπου και υπάρχει σε όλα η IF για τον υπολογιαμό του ΦΠΑ), αλλά μόνο γι’αυτά όπου η τιμή της στήλης Α είναι «ΝΑΙ». Για τα υπόλοιπα κελιά της στήλης Β (όπου η στήλη Α έχει «ΟΧΙ»), θέλω να αφήνω το χρήστη να εισάγει όποια τιμή θέλει. Δηλαδή, όπου η στήλη Α έχει τιμή «ΝΑΙ», θέλω να τρέχει η IF που υπολογίζει το ΦΠΑ και το κελί να είναι κλειδωμένο ώστε ο χρήστης να μην μπορεί ούτε να το επιλέξει, ενώ όταν έχει τιμή «ΟΧΙ», το αντίστοιχο κελί στη στήλη Β να είναι ελεύθερο για εισαγωγή οποιαδήποτε τιμής.
    Αυτό δεν ξέρω αν μπορεί να γίνει. Χρησιμοποιώ Excel 2007.
    Σ’ ευχαριστώ και πάλι!

  366. Ο/Η Νίκος Ε. λέει:

    Γιάννη δεν ξέρω αν πήρες το μήνυμά μου γιατί δεν το βλέπω πουθενά στα posts. Ήταν προς έγκριση και τώρα δεν το βλέπω!

  367. Ο/Η vioannis λέει:

    Νίκο, Υπήρχε ένα λάθος στον τύπο της πρώτης απάντησης μου και το διόρθωσα εκεί, τώρα είναι σωστό. Το πρόβλημα όπως το περιγράφεις τώρα είναι διαφορετικό, κάτι σκέπτομαι, θα δω αν θα δουλέψει και τα ξαναλέμε. (Σημείωση, το μήνυμα που είναι σε αναμονή, όσο είναι σε αναμονή, φαίνονται μόνο από τον υπολογιστή που το έστειλες, και όχι από άλλον. Επίσης ούτε στον υπολογιστή από όπου το έστειλες θα φαίνεται, αν σβήσεις τα cookies)

  368. Ο/Η vioannis λέει:

    Νίκο, 3 διευκρινίσεις: 1) τα κελιά της στήλης Β που αντιστοιχούν σε ΟΧΙ τα θέλεις κενά ή θα περιέχουν και αυτά την συνάρτηση IF, και ο χρήστης αφήνεται να κάνει η να μην κάνει χρήση της συνάρτησης ή να την διαγράφει και να γράφει ότι θέλει; 2) η συνάρτηση IF της στήλης Β είναι μία συνάρτηση που στην υποθετική περίπτωση που όλα τα κελιά Α1:Α30 περιείχαν ΝΑΙ, θα την έγραφες στο κελί Β1 και θα την αντέγραφες έως το κελί Β30; Αν η απάντηση είναι καταφατική, θέλω να μου στείλεις το τύπο της συνάρτησης όπως θα τον έγραφες στο κελί Β1 3) Η προστασία του φύλλου είναι με Password;

  369. Ο/Η Νίκος Ε. λέει:

    Καλημέρα Γιάννη. Σ’ ευχαριστώ πάρα πολύ για τη βοήθειά σου! Νιώθω υποχρεωμένος! Για τις διευκρινήσεις: 1) Στα κελιά της στήλης Β που αντιστοιχούν σε ΟΧΙ ο χρήστης πληκτρολογεί δικιά του τιμή. Αυτά τα κελιά δεν με ενδιαφέρει να περιέχουν τη συνάρτηση, γιατί μόλις πληκτρολογηθεί μια τιμή, η συνάρτηση έτσι κι’αλλιώς θα χαθεί. 2) Υποθετικά, αν είχα σε όλα τα κελιά της στήλης Α την τιμή ΝΑΙ, τότε θα έκανα αυτό που λες. Θα έγραφα τη συνάρτηση στο Β1 και θα την αντέγραφα μέχρι το Β30. Σου στέλνω την IF που θα έγραφα στο Β1 και που υπολογίζει το ΦΠΑ: IF(A1=»ΝΑΙ»;C1*13%;0) (Στο C1 έχω τιμή βάσει της οποίας υπολογίζεται το ΦΠΑ στο Β1. Εκεί βάλε όποια τιμή θες εσύ. Το μηδέν (0) στη συνάρτηση μετά το δεύτερο ερωτηματικό το έβαλα γιατί δεν ήξερα τι άλλο να κάνω!). 3) Την προστασία του φύλλου την έχω κάνει από την καρτέλα Αναθεώρηση – Προστασία φύλλου. Έχω βάλει password και έχω ενεργοποιήσει μόνο το «επιλογή μη κλειδωμένων κελιών».

  370. Ο/Η vioannis λέει:

    Νίκο, κάνε τα παρακάτω:
    Βάλε προστασία στο φύλλο, ορίζοντας όποια δικαιώματα χρήστη θέλεις.
    Αποθήκευσε το βιβλίο σου σαν “Βιβλίο εργασίας του Excel με δυνατότητα μακροεντολών(*.xlsm)”
    Καθώς το βιβλίο σου είναι ανοιχτό πάτα Alt+F11. Θα βρεθείς στο περιβάλλον της vba
    Κοίτα αριστερά κάτω από τον τίτλο Project-VBAProject να βρεις τον τίτλο του βιβλίου σου. Θα τον βρεις γραμμένο έτσι: VBAProject(βιβλίομου.xlsm). Άνοιξε το + εμπρός από το τίτλο και θα φανεί ακριβώς από κάτω ένας κατάλογος από όλα τα φύλλα του βιβλίου σου.
    Βρες το φύλλο που σε ενδιαφέρει (κοίτα τα ονόματα μέσα στις παρενθέσεις) και κάνε διπλό αριστερό κλικ πάνω του.
    Αντίγραψε τον παρακάτω κώδικα και επικόλλησε τον στη δεξιά λευκή περιοχή (περιοχή κώδικα).

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim kelia As Range
    Dim keli As Range
    Dim i As Integer
    Set kelia = Range("A1:A30")
    Set keli = Intersect(Target, kelia)
    If Not keli Is Nothing Then
    ActiveSheet.Unprotect Password:="ABCD"
    Range("B1:B30").Locked = False
    For i = 1 To 30
    If Cells(i, "A").Value = "ΝΑΙ" Then
    Cells(i, "B").Formula = "=IF(A" & i & "=""ΝΑΙ"",C" & i & "*0.13,"""")"
    Cells(i, "B").Locked = True
    End If
    Next
    ActiveSheet.Protect Password:="ABCD"
    End If
    End Sub
    

    Άλλαξε το Password ABCD τις δύο φορές που εμφανίζεται στον κώδικα με το δικό σου
    ΟΙ δύο φορές που εμφανίζεται η λέξη ΝΑΙ στον κώδικα είναι με κεφαλαία Ελληνικά. Με ίδια κεφαλαία Ελληνικά πρέπει να είναι και οι λέξεις ΝΑΙ και ΟΧΙ στην επικύρωση στη στήλη Α.
    Ο κώδικας είναι γραμμένος για τις στήλες Α1:Α30, Β1:Β30, C1:C30.
    Πάτα Alt+Q για να κλείσει η vba και να γυρίσεις στο φύλλο. Κάνε εισαγωγή μιας τιμής (ΝΑΙ ή ΟΧΙ) στην στήλη Α1:Α30 να ενεργοποιηθεί η μακροεντολή. Αποθήκευσε το βιβλίο. Κάθε φορά που θα ανοίγει το βιβλίο φρόντισε να ενεργοποιείς τις μακροεντολές του. Δες όλες τις σχετικές πληροφορίες για τι θέμα της ενεργοποίησης, εδώ και εδώ
    Επειδή στον επεξεργαστή της vba το password είναι τώρα ορατό, καλό είναι να προστατεύσεις από τα αδιάκριτα μάτια τον κώδικά σου:
    Γύρνα στον επεξεργαστή της vba (Alt +F11) και επίλεξε αριστερά κάτω από τον τίτλο Project-VBAProject το βιβλίου σου: VBAProject(βιβλίομου.xlsm). Κάνε μονό κλικ πάνω στον τίτλο. Στο μενού επιλέγεις Tools, μετά VBAProject Properties, μετά στην καρτέλα Protection, τσεκάρεις το Lock project for viewing, εισάγεις το password και ΟΚ. Φεύγεις από την vba (Alt+Q) και αποθηκεύεις το βιβλίο.
    Και λίγα λόγια για το πώς δουλεύει ο κώδικας: Στις πρώτες γραμμές εξασφαλίζει ότι η μακροεντολή θα ενεργοποιείτε μόνο αν κάτι αλλάξει στα κελία Α1:Α30. Όποια εργασία γίνει σε όλο το υπόλοιπο βιβλίο, η μάκρο δεν ενεργοποιείτε. Αν, λοιπόν αλλάξεις κάτι στην Α1:Α30 τότε η προστασία του φύλλου αναιρείτε και όλα τα κελιά Β1:Β30 ξεκλειδώνουν. Στη συνέχεια ο κώδικας ψάχνει ένα-ένα τα κελιά Α1:Α30. Για όσα από αυτά βρει τη λέξη ΝΑΙ, τότε κάνει δύο πράγματα στο αντίστοιχο κελί της στήλης Β, εισάγει την συνάρτησή σου και το κλειδώνει. Στα υπόλοιπα κελιά της Β1:Β30 δεν κάνει τίποτα, άρα μένουν ξεκλείδωτα. Όταν τελειώσει με όλα τα κελιά ξαναπροστατεύει το φύλλο με το ίδιο password.
    Δες ένα παράδειγμα σε λειτουργία στο excel βιβλίο ConditionallyProtect

  371. Ο/Η Νίκος Ε. λέει:

    Γιάννη καλημέρα. Μόλις το έκανα και δούλεψε τέλεια! Τι να πω.. Σ’ ευχαριστώ πάρα πολύ! Μου έλυσες τα χέρια! Αν γίνεται θα ήθελα να μου πεις πως θα κάνω και κάτι άλλο! Σε μια στήλη καταχωρώ επίσης ημερομηνίες. Το format που έχω επιλέξει για τα κελιά είναι: Καρτέλα Αριθμός-Κατηγορία Ημερομηνία και τύπος: 14/3/2001. Το format αυτό τελικά δεν εξυπηρετεί. Επειδή αυτό που φτιάχνω απευθύνεται σε χρήστη που δεν γνωρίζει ούτε excel ούτε υπολογιστές, θα ήθελα στα κελιά της ημερομηνίας να χρησιμοποιήσω την εξής μορφοποίηση: Να καταχωρεί ο χρήστης π.χ. 14514 και το κελί να εμφανίζει: 14/05/2014. Ο χρήστης να καταχωρεί την ημερομηνία χωρίς διαχωριστικό (/), όπως ακριβώς φαίνεται (14514). Οι ημερομηνίες αυτές φαντάσου ότι αφορούν ημερομηνίες τιμολογίων και ο χρήστης δεν γνωρίζει υπολογιστές. Προσπαθώ να φτιάξω την εφαρμογή όσο πιο απλή γίνεται γι’ αυτόν. Καταλαβαίνεις…Πάμε πάλι στο παράδειγμα: Κάθε φορά που καταχωρεί μια ημερομηνία, την καταχωρεί όπως σου είπα (14514). Αυτό που θέλω είναι να εμφανίζεται η ημερομηνία με τη μορφή: 14/05/2014. (Δηλαδή το διαχωριστικό να μπαίνει μόνο του). Αν όμως καταχωρήσει λάθος ημερομηνία, π.χ. 342314, τότε να μην επιτρέπεται η καταχώρηση. Δηλαδή, κατά κάποιο τρόπο να γίνεται έλεγχος στις τιμές που καταχωρεί: Στο λανθασμένο παράδειγμα (342314) Για την ημέρα (το 34), έλεγχος ώστε οι τιμές να είναι από 1 μέχρι 31, για το μήνα (το 23) έλεγχος ώστε οι τιμές να είναι από 1 μέχρι 12 και για το έτος τιμές >=10. Ο χρήστης δεν είναι εξοικειωμένος με τα διαχωριστικά (/) και κάνει αρκετά λάθη… Δεν ξέρω με ποιον τρόπο μπορεί να γίνει αυτό γιατί η ημέρα όπως και ο μήνας μπορεί να είναι μονοψήφιοι ή διψήφιοι αριθμοί. Πως θα το καταλάβει αυτό το excel; Δεν ξέρω αν έχεις να μου προτείνεις κάτι άλλο. Π.χ. όταν επιλέγει το κελί να εμφανίζεται ένα format της μορφής __/__/__ (Δεν ξέρω, λέω μια ιδέα…). Δεν μπορώ να σκεφτώ κάτι άλλο! Έχεις κάτι να μου προτείνεις;

  372. Ο/Η Άρης λέει:

    Αγαπητέ Γιάννη καλησπέρα.Πρόσφατα ανακάλυψα το ιστολόγιό σου στο οποίο κάνεις εξαιρετική δουλειά.Θέλω κι εγώ να ρωτήσω κάτι ως αρχάριος στο Excel.Έχω έναν πίνακα που στην πρώτη του στήλη καταγράφονται ονόματα μαθητών μιας τάξης.Στις επόμενες 4 στήλες καταγράφονται ονόματα καθηγητών που αντιστοιχούν σε 4 ημέρες της εβδομάδας.(Πρόκειτα για μαθήματα μουσικών οργάνων που γίνονται 4 φορές την εβδομάδα).Έτσι σε κάθε μαθητή αντιστοιχούν κάποιοι καθηγητές π.χ. στον μαθητή Α αντιστοιχούν οι καθηγητές χ,ψ κ.λ.π.Ο ίδιος καθηγητής όμως κάνει μάθημα και σε άλλο μαθητή έτσι ώστε ο καθηγητής χ να κάνει μάθημα και στον μαθητή Β π.χ. αλλά άλλη μέρα την εβδομάδα..Έτσι τον όνομα ενός καθηγητή μπορεί να είναι στην δεύτερη στήλη πρώτη σειρά ,αλλά και στην τρίτη στήλη τέταρτη σειρά, ή και στην πέμπτη στήλη πρώτη σειρά πάλι (Ύπάρχουν καθηγητές που κάνουν μάθημα δυο φορές μάθημα την εβδομάδα σε ένα παιδί). Το ερώτημά μου είναι το εξής:Υπάρχει τρόπος έτσι ώστε από τον πίνακα αυτόν να εξάγεται σε άλλο φύλλο το αντίστροφο; Δηλαδή με ποιους μαθητές ο καθηγητής χ έχει μάθημα και ποιες μέρες την εβδομάδα.Στις στήλες B,C,D,E οι επικεφαλίδες είναι ημέρες της εβδομάδας.
    Ευχαριστώ πολύ και αν είναι εύκολο στείλε την απάντηση και στο mail.
    Άρης

  373. Ο/Η Stazybο Hοrn λέει:

    Το 11114 τι θα σημαίνει; 11/1/14; 1/11/14; 11/11/4;

  374. Ο/Η Νίκος Γ. λέει:

    Προς Γιάννη και Stazybo
    Φίλοι μου καλησπέρα
    Κατ΄ αρχάς σας ευχαριστώ ιδιαιτέρως που ασχοληθήκατε με το πρόβλημα του υπολογισμού του χρόνου που έθεσα.

    Γιάννη, δεν πρόλαβα να δοκιμάσω την συνάρτησή σου λόγω πίεσης χρόνου.
    Έχω μπλέξει μ’ αυτές τις συμβάσεις βλέπεις ..
    Είχα εξάλλου αρχίσει να δοκιμάζω τη συνάρτηση «τέρας 8** χαρακτήρων» του Stazybo.

    Stazybo, δοκίμασα πολλές φορές την συνάρτηση που ανέβασες στις 15/7-21:37 και ενώ στην αρχή πήγαινε καλά όταν έβαλα οριακές «δύσκολες» τιμές έβγαλε πρόβλημα.
    Συγκεκριμένα, όταν η ημερομηνία αρχής είναι η τελευταία μέρα του Φεβρουαρίου, είτε σε κανονικό έτος είτε σε δίσεκτο και η ημερομηνία τέλους είναι μετά τις 29 κάποιου μήνα τότε η συνάρτηση επιστρέφει τις ημέρες της ημερομηνίας του τέλους και συγκεκριμένα επιστρέφει 27 με 28 ημέρες παραπάνω.
    Εδώ έχω τα σχετικά παραδείγματα:
    29/2/1992 – 29/4/1993 ….. 1ε 2μ 29η
    28/2/1991 – 29/4/1993 ….. 2ε 2μ 29η
    29/2/1992 – 29/4/1992 ….. 0ε 2μ 29η
    29/2/1996 – 29/4/1996 ….. 0ε 2μ 29η
    29/2/1992 – 30/7/1992 ….. 0ε 5μ 30η
    29/2/1992 – 29/7/1992 ….. 0ε 5μ 29η
    28/2/1993 – 29/4/1993 ….. 0ε 2μ 29η
    Κάτι εκεί με το Φλεβάρη γίνεται !!
    Εκτιμώ ότι θα το βρεις το σκάλωμα.

    Εγώ προς το παρόν τον υπολογισμό των ημερών τον κάνω κάπως έτσι :
    =DAY(B2)-DAY(A2)+(DAY(A2)>DAY(B2))*DAY(DATE(YEAR(A2);MONTH(A2)+1;))+1
    (Το +1 στο τέλος προσθέτει μια ημέρα για να υπολογίζεται και η ημερομηνία τέλους ως ημέρα εργασίας)
    Για τα έτη και τους μήνες χρησιμοποιώ την DATEDIF, η οποία σε έτη κ μήνες δεν βγάζει πρόβλημα. Έτσι τουλάχιστον έχω καταλήξει.
    =DATEDIF(A2;B2;»y») και =DATEDIF(A2;B2;»ym»)
    (όπου Α2 η ημνία αρχής κ Β2 η ημνία τέλους)
    Μέχρι τώρα αυτή η διαδικασία που ακολουθώ πηγαίνει καλά … θα δούμε όμως !!
    Αν μπορείτε δοκιμάζετε τη συνάρτηση κ μου λέτε κ εσείς

    Καλό σ/κ σε όλους τους φίλους του ιστολόγιου

  375. Ο/Η vioannis λέει:

    Νίκο E., πληκτρολόγηση μονοψήφιας ημέρας και μονοψήφιου μήνα σε ημερομηνία, χωρίς διαχωριστικό, δεν υφίσταται, διότι δεν υπάρχει τρόπος να καταλάβει ούτε ανθρώπινο μυαλό ούτε φυσικά υπολογιστής αν πχ η ημερομηνία 11114 είναι 1/11/14 ή 11/1/14, η ημερομηνία 21214 είναι 2/12/14 ή 21/2/14 κλπ. Χωρίς διαχωριστικά μπορείς να εισάγεις ημερομηνίες μονό στη μορφή ΗΗΜΜΕΕ ή πιο καλά ΗΗΜΜΕΕΕΕ και ακόμα πιο καλά ΕΕΕΕΜΜΗΗ. Στην τελευταία μορφή οι ημερομηνίες μπορούν να ταξινομηθούν και να εισαχθούν σαν αριθμοί στα κελιά, ενώ στη μορφή ΗΗΜΜ(ΕΕ)ΕΕ πρέπει πριν αρχίσει η πληκτρολόγηση, να έχεις μορφοποιήσει τα κελιά εισαγωγής σε “Κείμενο”, γιατί αλλιώς μόλις γράψεις 051214 θα το δεις να μετατρέπεται σε 51214. Το excel τον θεώρει αριθμό και διαγράφει το αρχικό μηδενικό σαν άχρηστο. Πρέπει λοιπόν να εκπαιδεύσεις τον χρήστη να τροποποιεί τους μονοψήφιους αριθμούς ημερών και μηνών σε διψήφιους με το μηδέν εμπρός τους. Ε λοιπόν, δεν είναι πιο εύκολο να εκπαιδευτεί να εισάγει διαχωριστικά; Αν παρ όλα αυτά επιμένεις για πληκτρολόγηση χωρίς διαχωριστικά, στη μορφή ΗΗΜΜΕΕ βέβαια, τότε για την ημερομηνία 050814 γραμμένη στο κελί Α1 ο τύπος:

    =DATE("20"&RIGHT(A1;2);MID(A1;3;2);LEFT(A1;2))
    

    Θα επιστρέψει 5/8/2014.
    Χαίρομαι που η χθεσινή μάκρο σου δούλεψε.

  376. Ο/Η vioannis λέει:

    Stazybo είμαστε στις ίδιες ημερομηνίες συντονισμένοι…

  377. Ο/Η Νίκος Ε. λέει:

    Γιάννη έχεις δίκιο. Η καλύτερη λύση είναι να βάζει ο χρήστης διαχωριστικό στην ημερομηνία. Δεν είχα σκεφτεί και την περίπτωση που ανέφερε ο Stazybo. Όντως, το 11114 τι θα σημαίνει; Έχετε δίκιο παιδιά! Γιάννη σ’ ευχαριστώ πολύ και πάλι για τη βοήθειά σου. Θα τα ξαναπούμε πάλι. (Η δουλειά που κάνεις με το blog είναι καταπληκτική!). Να είσαι καλά!

  378. Ο/Η vioannis λέει:

    Νίκο Γ, και η δικιά μου vba συνάρτηση mydatedif βγάζει λάθη. Μερικά τα έχω βρει, και έχει βρει και ο stazybo, όλα στην περίπτωση md. Και η δικιά μου εμπειρία λέει ότι στις περιπτώσεις y και ym, η DATEDIF δεν παράγει λάθη. Θα δω το τύπο σου, ίσως είναι η λύση στην περίπτωση.

  379. Ο/Η Στεφανία λέει:

    Αγαπητέ Γιάννη, καλημέρα.
    Όσες φορές ανέτρεξα στις πολύτιμες γνώσεις σου, μου έδωσες πολύ καλές λύσεις που με βοήθησαν πραγματικά. Δεν σου κρύβω πως μέχρι πρότινος οι γνώσεις μου δεν ήταν ιδιαίτερες και από εδώ μέσα, πότε διαβάζοντας τις απαντήσεις σου σε άλλoυς ενδιαφερόμενους και πότε εκείνες που αφορούσαν δικά μου ερωτήματα, τα καταφέρνω αρκετά καλά στη δουλειά μου μέχρι τώρα και με πολύ περισσότερο αυτοματοποιημένο και σίγουρο τρόπο.
    Λοιπόν, στο θέμα μου: Από ένα pivot, δημιουργώ νέο φύλλο, (γεμίζω τα κενά κελιά με τον τρόπο που έμαθα από εδώ μέσα), και έχω ένα νέο excel φύλλο, με τη μορφή .xls προς επεξεργασία από το προσωπικό. Βασικά, πρέπει να προστεθεί σ’ αυτό μια νέα στήλη. Το φύλλο αυτό, πολλές φορές πρέπει να το δουλέψουν 2 ή 3 άτομα. Δεν μπορούν όμως να το κάνουν παράλληλα αφού όταν είναι ανοιχτό από τον ένα, δεν μπορεί να το επεξεργασθεί ο άλλος, εφ’ όσον όσα καταχωρεί ο ένας εκ των δύο θα χαθούν. Προσυννενοούνται, δηλαδή, πότε θα το ανοίξει ο ένας, να το αποθηκεύσει και μετά να το ανοίξει ο άλλος. Υπάρχει δυνατότητα να το επεξεργάζονται παράλληλα και να μπορεί να αποθηκευθεί διατηρώντας όσα έχουν καταχωρήσει και οι δύο (τρεις κ.λ.π.); Ελπίζω ότι η λύση θα βρίσκεται σε καταχώρηση απλής συνάρτησης ή τρόπου αποθήκευσης, γιατί σε κάτι άλλο περισσότερο «επιστημονικό» (εννοώ μακροεντολή) δεν ξέρω αν θα τα καταφέρω, αφού δεν τις γνωρίζω.
    Και πάλι ευχαριστώ και σου εύχομαι να είσαι και να περνάς καλά.

  380. Ο/Η vioannis λέει:

    Άρη, για τον παράγωγο πίνακα που ζητάς, επειδή όπως λες υπάρχουν καθηγητές που κάνουν μάθημα περισσότερες από μια φορά μάθημα την εβδομάδα σε ένα παιδί, για τον κάθε καθηγητή θα χρειαστούν 4 στήλες. Αν, λοιπόν έχεις 10 καθηγητές θα χρειαστείς 40 στήλες. Τελικά θα έχεις ένα μεγάλο δύσχρηστο πίνακα. Για αυτό στο παράδειγμα που θα βρεις στο βιβλίο weeklytable.xls υπάρχει ένας πίνακας, στον οποίο αφού επιλέξεις από πτυσσόμενο πλαίσιο το όνομα του καθηγητή, εμφανίζεται όλο το εβδομαδιαίο πρόγραμμά του με όλους τους μαθητές. Το ίδιο πίνακα έστησα και στο ίδιο φύλλο και σε διαφορετικό, για να δεις τις διαφορές. Επειδή δε, δηλώνεις αρχάριος, κράτησα το όλο θέμα στην πιο απλή μορφή του, η δημιουργία του πίνακα στηρίζεται μόνο στην συνάρτηση IF. Αν δεν σε κάλυψα, επανέρχεσαι.

  381. Ο/Η Stazybο Hοrn λέει:

    Νίκος Γ., δίκιο έχεις, βλέπω πού είναι το λάθος, θα το διορθώσω.

    Εξακολουθούμε να έχουμε θέμα ορισμού, ωστόσο, βλέποντας και τη δική σου φόρμουλα:
    Με αρχή 28/02/1995 και τέλος 29/02/1996, τι διάρκεια θα δώσεις -χωρίς υπολογιστή;
    Στις 29/2/96 κλείνει ακριβώς 1 έτος -29άρης ο Φλεβάρης· συν μία μέρα η αρχική, 1ε 0μ 1η. Εσύ βγάζεις μία παραπάνω.

    30/04/1992 με 28/02/1993; Δεν είναι ακριβώς 10 μήνες, συν 1 μέρα η αρχική; Εσύ βγάζεις 9 μήνες και 29 μέρες.

    Εξήγησε αν θες, τους ακριβείς κανόνες για τον υπολογισμό με το χέρι.

  382. Ο/Η vioannis λέει:

    Αγαπητή Στεφανία, ακούω με μεγάλη χαρά ότι το ιστολόγιο βοήθησε να βελτιώσεις το επίπεδό σου στο excel, να είσαι καλά. Η λύση στο πρόβλημα που περιγράφεις δεν είναι θέμα συνάρτησης ή μακροεντολής αλλά εξαρτάται αν έχετε χαρακτηρίσει το βιβλίο “κοινόχρηστο”. Η θεωρία γύρω από τα κοινόχρηστα βιβλία είναι αρκετή και διαφέρει αρκετά στις διάφορες εκδόσεις του Excel. Δυστυχώς δεν είναι δυνατόν, για ένα τόσο γενικό θέμα να δοθεί απάντηση εδώ. Ευτυχώς, υπάρχουν καλογραμμένες οδηγίες στη βοήθεια της Microsoft. Επειδή αναφέρεσαι σε αρχείο .xls υποθέτω ότι η ομάδα σου δουλεύει σε excel 2003
    Για excel 2003, λοιπόν :
    Για δημιουργία και επεξεργασία κοινόχρηστου βιβλίου εργασίας εδώ:
    http://office.microsoft.com/el-gr/excel-help/HP005262294.aspx
    για συνηθισμένα προβλήματα με κοινόχρηστα βιβλία εδώ
    http://office.microsoft.com/el-gr/excel-help/HP005203537.aspx
    Πληροφορίες για την επίλυση αντιφατικών αλλαγών σε κοινόχρηστα βιβλία εργασίας εδώ:
    http://office.microsoft.com/el-gr/excel-help/HP005230813.aspx
    για την έκδοση 2007 εδώ:
    http://support.microsoft.com/kb/269860/el
    και εδώ:
    http://office.microsoft.com/el-gr/excel-help/HA010089896.aspx
    και εδώ:
    http://office.microsoft.com/el-gr/excel-help/HP010197381.aspx
    Επίσης για ειδικά προβλήματα δικτύου, που μπορεί να προκύψουν, πρέπει να συμβουλευτείς τον συντηρητή του δικτύου.

  383. Ο/Η vioannis λέει:

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

  384. Ο/Η ΚΩΣΤΑΣ λέει:

    Για σας. Μπορειται σας παρακαλω να μου πειτε πως σε δυο στηλες με πολλες γραμμες περιπου 900 που περιεχουν φρασεις πως θα αλλαξω το χρωμμα ή το μεγεθος κλπ μιας λεξης ή δυο οι οποιες επαναλαμβανονται.
    ευχαριστω με εκτιμηση Κωστας

  385. Ο/Η Stazybο Hοrn λέει:

    Νίκος Γ., τι κάνει η φόρμουλά σου; τι λέει η date() χωρίς τρίτη παράμετρο, δηλαδή με παράμετρο 0; να πάρει ως ημερομηνία την τελευταία ημέρα του A2, δηλαδή ό,τι και η eomonth(a2). Δηλαδή ο τύπος σου είναι:

    =DAY(B2)-DAY(A2)+(DAY(A2)>DAY(B2))*DAY(EOMONTH(A2;0))+1
    

    ή

    =IF(DAY(A2)>DAY(B2);DAY(B2)-DAY(A2)+DAY(EOMONTH(A2;0));DAY(B2)-DAY(A2))+1
    

    Οπότε δεν προχωράς καθόλου σε όλες τις περιπτώσεις που πολύ αδρά υπαινίχθηκα εδώ. Τη datedif δεν μπορείς να την εμπιστευτείς ούτε για το πλήθος των μηνών, όπως εξήγησα. Γι’ αυτό και ο τύπος μου βγήκε τεράστιος… Για το περίπου, κρατάμε και την ίδια τη datedif.

    Και κάτι επιπλέον. Η πρόσθεση της μιας μέρας στο τέλος, για την αύξηση του διαστήματος κατά μία ημέρα -επειδή θέλουμε να συμπεριλάβουμε και την αρχική στην καταμέτρηση, κι όχι τη διαφορά τους- μπορεί να σου «στρογγυλεύει» έναν ολόκληρο μήνα, ή ένα ολόκληρο έτος. Γι’ αυτό σου λέω, ποιοι είναι οι ακριβείς κανόνες της πράξης με το χέρι;

  386. Ο/Η Stazybο Hοrn λέει:

    Για να καταλάβουμε το εγγενές πρόβλημα με τη μη σταθερή διάρκεια των μηνών, και τη μη σταθερή περιοδικότητα τους (31, 28/29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31,…), σε τι διάρκεια θα συμφωνήσουμε στις παρακάτω περιπτώσεις (αφήνω έξω την καταμέρηση της εναρκτήριας μέρας που είναι -άλλο ένα- ορθογώνιο πρόβλημα).

    29/02/1992	28/07/1992	0ε 4μ 28η
    29/02/1992	29/07/1992	0ε 5μ 0η
    29/02/1992	30/07/1992	0ε 5μ 1η
    29/02/1992	31/07/1992	0ε 5μ 0η
    29/02/1992	01/08/1992	0ε 5μ 1η
    28/02/1991	27/07/1992	1ε 4μ 27η
    28/02/1991	28/07/1992	1ε 5μ 0η
    28/02/1991	29/07/1992	1ε 5μ 1η
    28/02/1991	30/07/1992	1ε 5μ 2η
    28/02/1991	31/07/1992	1ε 5μ 0η
    28/02/1991	01/08/1992	1ε 5μ 1η
    

    Από τους 4 μήνες και 28 μέρες, κάνουμε το άλμα στους 5 μήνες, μετά ανεβαίνουμε στους 5 μήνες και 1 μέρα, μετά ξαναπέφτουμε στους 5 μήνες, μετά ξανανεβαίνουμε στους 5 μήνες και 1 μέρα…
    Αντίστοιχα σκαμπανεβάσματα και παρακάτω: 27 μέρες, 0 μέρες, 1 μέρα, 2 μέρες, 0 μέρες, 1 μέρα…

    Κι όλα αυτά, νόμιμα, σωστά. Από καθαρή τύχη δυο συμβασιούχοι που δούλεψαν ακριβώς τις ίδιες ημέρες, δεν θα έχουν την ίδια προϋπηρεσία. Κι ακόμη χειρότερα, μπορεί να γίνουν τα πράγματα, όταν θα χρειαστεί να αθροιστούν προϋπηρεσίες. Εκεί μπορεί κάποιος με μικρότερη πραγματική συνολική διάρκεια προϋπηρεσίας να προσπεράσει κάποιον με μεγαλύτερη.

    Διόρθωσα, νομίζω, τον τύπο:

    =IF(DAY(B2)<DAY(A2);DATEDIF(A2;B2;"y")&"ε "&DATEDIF(A2;DATE(YEAR(B2);MONTH(B2)-1;IF(DAY(A2)=DAY(EOMONTH(A2;0));DAY(EOMONTH(DATE(YEAR(B2);MONTH(B2)-1;DAY(A2));0));DAY(A2)));"ym")+IF(DAY((EOMONTH(DATE(YEAR(B2);MONTH(B2)-1;DAY(A2));0))-IF(DAY(A2)=DAY(EOMONTH(A2;0));DAY(EOMONTH(DATE(YEAR(B2);MONTH(B2)-1;DAY(A2));0));DAY(A2))+DAY(B2))=DAY(EOMONTH(B2;0));1;0)&"μ "&MOD((DAY(EOMONTH(DATE(YEAR(B2);MONTH(B2)-1;DAY(A2));0))-IF(DAY(A2)=DAY(EOMONTH(A2;0));DAY(EOMONTH(DATE(YEAR(B2);MONTH(B2)-1;DAY(A2));0));DAY(A2))+DAY(B2));DAY(EOMONTH(B2;0)))&"η";DATEDIF(A2;B2;"y")&"ε "&DATEDIF(A2;B2;"ym")&"μ "&IF(AND(DAY(B2)=DAY(EOMONTH(B2;0));DAY(A2)=DAY(EOMONTH(A2;0)));0;DAY(B2)-DAY(A2))&"η")
    

    Παραθέτω και μια μεγαλύτερη λίστα αντίστοιχων αποτελεσμάτων, με τις ημερομηνίες που έχουν αναφερθεί, κι άλλες:

    28/02/1991	27/07/1992	1ε 4μ 27η
    28/02/1991	28/07/1992	1ε 5μ 0η
    28/02/1991	29/07/1992	1ε 5μ 1η
    28/02/1991	30/07/1992	1ε 5μ 2η
    28/02/1991	31/07/1992	1ε 5μ 0η
    28/02/1991	01/08/1992	1ε 5μ 1η
    28/02/1991	29/04/1993	2ε 2μ 1η
    01/01/1992	01/03/1997	5ε 2μ 0η
    31/01/1992	01/03/1993	1ε 1μ 1η
    31/01/1992	02/03/1993	1ε 1μ 2η
    31/01/1992	20/03/1993	1ε 1μ 20η
    31/01/1992	01/03/1994	2ε 1μ 1η
    31/01/1992	02/03/1994	2ε 1μ 2η
    31/01/1992	01/03/1995	3ε 1μ 1η
    31/01/1992	02/03/1995	3ε 1μ 2η
    31/01/1992	01/03/1996	4ε 1μ 1η
    31/01/1992	01/03/1997	5ε 1μ 1η
    31/01/1992	02/03/1997	5ε 1μ 2η
    29/02/1992	29/04/1992	0ε 2μ 0η
    29/02/1992	28/07/1992	0ε 4μ 28η
    29/02/1992	29/07/1992	0ε 5μ 0η
    29/02/1992	30/07/1992	0ε 5μ 1η
    29/02/1992	31/07/1992	0ε 5μ 0η
    29/02/1992	01/08/1992	0ε 5μ 1η
    29/02/1992	02/08/1992	0ε 5μ 2η
    29/02/1992	29/04/1993	1ε 2μ 0η
    30/04/1992	28/02/1993	0ε 10μ 0η
    30/04/1992	31/05/1993	1ε 1μ 0η
    31/05/1992	01/03/1996	3ε 9μ 1η
    28/02/1993	29/04/1993	0ε 2μ 1η
    28/02/1993	29/04/1994	1ε 2μ 1η
    28/02/1993	29/02/1996	3ε 0μ 0η
    28/02/1995	29/02/1996	1ε 0μ 0η
    28/02/1996	29/02/1996	0ε 0μ 1η
    29/02/1996	29/04/1996	0ε 2μ 0η
    31/03/2003	02/04/2003	0ε 0μ 2η
    31/03/2003	02/01/2004	0ε 9μ 2η
    30/04/2013	29/07/2013	0ε 2μ 29η
    30/04/2013	30/07/2013	0ε 3μ 0η
    30/04/2013	31/07/2013	0ε 3μ 0η
    30/04/2013	01/08/2013	0ε 3μ 1η
    
  387. Ο/Η Stazybο Hοrn λέει:

    …που δούλεψαν ακριβώς τις ίδιες ημέρες…
    Εννοώ, τις ίδιες μέρες σε πραγματική διάρκεια και ημερομίσθια, σε διαφορετικές ημερομηνίες, ακόμη και 1-2 μέρες μπρος ή πίσω.

  388. Ο/Η Stazybο Hοrn λέει:

    (Γιάννη, αισθάνομαι ότι έχω κάνει κατάληψη. Αν θεωρείς ότι καταχρώμαι τη φιλοξενία σου, κόψε ό,τι θες…)

    Και για να αντιμετωπίσουμε τα «σκαμπανεβάσματα» που ανέφερα πριν μια διαφορετική -τελική- παραλλαγή για τον υπολογισμό:

    =IF(DAY(B2)<DAY(A2);DATEDIF(A2;B2;"y")&"ε "&DATEDIF(A2;DATE(YEAR(B2);MONTH(B2)-1;IF(DAY(A2)=DAY(EOMONTH(A2;0));DAY(EOMONTH(DATE(YEAR(B2);MONTH(B2)-1;DAY(A2));0));DAY(A2)));"ym")+IF(DAY((EOMONTH(DATE(YEAR(B2);MONTH(B2)-1;DAY(A2));0))-IF(DAY(A2)=DAY(EOMONTH(A2;0));DAY(EOMONTH(DATE(YEAR(B2);MONTH(B2)-1;DAY(A2));0));DAY(A2))+DAY(B2))=DAY(EOMONTH(B2;0));1;0)&"μ "&MOD((DAY(EOMONTH(DATE(YEAR(B2);MONTH(B2)-1;DAY(A2));0))-IF(DAY(A2)=DAY(EOMONTH(A2;0));DAY(EOMONTH(DATE(YEAR(B2);MONTH(B2)-1;DAY(A2));0));DAY(A2))+DAY(B2));DAY(EOMONTH(B2;0)))&"η";IF(AND(DAY(A2)=DAY(EOMONTH(A2;0));DAY(B2)<DAY(EOMONTH(B2;0)));DATEDIF(A2;B2;"y")&"ε "&DATEDIF(A2;B2;"ym")-1&"μ "&DAY(B2)&"η";DATEDIF(A2;B2;"y")&"ε "&DATEDIF(A2;B2;"ym")&"μ "&IF(AND(DAY(B2)=DAY(EOMONTH(B2;0));DAY(A2)=DAY(EOMONTH(A2;0)));0;DAY(B2)-DAY(A2))&"η"))
    

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

    28/02/1991	27/07/1992	1ε 4μ 27η	1ε 4μ 27η
    28/02/1991	28/07/1992	1ε 5μ 0η	1ε 4μ 28η
    28/02/1991	29/07/1992	1ε 5μ 1η	1ε 4μ 29η
    28/02/1991	30/07/1992	1ε 5μ 2η	1ε 4μ 30η
    28/02/1991	31/07/1992	1ε 5μ 0η	1ε 5μ 0η
    28/02/1991	01/08/1992	1ε 5μ 1η	1ε 5μ 1η
    28/02/1991	29/04/1993	2ε 2μ 1η	2ε 1μ 29η
    01/01/1992	01/03/1997	5ε 2μ 0η	5ε 2μ 0η
    31/01/1992	01/03/1993	1ε 1μ 1η	1ε 1μ 1η
    31/01/1992	02/03/1993	1ε 1μ 2η	1ε 1μ 2η
    31/01/1992	20/03/1993	1ε 1μ 20η	1ε 1μ 20η
    31/01/1992	01/03/1994	2ε 1μ 1η	2ε 1μ 1η
    31/01/1992	02/03/1994	2ε 1μ 2η	2ε 1μ 2η
    31/01/1992	01/03/1995	3ε 1μ 1η	3ε 1μ 1η
    31/01/1992	02/03/1995	3ε 1μ 2η	3ε 1μ 2η
    31/01/1992	01/03/1996	4ε 1μ 1η	4ε 1μ 1η
    31/01/1992	01/03/1997	5ε 1μ 1η	5ε 1μ 1η
    31/01/1992	02/03/1997	5ε 1μ 2η	5ε 1μ 2η
    29/02/1992	29/04/1992	0ε 2μ 0η	0ε 1μ 29η
    29/02/1992	28/07/1992	0ε 4μ 28η	0ε 4μ 28η
    29/02/1992	29/07/1992	0ε 5μ 0η	0ε 4μ 29η
    29/02/1992	30/07/1992	0ε 5μ 1η	0ε 4μ 30η
    29/02/1992	31/07/1992	0ε 5μ 0η	0ε 5μ 0η
    29/02/1992	01/08/1992	0ε 5μ 1η	0ε 5μ 1η
    29/02/1992	02/08/1992	0ε 5μ 2η	0ε 5μ 2η
    29/02/1992	29/04/1993	1ε 2μ 0η	1ε 1μ 29η
    30/04/1992	28/02/1993	0ε 10μ 0η	0ε 10μ 0η
    30/04/1992	31/05/1993	1ε 1μ 0η	1ε 1μ 0η
    31/05/1992	01/03/1996	3ε 9μ 1η	3ε 9μ 1η
    28/02/1993	29/04/1993	0ε 2μ 1η	0ε 1μ 29η
    28/02/1993	29/04/1994	1ε 2μ 1η	1ε 1μ 29η
    28/02/1993	29/02/1996	3ε 0μ 0η	3ε 0μ 0η
    28/02/1995	29/02/1996	1ε 0μ 0η	1ε 0μ 0η
    28/02/1996	29/02/1996	0ε 0μ 1η	0ε 0μ 1η
    29/02/1996	29/04/1996	0ε 2μ 0η	0ε 1μ 29η
    31/03/2003	02/04/2003	0ε 0μ 2η	0ε 0μ 2η
    31/03/2003	02/01/2004	0ε 9μ 2η	0ε 9μ 2η
    30/04/2013	29/07/2013	0ε 2μ 29η	0ε 2μ 29η
    30/04/2013	30/07/2013	0ε 3μ 0η	0ε 2μ 30η
    30/04/2013	31/07/2013	0ε 3μ 0η	0ε 3μ 0η
    30/04/2013	01/08/2013	0ε 3μ 1η	0ε 3μ 1η
    29/02/1992	30/04/1992	0ε 2μ 0η	0ε 2μ 0η
    28/02/1991	27/04/1991	0ε 1μ 27η	0ε 1μ 27η
    28/02/1991	28/04/1991	0ε 2μ 0η	0ε 1μ 28η
    28/02/1991	29/04/1991	0ε 2μ 1η	0ε 1μ 29η
    28/02/1991	30/04/1991	0ε 2μ 0η	0ε 2μ 0η
    28/02/1991	01/05/1991	0ε 2μ 1η	0ε 2μ 1η
    28/02/1991	02/05/1991	0ε 2μ 2η	0ε 2μ 2η
    01/03/1991	28/04/1991	0ε 1μ 27η	0ε 1μ 27η
    01/03/1991	29/04/1991	0ε 1μ 28η	0ε 1μ 28η
    01/03/1991	30/04/1991	0ε 1μ 29η	0ε 1μ 29η
    01/03/1991	01/05/1991	0ε 2μ 0η	0ε 2μ 0η
    01/03/1991	02/05/1991	0ε 2μ 1η	0ε 2μ 1η
    
  389. Ο/Η vioannis λέει:

    Καλέ φίλε Stazybο, καμία κατάχρηση δεν κάνεις. Στείλε ελεύθερα όλες τις σκέψεις και παρατηρήσεις σου για το θέμα και για όποιο excel-θέμα θέλεις. Δεν σχολιάζω αυτή τη στιγμή, γιατί από προχθές είμαι σε διακοπές και λέω τις μέρες των διακοπών να μείνω προσηλωμένος στο γαλάζιο χρώμα που έχουν!

  390. Ο/Η Άρης λέει:

    Γιάννη καλησπέρα.
    Ευχαριστώ πάρα πολύ για την απάντησή σου που μου έδωσε την λύση που χρειαζόμουνα.Απ’ ότι φαίνεται βέβαια ,επειδή όσο προχωράει κάποιος καινούργια ερωτήματα προκύπτουν,θα ξαναχρειαστώ σίγουρα την πολύτιμη βοήθειά σου.Άλλη μια φορά ευχαριστώ και καλές διακοπές.
    Άρης

  391. Ο/Η Stazybο Hοrn λέει:

    Ωραία, λοιπόν, να το ολοκληρώσω.

    Για να συμπεριλάβουμε και τη μια ημέρα της αρχικής ημερομηνίας στο καταμετρούμενο διάστημα, νομίζω ότι ο ενδεικνυόμενος τρόπος είναι να δώσουμε στον υπολογισμό μας, παντού, ως τελική ημερομηνία, την αμέσως επόμενή της, ας πούμε την B2+1, παρά να προσθέσουμε στο τέλος μία ημέρα που μπορεί να οδηγήσει σε έναν ακόμη ακέραιο μήνα ή ένα ακόμη ακέραιο έτος.

    Τώρα γιατί μια μέρα μετά, στο τέλος, κι όχι μια μέρα πριν, στην αρχή, πες A2-1; οι υπόλοιποι υπολογισμοί είναι πιο συμβατοί με την πρώτη επιλογή.

    Ας βάλω, λοιπόν, αυτόν τον τελευταίο -λέμε τώρα αστεία, να περνάει η ώρα- τύπο:

    =IF(DAY(B2+1)<DAY(A2);DATEDIF(A2;B2+1;"y")&"ε "&DATEDIF(A2;DATE(YEAR(B2+1);MONTH(B2+1)-1;IF(DAY(A2)=DAY(EOMONTH(A2;0));DAY(EOMONTH(DATE(YEAR(B2+1);MONTH(B2+1)-1;DAY(A2));0));DAY(A2)));"ym")+IF(DAY((EOMONTH(DATE(YEAR(B2+1);MONTH(B2+1)-1;DAY(A2));0))-IF(DAY(A2)=DAY(EOMONTH(A2;0));DAY(EOMONTH(DATE(YEAR(B2+1);MONTH(B2+1)-1;DAY(A2));0));DAY(A2))+DAY(B2+1))=DAY(EOMONTH(B2+1;0));1;0)&"μ "&MOD((DAY(EOMONTH(DATE(YEAR(B2+1);MONTH(B2+1)-1;DAY(A2));0))-IF(DAY(A2)=DAY(EOMONTH(A2;0));DAY(EOMONTH(DATE(YEAR(B2+1);MONTH(B2+1)-1;DAY(A2));0));DAY(A2))+DAY(B2+1));DAY(EOMONTH(B2+1;0)))&"η";IF(AND(DAY(A2)=DAY(EOMONTH(A2;0));DAY(B2+1)<DAY(EOMONTH(B2+1;0)));DATEDIF(A2;B2+1;"y")&"ε "&DATEDIF(A2;B2+1;"ym")-1&"μ "&DAY(B2+1)&"η";DATEDIF(A2;B2+1;"y")&"ε "&DATEDIF(A2;B2+1;"ym")&"μ "&IF(AND(DAY(B2+1)=DAY(EOMONTH(B2+1;0));DAY(A2)=DAY(EOMONTH(A2;0)));0;DAY(B2+1)-DAY(A2))&"η"))
    
  392. Ο/Η Νίκος Γ. λέει:

    Stazydo .. Καλησπέρα
    Κατ’ αρχάς ως προς τη συνάρτηση έχεις δίκιο .. κάνει ότι κ η EOMONTH … απλά εμένα μου βγήκε αλλοιώς … πάντως βγάζει το ίδιο αποτέλεσμα.
    Κ πάμε τωρα στα δύσκολα.
    Το πρόβλημα, εκτός της μη σταθερής περιοδικότητας της διάρκειας των μηνών, καθώς και του 28 κ του 29 για τον Φλεβάρη συνίσταται κατά ένα μεγάλο βαθμό στο ότι, για παράδειγμα, την 29 Φλεβάρη, άλλοτε την εκλαμβάνει ως τέλος του μήνα, οπότε σε επόμενους μήνες την τελευταία ημέρα τους στις 30 ή στις 31, ανάλογα με το μήνα, μετράει ένα ολόκληρο μήνα, χαρακτηριστικό το παράδειγμά σου:
    29/02/1992 31/07/1992 0ε 5μ 0η,
    άλλοτε όμως την εκλαμβάνει ως 29η ημέρα του μήνα, οπότε στις 29 κάποιoυ επόμενου μήνα μετράει πάλι ενα ολόκληρο μήνα, επίσης το παράδειγμά σου:
    29/02/1992 29/07/1992 0ε 5μ 0η,
    κατα συνέπεια, σου λέει, αφου στις 29/07 κλείνει ενα μήνα τότε στις 30/07 κλείνει ενα μήνα κ μία μέρα: 29/02/1992 30/07/1992 0ε 5μ 1η,
    κατόπιν δε, όταν πάει στις 31, τέλος του 7ου δηλαδή, εκεί χτυπάει καμπανάκι ότι κ η 29/02 είναι επίσης τελευταία, οπότε επανέρχόμαστε στο αρχικό παράδειγμλα σου που ανέφερα. !!!
    Το ίδιο ισχύει κ για την 28 Φεβρουαρίου … :
    28/02/1991 27/07/1992 1ε 4μ 27η
    28/02/1991 28/07/1992 1ε 5μ 0η
    28/02/1991 29/07/1992 1ε 5μ 1η
    28/02/1991 30/07/1992 1ε 5μ 2η
    28/02/1991 31/07/1992 1ε 5μ 0η
    28/02/1991 01/08/1992 1ε 5μ 1η
    28/02/1991 29/04/1993 2ε 2μ 1η
    Κατά συνέπεια, πρός το παρόν δεν βλέπω φώς, καθόσον εκτός από αυτά τα παραπάνω, στην πράξη επικρατεί ομοίως ανακολουθία στην τηρούμενη πρακτική. Παράδειγμα :
    Πάει κάποιος να βρεί δουλειά στις 5 κάποιου μήνα. Του λέει ο εργοδότης … οκ … θα σε πάρω από σήμερα για ένα μήνα, ή δυο δεν έχει σημασία, κ λέει στο λογιστή να ετοιμάσει μία σύμβαση για ένα μήνα.
    Οπότε υπάρχουν τα ενδεχόμενα:
    α. Η σύμβαση να λέει: από 5 μέχρι 5
    β. Η σύμβαση να λέει: από 5 μέχρι 4
    γ. Η σύμβαση να λέει: προσλαμβάνεσαι από σήμερα για ένα μήνα
    Ποιό είναι το σωστό θα μου πείς !! … Πάμε να δούμε …
    Το α σημαίνει ότι θα δουλέυεις μέχρι τις 5, όχι όμως και στις 5.
    Το β σημαίνει ότι θα δουλεύεις μέχρι τις 4, όχι όμως και στις 4.
    Ενώ λοιπόν το α είναι το σωστό, συνήθως οι περισσότεροι νομίζουν ότι στις συμβάσει σε μήνες η ημέρα αρχής είναι ίδια με την ημέρα του τέλους, δηλαδή από 5 μέχρι 5, από 14 μέχρι 14, θεωρώντας ότι δουλεύεις και στις 5 της αρχής κ στις 5 του τέλους. Αυτό όμως είναι λάθος, διότι έτσι δουλεύεις 1 μήνα κ μία μέρα.
    Κατά συνέπεια το ξεκάθαρο θα ήταν η σύμβαση να έλεγε: από 5 μέχρι και 4.
    Επίσης μέρδεμα θα γίνει ενδεχομένως και με το γ.
    Π.χ. αν αντι 5 είναι 28/2 κ όχι δίσεκτο. Σύμφωνα με το γ προσλαμβάνεσαι σήμερα και για ένα μήνα.
    Οπότε ενας εργοδότης μπορεί να θεωρήσει ότι πρέπει να δουλεύεις μέχρι τις 31 Μαρτίου, αφού πήγες για δουλεία την τελευταία μέρα του προηγούμενου μήνα, ενώ ένας άλλος ότι πρέπει να δουλεύεις μέχρι την 28η, δηλ. μέχρι και την 27η, γλυτώνοντας έτσι και 4 μεροκάματα.
    Κ’ αν όλο αυτό είναι απίθανο να συμβεί, δεν είναι καθόλου απίθανο να συμβεί όταν η 28/2 είναι σε δίσεκτο έτος, οπότε δεν είναι τελευταία του μήνα κ είναι πιό λογικό να σου πεί ότι θα δουλέψεις απο 28 μέχρι 28, δηλ. μέχρι και τις 27.
    Όσον αφορά αυτό που με ρωτάς στις «Ιουλίου 19, 2014 στις 08:44», για το πως θα τόκανα με το χέρι, η απάντηση είναι στην πρώτη περίπτωση 1 – 0 – 1 και στην δεύτερη 0 – 10 – 1, με δεδομένο ότι δούλεψε και την πρώτη και την τελευταια ημέρα του διαστήματος.
    Στις Υπηρεσίες πάντως, όταν θέλουν να βγάλουν προυπηρεσία κάποιου με το χέρι, αφαιρούν την παλαιότερη ημερομηνία από την νεότερη ως εξής:
    Ημνία πρόσληψης 18/04/1958 … ημνία αποχώρησης 14/02/1982
    Βήμα 1ο 1982 02 14 (- μείον)
    1958 04 18

    Βήμα 2ο 1982 01 44 (-μείον)
    1958 04 18

    Βήμα 3ο 1981 13 44 (-μείον)
    1958 04 18
    Αποτέλεσμα 23 ετ 9 μ 26 ημ
    Θεωρείται ο μήνας με 30 ημέρες, γιαυτό στο παράδειγμά μας δεν πήραν 28 ημέρες, αφου ο μήνας ήταν Φλεβάρης, αλλά πήραν 30 κ έκαναν τις μέρες 44.
    Μ’ αυτά κ μ’ αυτά πήγε κοντά 11 η ώρα !!!!!!
    Μεγάλο μανίκι τελικά ο υπολογισμός της διάρκειας των συμβάσεων
    Αυτά προς το παρόν … Καληνύχτα

  393. Ο/Η Νίκος Γ. λέει:

    Stazybo .. όση ώρα έγραφα το μήνυμα εσύ έστειλες άλλο … οπότε αυτά που αναφέρω αφορούν το μήνυμά σου της Ιουλίου 20, 2014 στις 22:21.
    Θα δω κ το νεότερο κ τα ξαναλέμε ..

  394. Ο/Η XRYSA λέει:

    Καλησπέρα σας και συγχαρητήρια για την εξαιρετική δουλειά στο blog!!! Νομίζω ότι μόνο εδώ μπορώ να βρώ μια λύση στο πρόβλημά μου…. Έχω ένα βιβλίο εργασίας. κάθε φύλλο είναι ξεχωριστό για τους μήνες του έτους. Στο φύλλο «ΙΟΥΛΙΟΣ 14» έχω πινακάκια ανά ημέρα, π.χ. στο B1 γραφω ΔΕΥΤΕΡΑ 21/7. Στο Β2 εισάγω το κείμενο μια κλήσης που εξυπηρετώ καθώς και τα τηλέφωνα του πελάτη μου.Στο Β3 άλλη κλήση κοκ. Στο C1 γράφω ΤΡΙΤΗ 22/7 και ακριβώς από κάτω πληκτρολογώ τις κλήσεις. Θέλω σε ένα νέο φύλλο εργασίας (μέσα στο βιβλίο) να έχω έναν τύπου ο οποίος να ψάξει μέσα σε όλο το βιβλίο εργασίας όσα τηλέφωνα ξεκινούν από 69 και να εισάγει τα κινητά σε ξεχωριστά κελιά. Γίνεται αυτό;;;;;;;

  395. Ο/Η Στεφανία λέει:

    Γιάννη, σ’ ευχαριστώ πολύ για την άμεση απάντησή σου και τις πληροφορίες. Σου εύχομαι ευχάριστες, ξέγνοιαστες διακοπές, με χαλάρωση και ξεκούραση. Να «μπλουμίσεις» στο μπλε ουρανού και θάλασσας και να γυρίσεις φορτσάτος και με γεμάτες τις μπαταρίες για να μας δίνεις τις λύσεις σου και την πολύτιμη γνώση σου.

  396. Ο/Η hana λέει:

    Γεια σας…. Κύριε Γιάννη ειλικρινά σας θαυμάζω! Συγχαρητήρια για την βοήθεια που δίνεται απλόχερα και την ευxέρια που έχετε στο excel και χειρίζεστε με τόση ευκολία κάθε πρόβλημα …Εγώ θα ήθελα την βοήθεια σας στο εξής: Μου φάνηκε αρκετά χρήσιμος ο κώδικας για τον υπολογισμό της συχνότητας των λέξεων (Lexicographer) που έχετε αναρτήσει στην ιστοσελίδα https://varlamis.wordpress.com/2013/09/04/lexicographer03and07/.
    Όμως θα ήθελα να τη προσαρμόσω λιγάκι στις δικές μου ανάγκες και φοβάμαι πως αν πειράξω το κώδικα πολύ πιθανό να μη δουλεύει καθόλου. Θα ήθελα μια μακροεντολή που να υπολογίζει πόσες φορές εμφανίστηκε μια λέξη στο κείμενο, αλλά μόνο τα ουσιαστικά. Θα ήθελα λοιπόν στον υπάρχον κώδικα να προσαρμοστεί μια συνάρτηση ή ρουτίνα (εσείς είστε ο ειδικός!!) που να απομακρύνει από το κείμενο αριθμούς, άρθρα, ρήματα και γενικά κάποιες λέξεις όπως το και , επίσης, κ.τ.λ. Για παράδειγμα τα άρθρα θα μπορούσαν να αφαιρεθούν με μια συνθήκη τύπου: να ξεκινά από ¨τ¨ και το μήκος της λέξης μέχρι 3 γράμματα. Ή για τα ρήματα με μια συνθήκη τύπου: να τελειώνουν σε –ω, -εις, -ει, -με, -ται, κ.τ.λ. Πώς όμως αυτό θα μπορούσε να γίνει πράξη;;; Ευχαριστώ εκ των προτέρων…

  397. Ο/Η Γιάννης Βα λέει:

    Γιάννη, εύχομαι να περνάς τις καλύτερες διακοπές της ζωής σου και όταν με το καλό επιστρέψεις να μου δώσεις λύση στο – πιστεύω αφελές για κάποιον έμπειρο χρήστη – πρόβλημα που αντιμετωπίζω. Εξηγούμαι: Σε ένα φύλλο έχω πίνακα με Χ γραμμές και Ψ στήλες και μέσα στα κελιά διάφορους κωδικούς, όλους με μορφοποίηση κειμένου. Θα ήθελα μετά την τελευταία στήλη να εισάγω μία συνάρτηση η οποία, αφού θα μου ζητάει τον κωδικό της επιλογής μου, θα μου επιστρέφει τη θέση του κωδικού μέσα στη σειρά. Π.χ. αν ο κωδικός που θα δώσω υπάρχει στη στήλη Ε, να μου επιστρέφει 4. (με δεδομένο ότι η στήλη Β αντιστοιχεί στη θέση 2, η στήλη C στη θέση 3 κ.ο.κ.) Αν ο κωδικός εμφανίζεται σε περισσότερες από μία θέσεις, αυτές να εμφανίζονται στα διπλανά κελιά (φαντάζομαι λοιπόν μία συνάρτηση οριζόντιου πίνακα). Ελπίζω να έγινα κατανοητός και ευχαριστώ εκ των προτέρων.

  398. Ο/Η Stazybο Hοrn λέει:

    Στις Υπηρεσίες πάντως, όταν θέλουν να βγάλουν προυπηρεσία κάποιου με το χέρι…

    Νίκο, καταλαβαίνεις ότι και αυτός ο τρόπος πάσχει, και δημιουργεί αδικίες οφειλόμενες σε τυχαιότητα… Είναι πιο απλά πάντως τα πράγματα, για να φτιάξουμε φόρμουλα που θα δουλεύει ακριβώς έτσι, όπως οι υπηρεσίες*:

    =(YEAR(B2)-YEAR(A2)-(MONTH(B2)-(DAY(A2)>=DAY(B2))DAY(B2))-MONTH(A2);12)&"μ "&MOD(30+DAY(B2)-DAY(A2);30)&"η")

    Δεν ξαναβάζω πίνακα. Ανανέωσα το xlsx που έχω ανεβασμένο.

    *η μία μέρα πρέπει να «προστεθεί» στο αποτέλεσμα, κι αν βγάλει 30 μέρες, να μηδενίσουν οι μέρες και να δώσουν έναν επιπλέον μήνα, κι αν οι μήνες γίνουν 12, να μηδενίσουν κι αυτοί, και να δώσουν ένα επιπλέον έτος…

  399. Ο/Η Νίκος Γ. λέει:

    Stazybo
    η συνάρτηση που ανεβασες 25/7 – 00.33 μου βγάζει «σφάλμα» …. κάτι γίνεται με τις παρενθέσεις νομίζω. Αν μπορείς την ξανακοιτάς.
    Όσον αφορα την άλλη που ανέβασες πριν από αυτή … 21/7 – 21.40 … την δοκίμασα … καλά πήγαινε … όσπου .. 25/2/2000 – 1/4/2000 έδωσε 0ε 1μ 8η
    25/2/2000 – 1/5/2000 έδωσε 0ε 2μ 7η
    25/2/2000 – 1/6/2000 έδωσε 0ε 3μ 8η
    enyway .. πάλι ο Φλεβάρης νομίζω την κάνει τη ζημιά
    καλό σ/κ .. τα λέμε από Δευτέρα

  400. Ο/Η Stazybο Hοrn λέει:

    Ακριβώς, τα αναμενόμενα αποτελέσματα, δηλαδή. Δεν είναι λάθος βάσει της λογικής της, που εξήγησα.

    Όσο για την «υπηρεσιακή», την έκανα βιαστικά, και ήδη είδα ότι θέλει να προσέξω μια δυο περιπτώσεις ακόμη.

  401. Ο/Η Stazybο Hοrn λέει:

    Για όποιον αντέχει ακόμα. Η «υπηρεσιακή» διαφορά ημερομηνιών, για συμβάσεις, προϋπηρεσίες, κλπ.:

    =YEAR(B2)-YEAR(A2)-(MONTH(B2)-(DAY(A2)>DAY(B2))DAY(B2))-MONTH(A2)+(DAY(B2)-DAY(A2)=30);12)&"μ "&MOD(30+DAY(B2)-DAY(A2);30)&"η"

    Ή καλύτερα, εφόσον λογαριάζεται και η ημέρα έναρξης:

    =YEAR(B2)-YEAR(A2)-(MONTH(B2)-(DAY(A2)>DAY(B2))DAY(B2))-MONTH(A2)+(DAY(B2)-DAY(A2)=30);12)=11;MOD(30+DAY(B2)-DAY(A2);30)=29)&"ε "&MOD(MOD(12+MONTH(B2)-(DAY(A2)>DAY(B2))-MONTH(A2)+(DAY(B2)-DAY(A2)=30);12)+(MOD(30+DAY(B2)-DAY(A2);30)=29);12)&"μ "&MOD(MOD(30+DAY(B2)-DAY(A2);30)+1;30)&"η"

    Για παραδείγματα, κλπ, εδώ.

  402. Ο/Η vioannis λέει:

    Τις λίγες ημέρες του Ιουλίου που απουσίαζα από το ιστολόγιο αρκετοί φίλοι άφησαν σχόλια: Κώστας (20/7), XRYSA (22/7), Evi (24/7), hana(24/7), Γιάννης Βα(24/7). Για τα ενδιαφέροντα θέματα που έθεσαν, θα πω την άποψή μου τις αμέσως επόμενες ημέρες. Ευχαριστώ επίσης τους φίλους Νίκο Γ. και Stazybο Hοrn για τον κόπο που έκαναν, με αλλεπάλληλα σχόλια, να εντοπίσουν και να αναδείξουν τα σφάλματα της συνάρτησης φύλλου του excel DATEDIF, και να καταθέσουν την εμπειρία τους στο θέμα της καταμέτρησης του χρόνου. O Stazybο μάλιστα, έχει μοιραστεί μαζί μας, τη δουλειά του με συναρτήσεις φύλλου, για το θέμα. Τελικά το θέμα της DATEDIF είναι πολύ πιο δύσκολο από ότι αρχικά έδειχνε, διότι τελικά δεν είναι μόνο θέμα υπολογισμών αλλά και ορισμών.

  403. Ο/Η vioannis λέει:

    Κώστας (20/7).
    Το πολύ ενδιαφέρον ερώτημα του Κώστα είναι: “σε δυο στήλες με πολλές γραμμές, περίπου 900, που περιέχουν φράσεις, πως θα αλλάξω το χρώμα ή το μέγεθος κλπ μιας λέξης ή δυο οι οποίες επαναλαμβάνονται;”. To excel έχει το εργαλείο “Εύρεση”, αλλά η εύρεση επιστρέφει ολόκληρο το κελί στο οποίο εντοπίζει τη λέξη που ψάχνω, και δίνει τη δυνατότητα μορφοποίησης μόνο σε ολόκληρο το κελί και όχι σε τμήμα του. Για να μορφοποιήσω μόνο τη λέξη (φράση, συλλαβή, γράμμα) που με ενδιαφέρει, μόλις εντοπιστεί το κελί, πρέπει να μπω σε κατάσταση διόρθωσης, (F2), να επιλέξω τη λέξη και τότε να αλλάξω χρώμα ή μέγεθος γραμματοσειράς, να βάλω υπογράμμιση κλπ. Για να γίνει μαζικά, για πολλές εμφανίσεις της λέξης η παραπάνω δουλειά, πρέπει φυσικά να τρέξω μια μακροεντολή. Αλλά εδώ υπάρχουν ένα-δύο μικρά πρόσθετα προβλήματα. Η “εύρεση” δεν δίνει πληροφορίες αν στο κελί υπάρχουν περισσότερες από μία εμφανίσεις της λέξης, και καμία vba διαδικασία δεν μπορεί να τρέξει σε κατάσταση διόρθωσης. Έτσι ο εντοπισμός των εμφανίσεων της ζητούμενης λέξης, η επιλογή τους και τελικά η μορφοποίηση τους, γίνεται με την παρακάτω μάκρο, η οποία δουλεύει με ένα άλλο τρόπο, λίγο αργό, αλλά αποτελεσματικό. Πέρασέ την, λοιπόν, σε ένα module του βιβλίου σου ή σε ένα module του personal βιβλίου σου, αν πρόκειται να τη χρησιμοποιείς συχνά, σε διάφορα βιβλία σου. Δουλεύει ως εξής: Επιλέγεις την περιοχή μέσα στην οποία θέλεις να ψάξεις. Καλείς τη μάκρο και αυτή σου ζητάει τη λέξη (φράση, συλλαβή, γράμμα, σύμβολο…) για την οποία ψάχνεις, την πληκτρολογείς στο πλαίσιο που εμφανίζεται ή την επικολλάς (αν έχεις φροντίσει πριν καλέσεις τη μάκρο να την αντιγράψεις) ή εισάγεις τη διεύθυνση ενός κελιού το οποίο περιέχει τη ζητούμενη λέξη και πάτα ΟΚ. Θα δεις όλες τις εμφανίσεις τις λέξης να χρωματίζονται κόκκινες, να γίνονται bold, να αποκτούν μέγεθος 12 και να υπογραμμίζονται. Χρώμα και υπόλοιπες λεπτομέρειες μπορείς να τα αλλάξεις, θα βρεις οδηγίες μέσα στον κώδικα:

    Sub WordsChangeFont()
    'από το Excel Λύσεις, 2014
    Dim lexi As String
    Dim perioxi As String
    
    Dim kelia As Range
    Dim keli As Range
    
    Dim alen As Integer
    Dim rlen As Integer
    Dim pl As Integer
    Dim job As Integer
    Dim iInStr As Integer
    Dim i As Integer
    Dim meter As Integer
    

    If TypeName(Selection) <> "Range" Then Exit Sub

    Set kelia = Application.Intersect(Selection, ActiveSheet.UsedRange)
    If kelia Is Nothing Then GoTo telos
    
    perioxi = kelia.Address(0, 0)
    lexi = Application.InputBox(prompt:="Τι ψάχνω να βρώ;", _
        Title:="Στην περιοχή " & perioxi, Type:=2)
    If lexi = vbNullString Then GoTo telos
    For Each keli In kelia
    If Not IsEmpty(keli) Then
        If Not IsError(keli) Then
            alen = Len(keli)
            rlen = Len(Replace(keli, lexi, ""))
            pl = (alen - rlen) / Len(lexi)
            job = 0
            
            For i = 1 To pl
            iInStr = InStr(1 + job, keli, lexi)
            job = iInStr
            With keli.Characters(Start:=iInStr, Length:=Len(lexi))
            .Font.Color = RGB(255, 0, 0)
                'Αλλα χρώματα:
                'RGB(0, 0, 0)μαύρο
                'RGB(255, 255, 0)κίτρινο
                'RGB(255, 165, 0)πορτοκαλί
                'RGB(0, 0, 255)μπλε
                'RGB(0, 128, 0)πράσινο
                'RGB(128, 0, 128)μωβ
    
            'Η επόμενη γραμμή του κώδικα μετατρέπει τους χαρακτήρες
            'σε έντονους(bold). Απενεργοποιήστε ή διαγράψτε αυτή τη γραμμή
            'κώδικα ή ορίστε την σε False, αν δεν την θέλετε:
            .Font.Bold = True
            'Το ίδιο, για πλάγιους (Italic) χαρακτήρες:
            .Font.Italic = False
            'Το ίδιο για υπογράμμιση των χαρακτήρων:
            .Font.Underline = True
            'Στην επόμενη ορίζετε το μέγεθος των χαρακτήρων.
            .Font.Size = 12
            meter = meter + 1
            End With
            Next i
            
        End If
    End If
    Next keli
    
    telos:
    If meter > 0 Then
        MsgBox "Βρήκα  " & meter
        Else: MsgBox "Δε βρήκα τίποτα"
    End If
    End Sub
    

    Κατέβασε αν θες το βιβλίο WordsChangeFont.xls για να δεις άμεσα τη μάκρο σε λειτουργία.

  404. Ο/Η vioannis λέει:

    XRYSA (22/7)
    Η Χρύσα έχει το παρακάτω πρόβλημα: Σε διάφορα κελιά διάφορων φύλλων, ενός βιβλίου έχει καταγράψει τηλέφωνα, μαζί με άλλες πληροφορίες, ονόματα, άλλο κείμενο κλπ, πιθανά στο ίδιο κελί. Θέλει ένα “μαγικό μάτι” βρει όλα αυτά τα τηλέφωνα και μάλιστα μόνο όσα από αυτά αρχίζουν από 69, και ένα “μαγικό χέρι” να τα μαζέψει όμορφα και νοικοκυρεμένα σε ένα νέο φύλλο μέσα στο βιβλίο της. Το μαγικό αυτό ψαχτήρι θα είναι φυσικά μία μακροεντολή που θα διατρέχει όλα τα φύλλα του βιβλίου και όλα τα κελιά, θα βρίσκει 10-ψήφιες ακολουθίες που θα αρχίζουν από 69 και που θα είναι ή θα μοιάζουν με αριθμούς. Προϋπόθεση για να δουλέψει η μάκρο αποτελεσματικά, είναι τα 10 ψηφία του τηλεφώνων να έχουν πληκτρολογηθεί συνεχόμενα χωρίς κενά ή παύλες. Αν πάλι δεν είναι γραμμένα έτσι, αλλά με ένα άλλο τυποποιημένο όμως τρόπο, ο κώδικας μπορεί να τροποποιηθεί και να δουλέψει. Δοκίμασε αρχικά, Χρύσα, τη μάκρο που θα δεις πιο κάτω και τα ξαναλέμε. Τρέξε τον κώδικα μέσα από οποιοδήποτε φύλλο του βιβλίου σου και θα δεις να προστίθεται ένα νέο φύλλο με όνομα που αρχίζει με 69PhoneList. Το φύλλο θα μαζέψει όλα τα τηλέφωνα που θες. Αν ξανατρέξεις την μάκρο μέσα από το ίδιο βιβλίο, δεν θα ψάξει στο φύλλο αυτό για να αποφύγει διπλές εγγραφές τηλεφώνων. Για να το εξασφαλίσεις αυτό, μην αλλάζεις το αρχικό αυτό τμήμα (69PhoneList) του ονόματος του φύλλου. Το πρόβλημα ένα αρκετά παρόμοιο πρόβλημα με του Κώστα στο προηγούμενο σχόλιό μου, για αυτό θα βρείτε πολλές ομοιότητες στον κώδικα.

    Sub PhonesStartingFrom69()
    'από το Excel Λύσεις, 2014
    Dim CurrentSheet As Worksheet
    Dim keli As Range
    Dim phon As Variant
    Dim Varr() As Variant
    Dim alen As Integer
    Dim rlen As Integer
    Dim pl As Integer
    Dim job As Integer
    Dim iInStr As Integer
    Dim i As Integer
    Dim k As Integer
    
    For Each CurrentSheet In ActiveWorkbook.Worksheets
    CurrentSheet.Activate
    If Not Left(CurrentSheet.Name, 11) = "69PhoneList" Then
        For Each keli In ActiveSheet.UsedRange
            If Not IsEmpty(keli) Then
            If Not IsError(keli) Then
                alen = Len(keli)
                rlen = Len(Replace(keli, "69", ""))
                pl = (alen - rlen) / 2
                job = 0
                
                For i = 1 To pl
                    iInStr = InStr(1 + job, keli, "69")
                    job = iInStr
                    With keli
                    phon = Mid(keli, iInStr, 10)
                        If phon > 10 ^ 9 And phon < 10 ^ 10 Then
                            k = k + 1
                            ReDim Preserve Varr(k)
                            Varr(k) = phon
                        End If
                    End With
                Next i
            End If
            End If
        Next keli
    End If
    Next CurrentSheet
    Sheets.Add After:=Sheets(Sheets.Count)
    With ActiveSheet
    .Name = "69PhoneList" & Format(Date, "yymmdd") & Format(Time, "hhmmss")
    Columns("A:A").NumberFormat = "@"
    On Error Resume Next
    For k = 1 To UBound(Varr)
    Cells(k, 1) = Varr(k)
    Next k
    Columns("A:A").AutoFit
    End With
    On Error GoTo 0
    End Sub
    
    

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

    =MID('ΙΟΥΛΙΟΣ 14'!B2;FIND("69";'ΙΟΥΛΙΟΣ 14'!B2;1);10)
    

    Η παραπάνω συνάρτηση επιστρέφει το 69 και τους 8 χαρακτήρες που ακολουθούν, που θα βρει γραμμένους στο κελί Β2 του φύλλου ΙΟΥΛΙΟΣ 14. Επειδή γράφεις: “Στο Β2 εισάγω το κείμενο μια κλήσης που εξυπηρετώ καθώς και τα τηλέφωνα του πελάτη μου” υποθέτω ότι ο αριθμός τηλεφώνων σε κάθε κελί ποικίλει, και η λύση με συνάρτηση φύλου δεν είναι ρεαλιστική.

  405. Ο/Η XRYSA λέει:

    Κε Γιάννη χίλα ευχαριστώ και για τον χρόνο σας και τον κόπο σας να με εξυπηρετήσετε!!!! Έχω ένα προβληματάκι όμως :(
    Εισάγω τη μακροεντολή αλλά στο If phon 10 ^ 9 Then χτυπάει και κοκκινίζει την γραμμή. όταν τρέχω την μακροεντολή μου βγάζει μήνυμα: Expected: Then or Go To και μαρκάρει το 10
    Έχω κάνει κάτι λάθος; (Δεν έχω ιδέα βέβαια από μακροεντολές !!!! )

  406. Ο/Η vioannis λέει:

    Χρύσα, ξαναδοκίμασε τον κώδικα και πες μου, τον διόρθωσα, υπήρχε λάθος.

  407. Ο/Η XRYSA λέει:

    ΚΕ ΓΙΑΝΝΗ;;;;;; ΕΙΣΤΕ ΘΕΟΣ !!!!!!!! ΔΟΥΛΕΨΕ ΤΕΛΕΙΑ !!!!!!!!!!!!!!!! ΧΙΛΙΑ ΧΙΛΙΑ ΕΥΧΑΡΙΣΤΩ !!!!!!!!!!!!!!!!!!

  408. Ο/Η vioannis λέει:

    Hana (24/7)
    Αγαπητή hana, θέλεις από τον τελικό πίνακα των λέξεων που δημιουργεί ο λεξικογράφος, να κρατήσεις μόνο τα ουσιαστικά. Σίγουρα την τελική δουλειά θα την κάνεις χειριστικά, αλλά ζητάς τουλάχιστον ένα μεγάλο μέρος λέξεων, σαν αυτές που περιγράφεις στο σχόλιό σου, να διαγράφονται αυτόματα ώστε να έχεις να χειριστείς ένα μικρότερο πίνακα. Πιο κάτω θα βρεις μια μακροεντολή όπου σχετικά εύκολα μπορείς να συμπληρώσεις τον κώδικά της, με όσες περιπτώσεις εσύ κρίνεις ότι θα δώσουν σωστές διαγραφές. Εγώ έβαλα αυτές που περιγράφεις, (εκτός της: –εις, διαγράφει και ουσιαστικά: πόλεις). Άλλες δεν τολμώ να βάλω, διότι δεν έχω πολύ σπουδαίες γνώσεις γραμματικής. Τη μακροεντολή DeleteSpecialWords θα αντιγράψεις στο ίδιο module που είναι γραμμένος και ο κώδικας της Sub Lexicographer, και αφού την συμπληρώσεις, την τρέχεις από το φύλλο με τον πίνακα των λέξεων. Στη φάση των δοκιμών που θα κάνεις, η μάκρο θα σημειώνει δεξιά στη στήλη C, τις υπό διαγραφή λέξεις. Όταν ολοκληρώσεις τις δοκιμές σου και είσαι σίγουρη για τα αποτελέσματα που θα παράγει ο κώδικάς σου, τότε ενεργοποίησε τις τρεις τελευταίες γραμμές του κώδικα που κάνουν την πραγματική διαγραφή και για την ώρα είναι απενεργοποιημένες με μία απόστροφο εμπρός τους (‘). Αν δεν θέλεις να καλείς τη μάκρο DeleteSpecialWords αυτόνομα, αλλά να καλείται αυτόματα μέσα από την Lexicographer, τότε προς το τέλος του κώδικα της Lexicographer, και αμέσως πριν από τη γραμμή telos: πρόσθεση τη γραμμή

    Call DeleteSpecialWords
    

    Δες και τις οδηγίες που έχω γράψει μέσα στον κώδικα.

    Sub DeleteSpecialWords()
    'από το Excel Λύσεις, 2014
    Dim r As Long
    Dim pl As Long
    Dim fonien As Integer
    Dim lexi As String
    Dim arrTONOS As Variant
    Dim arrATONO As Variant
    Dim flag As Boolean
    
    arrTONOS = Array("ά", "έ", "ή", "ί", "ό", "ύ", "ώ", "ς")
    arrATONO = Array("α", "ε", "η", "ι", "ο", "υ", "ω", "σ")
    pl = Application.WorksheetFunction.CountA(Range("A:A"))
    
    For r = 1 To pl
        lexi = LCase(Cells(r, "A").Value)
        For fonien = 0 To 7
            lexi = Replace(lexi, arrTONOS(fonien), arrATONO(fonien))
        Next
        
        flag = False
        
        'Ολόκληρες λέξεις:
        Select Case lexi
        Case "απο", "και", "να", "θα", "οταν", "σαν", "ωστε", "ειναι": flag = True
        Case "επισησ", "αν", "αντι", "προσ", "ασ", "για", "ωσ": flag = True
        Case "ετσι", "καθε", "σε", "ενα", "δυο", "καθως", "δεν": flag = True
        Case "διοτι", "εωσ", "γιατι", "καθωσ", "μαζι", "λοιπον", "μεταξυ": flag = True
        Case "μεσα", "εξω", "πανω", "κατω", "ανω", "ολα", "ολοι", "ολο": flag = True
        '.................................
        'πρόσθεσε όσα Case θέλεις
        'όλες οι λέξεις γράφονται με άτονα πεζά και
        'το τελικό ς το γράφεις πάντα σ
        End Select
        
        If flag = True Then GoTo JumpNextCase
        
        'Λέξεις με συνθήκες:
        Select Case True
        Case IsNumeric(lexi): flag = True 'αριθμοί
        Case Len(lexi) = 1: flag = True 'μονογράμματες λέξεις
        Case Len(lexi) = 2: flag = True 'λέξεις με 2 γράμματα
        Case Len(lexi) = 3 And Left(lexi, 1) = "τ": flag = True ' λέξεις 3 γραμμάτων που αρχίζουν από τ
        Case Right(lexi, 1) = "ω": flag = True ' λέξεις που τελειώνουν σε ω
        Case Right(lexi, 2) = "ει": flag = True 'λέξεις που τελειώνουν σε ει
        Case Right(lexi, 2) = "με": flag = True 'λέξεις που τελειώνουν σε με
        Case Right(lexi, 3) = "ται": flag = True 'λέξεις που τελειώνουν σε ται
        '.................................
        'πρόσθεσε όσα Case θέλεις
        'όλες οι λέξεις γράφονται με άτονα πεζά και
        'το τελικό ς το γράφεις πάντα σ
        
        End Select
        
    JumpNextCase:
        If flag = True Then Cells(r, "C") = "διαγραφή"
    Next r
    'For r = pl To 1 Step -1
    'If Cells(r, "C").Value = "διαγραφή" Then Cells(r, "C").EntireRow.Delete
    'Next r
    End Sub
    

    Όταν ολοκληρώσεις, αν θες, μοιράσου τη δουλειά σου μαζί μας.

  409. Ο/Η vioannis λέει:

    Γιάννης Βα (24/7)
    Ο συνονόματός μου Γιάννης Β, έχει αλφαριθμητικά (κωδικούς) διατεταγμένα σε ορθογώνιο πίνακα. Θέλει μια συνάρτηση που να δέχεται καθ έναν από τους κωδικούς αυτούς, και να επιστρέφει τον αριθμό της στήλης που βρίσκεται ο κωδικός. Επειδή δε οι κωδικοί δεν είναι πάντα μοναδικοί μέσα στον πίνακα, η συνάρτηση να επιστρέφει τους αριθμούς στηλών για όλες τις εμφανίσεις του κωδικού. Φυσικά μια τέτοια συνάρτηση, που θα επιστρέφει περισσότερους από έναν αριθμούς θα είναι μια συνάρτηση-πίνακας (Ctrl+Shift+Enter συνάρτηση), άρα το πρόβλημα έχει τις δυσκολίες του. Περισσότερες από μία λύσεις όχι μόνο για αριθμούς στηλών αλλά και για αριθμούς γραμμών θα βρεις στο βιβλίο ColumnAndRowNumber.xlsx

  410. Ο/Η Γιάννης Βα λέει:

    Κύριε Γιάννη σας ευχαριστώ πολύ για τον κόπο που κάνετε να δώσετε λύσεις στα προβλήματά μας. Είδα την απάντηση και το σχετικό βιβλίο ColumnAndRowNumber,xlsx που μου στείλατε.
    Πράγματι δουλεύει άψογα! Τι να πω; Τόσες ώρες δουλειάς κερδισμένες, πως να τις αντισταθμίσω με ένα «ευχαριστώ»; Έχετε τον απεριόριστο σεβασμό μου!

  411. Ο/Η hana λέει:

    Κύριε Γιάννη δουλεύει άψογα…Ειλικρινά κάνετε θαύματα με το ecxel..Ότι και αν πω είναι λίγο..Συγχαρητήρια..Ωστόσο θα σας βάλω σε λιγάκι πιο βαθιά ερωτήματα. προκειμένου να περιορίσω τα αποτελέσματα της Sub Lexicographer, θα εμπλουτίσω τις περιπτώσεις διαγραφής, πώς όμως θα μπορούσα να αποφύγω τις επαναλήψεις;;; Δηλαδή όταν τρέχω το κώδικα σε ένα κείμενο θα μου βγάλει στα αποτελέσματα τις λέξεις «αναπαράσταση», «αναπαραστάσεων», «αναπαράστασης» κλπ. Δηλαδή ένα ουσιαστικό οταν εμφανίζεται σε διαφορετικές πτώσεις ή στο πληθυντικό, θεωρείται ότι είναι διαφορετικές λέξεις. Σκεφτόμουν πως μια υπορουτίνα συνένωσης αυτών των περιπτώσεων θα βοηθούσε. Για παράδειγμα:
    Α) Περίπτωση 2 λέξεις να έχουν ίσο αριθμό γραμμάτων
    Έστω ότι εμφανίζονται δυό λέξεις με μήκος 7 γράμματα όπως «εμπόδιο» και «εμπόδια», να υπάρχει εντολή που να λέει πως αν υπάρχουν λέξεις μήκους 7 και έχουν τα 6 πρώτα γράμματα ίδια ([αριμός γραμμάτων της λέξης]- 1) τότε να αντικαθιστούμε τη δευτερη με τη πρώτη.Αναλόγως για λέξεις με μήκος από 4 έως 15 γραμμάτων (15 θεωρώ ότι είναι ένα καλό όριο μήκους!!).
    Β)Περίπτωση 2 λέξεις να έχουν διαφορετικό αριθμό γραμμάτων (διαφέρουν κατά 1 γράμμα)
    Έστω ότι εμφανίζονται δυό λέξεις με μήκος 8 και 9 γράμματα αντίστοιχα όπως «ανάπτυξη» και «ανάπτυξης», αν υπάρχουν λέξεις μήκους 8 και 9 αντίστοιχα και έχουν τα 7 πρώτα γράμματα ίδια ([αριμός γραμμάτων της μικρότερης λέξης]- 1) τότε να αντικαθιστούμε τη δευτερη με τη πρώτη. Αναλόγως για λέξεις με μήκος από 4 έως 15 γραμμάτων.
    Γ)Περίπτωση 2 λέξεις να έχουν διαφορετικό αριθμό γραμμάτων (διαφέρουν κατά 2 γράμματα)
    Τώρα στη περίπτωση που εμφανίζονται οι λέξεις «πόλη» και «πόλεων», να υπάρχει εντολή που να λέει πως αν υπάρχουν λέξεις μήκους 4 και 6 αντίστοιχα και έχουν τα 3 πρώτα γράμματα ίδια ([αριμός γραμμάτων της μικρότερης λέξης]- 1) τότε να αντικαθιστούμε τη δευτερη με τη πρώτη. Αναλόγως για λέξεις με μήκος από 4 έως 15 γραμμάτων.

    Εχω την αίσθηση πως έχω καλύψει τις περιπτώσεις. Πώς όμως αυτό θα μπορούσε να γίνει σε κώδικα;;;
    Ευχαριστώ εκ των προτέρων…

  412. Ο/Η Νίκος Γ. λέει:

    Γιάννη …
    Stazybo …
    κ σε όλους τους φίλους του Ιστολογίου … Καλησπέρα
    Αποφάσισα κ γω λίγες ημέρες διακοπές, οπότε ευκαιρία για αποτοξίνωση από τις συναρτήσεις χρόνου κ λοιπά θέματα δουλειάς.
    Stazybo οι συναρτήσεις των «υπηρεσιών» που ανέβασες 25/7 – 22.27 μου βγάζουν κ αυτές «σφάλμα» … συγκεκριμένα πάει ο cursor κ κάθεται πάνω στο τρίτο, από αριστερά, DAY … . ή δεύτερο, από αριστερά, DAY B2. Έχω την εντύπωση κάτι γίνεται με τις παρενθέσεις ή λείπει κάποιος τελεστής.
    Τέλος πάντων .. καλοκαίρι είναι τώρα … ας είναι πιο χαλαρά τα πράγματα !!
    Καλό καλοκαίρι εύχομαι σε όλους κ καλά να περνάτε.

  413. Ο/Η Stazybο Hοrn λέει:

    Μια χαρά είναι όλα· πάρτες απ’ το αρχείο που έχω ανεβάσει.

  414. Ο/Η Γιάννης Βα λέει:

    Κύριε Γιάννη καλησπέρα. Σε ένα φύλο (αρκετά μεγάλο), έχω διάφορα δεδομένα. Στο ίδιο φύλο, σε κάποια (πολλά) κελιά έχω τύπους, που μου δίνουν κάποια αποτελέσματα σε κάποια άλλα κελιά. Ερώτηση: Μπορώ και αν ναι με ποιο τρόπο, να καλώ τους τύπους όποτε εγώ θέλω, δηλαδή να μου δίνουν αποτελέσματα με την ενεργοποίηση κάποιας μακροεντολής; Το ζητάω αυτό επειδή το φύλο είναι όντως μεγάλο και όλοι αυτοί οι τύποι το βαραίνουν πολύ. Νομίζω ότι κάπου μέσα στο ιστολόγιό σας, κάποιος φίλος ζητούσε κάτι παρόμοιο, αλλά όσο κι’ αν έψαξα δεν κατάφερα να το εντοπίσω Ευχαριστώ εκ των προτέρων.

  415. Ο/Η Manto λέει:

    Πολλά συγχαρητήρια για την εξαιρετική δουλειά που κάνετε! Έχω να μάθω πολλά από εδώ!
    Θα ήθελα αν γνωρίζεται να μου λύσεται μια απορία που αφορά τα φίλτρα του excel όταν υπάρχουν σύνολα και υποσύνολα. Στο excel υπάρχουν φύλλα ανά μήνα και σε κάθε μήνα καταχωρούμε κάποια οικονομικά δεδομένα ανά ημέρα. Για κάθε ημέρα υπάρχουν σύνολα (sum) και στο τέλος του μήνα στο τέλος των καταχωρήσεων έχω υποσύνολα {subtotal(9;A2:A1000)} για να έχω αποτελέσματα κι όταν φιλτράρω. Κάποιες φορές όμως αυτά τα φίλτρα δεν λειτουργούν, δηλ. φιλτράρω ένα άτομο και μου εμφανίζει τα οικονομικά του δεδομένα χωρίς όμως τα υποσύνολα του μήνα. Είμαι σίγουρη ότι δεν πειράζω κάτι στα φίλτρα σε αντίθεση με την διευθύντρια μας που είναι σίγουρη ότι τα πειράζουμε. Υπάρχει κάποια εξήγηση γι’αυτό που γίνεται;
    Σας ευχαριστώ εκ των προτέρων.

  416. Ο/Η vioannis λέει:

    Manto,καλώς όρισες στο ιστολόγιο. Σε ένα φύλλο μπορεί να συμβαίνουν πάρα πολλά, από απλές αστοχίες του χρήστη, έως δυσλειτουργία ενός φύλλου η οποία μεταφέρεται και σε άλλα φύλλα αν το φύλλο αντιγράφεται. Λάθη στα ορίσματα της συνάρτησης και ειδικά στο εύρος δράσης της subtotal μπορούν να εμφανίσουν το λάθος αυτό. Στο παράδειγμα που αναφέρεις, subtotal(9;A2:A1000), αν η συνάρτηση, από κάποια αστοχία, γίνει subtotal(9;A2:A100), δεν θα δουλέψει για τους πελάτες που πρωτοεμφανίζεται μετά τη γραμμή 100. Επίσης αριθμοί που για κάποιο λόγο έχουν εισαχθεί σαν κείμενο, δεν συμμετέχουν στα αθροίσματα και άλλα πολλά. Βέβαια για τις εκδόσεις 2003 και 2007 έχουν αναφερθεί προβλήματα με την subtotal. Δες εδώ: http://support.microsoft.com/KB/831824
    Αν είναι αυτή η περίπτωση, πρέπει να αποτανθείς στον συντηρητή του συστήματος.

  417. Ο/Η vioannis λέει:

    Γιάννη Βα, δεν χρειάζεται μακροεντολή. Πήγαινε: Επιλογές, Τύποι, Επιλογές Υπολογισμού και τσεκάρισε: Μη αυτόματος (και για να μην καθυστερεί η αποθήκευση ξε-τσεκάρισε: Νέος υπολογισμός βιβλίου εργασίας πριν από την αποθήκευση. Περιγράφω από excel 2010). Τώρα το βιβλίο είναι “ελαφρό” στη χρήση, οι συναρτήσεις δεν υπολογίζονται σε κάθε αλλαγή κελιού και έτσι το βιβλίο δεν σέρνει. Όταν θέλεις να υπολογιστούν οι συναρτήσεις πάτα F9, και καλλίτερα για να υπολογιστούν όλες οι αλληλεξαρτήσεις των συναρτήσεων σε όλα τα φύλλα πάτα CTRL + ALT + SHIFT + F9. Πάντως η vba εντολή που ακυρώνει τον αυτόματο υπολογισμό είναι:
    Application.Calculation = xlCalculationManual
    Για να κάνεις όλους τους υπολογισμούς:
    Application.CalculateFull
    Για να επαναφέρεις τον αυτόματο υπολογισμό:
    Application.Calculation=xlCalculationAutomatic

  418. Ο/Η Γιάννης Βα λέει:

    Κύριε Γιάννη, κατ’ αρχήν να σας ευχαριστήσω για την άμεση ανταπόκριση στο πρόβλημά μου. Ίσως όμως να μην ήμουν πολύ σαφής στην περιγραφή μου. Αυτό που θα ήθελα είναι να μπορώ να ακυρώνω τον υπολογισμό σε κάποιους συγκεκριμένους τύπους (για την ακρίβεια οι τύποι είναι δύο και βρίσκονται σε δύο στήλες με μήκος 700 περίπου κελιά η κάθε μια),και όχι σε όλους, (όλα τα υπόλοιπα: τύποι, μακροεντολές να τρέχουν κανονικά) και φυσικά όποτε θέλω να επαναφέρω τον υπολογισμό του τύπου που βρίσκεται σ’ αυτά τα κελιά. Αυτά και ευχαριστώ για άλλη μια φορά.

  419. Ο/Η vioannis λέει:

    Αγαπητή hana. H vb δύσκολα θα σε προδώσει, αλλά η γλώσσα είναι ατίθαση, σχεδόν αναρχική, ασφυκτιά όταν πας να την κλείσεις σε κανόνες. Πρόσεχε μην σε προδώσει! Τέλος πάντων δεν είμαι ειδικός, άλλωστε, ο φιλόλογός μου στο Λύκειο έλεγε κακές κουβέντες για μένα. Σου ετοίμασα τον κώδικα που ζητάς, Στις δοκιμές που έκανα, αντικατέστησε τη λέξη πόλεων από τη λέξη πόλη αλλά και το γνωμικό από τη γνώμη και για αυτό δεν μπορώ να κάνω κάτι. Τρέξε την DeleteSpecialWordsPartII στην αρχή ανεξάρτητα, θα σου βάλει στη στήλη D δίπλα από τις λέξεις που έχει αντικαταστήσει τα γράμματα a, b, c ανάλογα από ποια περίπτωση προέκυψε η αντικατάσταση. Για να ολοκληρωθεί η τελική διαγραφή πρέπει να ενεργοποιήσεις τις γραμμές του κώδικα που είναι με απόστροφο. Η μάκρο είναι αργή διότι εκτελεί χιλιάδες συγκρίσεις, να έχεις υπομονή. Για να μειώσω τον όγκο της δουλειάς της, χρησιμοποιώ στο παρασκήνιο τις στήλες D, E & F του φύλλου με τον πίνακα των λέξεων. Μην έχεις τίποτα σημειώσεις εκεί, γιατί θα διαγραφούν. Μπορείς να την καλέσεις από την προηγούμενη μάκρο. Πριν το End Sub της DeleteSpecialWords γράψε

     
    Call DeleteSpecialWordsPartII
    

    Μην την καλέσεις όμως μέσα από την Lexicographer διότι το σύνολο θα είναι πολύ βαρύ και οι πόροι ενός οικιακού συστήματος δύσκολο να τα βγάλουν πέρα. Καλή επιτυχία!

    Sub DeleteSpecialWordsPartII()
    
    Application.ScreenUpdating = False
    
    Dim r As Long
    Dim rr As Long
    Dim pl As Long
    Dim fonien As Integer
    Dim alexi As String
    Dim blexi As String
    Dim arrTONOS As Variant
    Dim arrATONO As Variant
    Dim La As Integer
    Dim Lb As Integer
    Dim sortRange As Range
    
    arrTONOS = Array("ά", "έ", "ή", "ί", "ό", "ύ", "ώ", "ς")
    arrATONO = Array("α", "ε", "η", "ι", "ο", "υ", "ω", "σ")
    pl = Application.WorksheetFunction.CountA(Range("A:A"))
    
    For r = 1 To pl
    Cells(r, "D") = Len(Cells(r, "A"))
    Next r
    
    Set sortRange = Range(Cells(1, 1), Cells(pl, "F"))
    
    sortRange.Sort Key1:=Range("D1"), Order1:=xlAscending, _
        Key2:=Range("A1"), Order2:=xlAscending, Header:=xlNo
    
    Range("D:D").ClearContents
    
    For r = 1 To pl
        alexi = LCase(Cells(r, "A").Value)
        For fonien = 0 To 7
        alexi = Replace(alexi, arrTONOS(fonien), arrATONO(fonien))
        Next fonien
    
    For rr = r + 1 To pl
        blexi = LCase(Cells(rr, "A").Value)
        For fonien = 0 To 7
        blexi = Replace(blexi, arrTONOS(fonien), arrATONO(fonien))
        Next fonien
    
    La = Len(alexi)
    Lb = Len(blexi)
    
    If IsEmpty(Cells(rr, "F")) Then
    
    'Α περίπτωση
    If La > 3 Then
    If La = Lb Then
    If Left(alexi, La - 1) = Left(blexi, Lb - 1) Then
        blexi = alexi
        Cells(rr, "E") = blexi
        Cells(rr, "F") = "A"
    End If
    End If
    End If
    
    'Β περίπτωση
    If La > 3 Then
    If La = Lb - 1 Then
    If alexi = Left(blexi, Lb - 1) Then
        blexi = alexi
        Cells(rr, "E") = blexi
        Cells(rr, "F") = "B"
    End If
    End If
    End If
    
    'Γ περίπτωση
    If La > 3 Then
    If Left(alexi, La - 1) = Left(blexi, Lb - 3) Or Left(alexi, La - 1) = Left(blexi, Lb - 2) Then
        blexi = alexi
        Cells(rr, "E") = blexi
        Cells(rr, "F") = "C"
    End If
    End If
    
    End If
    Next rr
    If VBA.IsEmpty(Cells(r, "E")) Then Cells(r, "E") = Cells(r, "A")
    Next r
    
    sortRange.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo
    
    Columns("D:E").Delete Shift:=xlToLeft
    
    'For r = pl To 1 Step -1
    'If Not IsEmpty(Cells(r, "D")) Then Cells(r, "F").EntireRow.Delete
    'Next r
    
    Application.ScreenUpdating = True
    
    End Sub
    
    
    
    
  420. Ο/Η Κασαπάκης Μιχάλης λέει:

    Τώρα που γύρισες φρέσκος από τις διακοπές, να τολμήσω να θυμίσω ένα πρόβλημα που έμεινε στη μέση;
    Είναι στην πρώτη σελίδα του About, comments 537 & 538 στις 21-12-2013.

    Με την ευκαιρία και για να διευκολύνεται ο … Σπίθας: στην κορυφή αυτής της 2ης σελίδας του About γράφει «Η συζήτηση στη σελίδα About επεκτείνεται σε 2 σελίδες. Για τη 2η σελίδα κλικ εδώ» το link νομίζω πως πρέπει να λέει «Για την 1η σελίδα κλικ εδώ» και να μας πηγαίνει στην 1η σελίδα.

    Καλό υπόλοιπο Καλοκαίρι.

  421. Ο/Η Γιάννης λέει:

    Κύριε Γιάννη καλημέρα ,

    έψαχνα να βρω κάποια λύση σχετικά με το excel πάνω στη δουλειά μου και βρήκα το ιστολόγιό σας. Ειλικρινά , συγχαρητήρια γι αυτό που κάνετε και καλή συνέχεια!

    Είμαι Λογιστής και θέλω να σας κάνω 2 ερωτήματα σχετικά με το excel (μπορεί να είναι πολύ απλοϊκά…)

    1) Θέλω σε ένα τυχαίο κελί να βάλω μία συνάρτηση η οποία θα μου εμφανίζει τα κελιά , το άθροισμα των οποίων θα μου δίνει έναν προκαθορισμένο αριθμό της επιλογής μου. π.χ. έχω τα εξής κελιά :

    Η20 με αριθμό 100 , Η21 με αριθμό 55 , Η22 με αριθμό 21. Θέλω να βρω ποια κελιά μου δίνουν άθροισμα 121. Στο παράδειγμά μου φαίνεται με γυμνό μάτι ότι είναι τα κελιά Η20 και Η22. Όταν όμως είναι πολλά τα κελιά και οι αριθμοί δεκαδικοί κλπ… δυσκολεύει λίγο..!

    2) Θέλω να μάθω πως μπορώ να εμφανίζω κάθε φορά έναν μοναδικό αριθμό (μία συνάρτηση που «γεννάει» μοναδικούς αριθμούς). Αυτό είναι καθαρά λογιστικό-φορολογικό. Επειδή πλέον εγώ σαν Λογιστής αλλά και πολλοί άλλοι επαγγελματίες μπορούν να εκδίδουν τιμολόγια αθεώρητα για τις υπηρεσίες τους (και μέσω excel εκτυπωμένα σε Α4) , θέλω σε κάθε τιμολόγιο να εμφανίζω έναν μοναδικό αριθμό (όπως έχουν π.χ. τα τιμολόγια που εκδίδονται μέσω φορολογικού μηχανισμού – κάτι μεγάλοι αριθμοί μαζί με γράμματα). Πρόκειται καθαρά για λόγους ασφαλείας.

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

  422. Ο/Η vioannis λέει:

    Γιάννη Βα, τώρα έγινες σαφής. Λοιπόν, μια λύση είναι να διαγράφεις της συναρτήσεις και να αναθέσεις σε μία μακροεντολή να τις επαναφέρει. Βαρετός αλλά σίγουρος τρόπος. Για να γραφτεί αυτή η μάκρο πρέπει να ορίσεις ακριβώς την περιοχή που είναι οι συναρτήσεις, και ποιος ακριβώς είναι ο τύπος τους και αν είναι απλές συναρτήσεις ή συναρτήσεις- πίνακες. Δες έναν άλλο τρόπο, λίγο πλάγιο και πονηρό: Η πρώτη μακροεντολή, μετατρέπει όλες της συναρτήσεις της περιοχής F1:F700 σε κείμενο και τις κρύβει. Η δεύτερη τις επαναφέρει στην αρχική τους μορφή. Στη Μακροεντολή2 πρέπει να αλλάξεις το NumberFormat, εγώ το όρισα σε «General», αλλά αν οι συναρτήσεις επιστρέφουν ημερομηνίες ή νομισματικές μονάδες κλπ πρέπει να το ρυθμίσεις κατάλληλα. Οι μακροεντολές δεν επιδρούν σε κελιά που έχουν συναρτήσεις οι οποίες επιστρέφουν ένα από τα σφάλματα: #ΚΕΝΟ!, #ΔΙΑΙΡ/0!, #ΤΙΜΗ!, #ΑΝΑΦ!, #ΟΝΟΜΑ?, #ΑΡΙΘ!, #Δ/Υ

    Sub Μακροεντολή1()
    Dim stili As Range
    Dim keli As Range
    Set stili = Range("F1:F700")
    stili.NumberFormat = "@"
    On Error Resume Next
    For Each keli In stili
    If Not VBA.IsError(keli) Then
    If keli.HasArray Then keli.Value = "{" & keli.Formula & "}"
    If keli.HasFormula Then keli.Value = keli.Formula
    End If
    Next
    On Error GoTo 0
    stili.NumberFormat = ";;;"
    End Sub
    
    Sub Μακροεντολή2()
    Dim arr As String
    Dim stili As Range
    Dim keli As Range
    Set stili = Range("F1:F700")
    stili.NumberFormat = "General"
    On Error Resume Next
    For Each keli In stili
    If Not keli.HasFormula Then
    If Not keli.HasArray Then
    If Not VBA.IsError(keli) Then
    keli.Formula = keli.Value
    If Left(keli.Value, 2) = "{=" Then
    arr = Trim(keli.Value)
    arr = Application.WorksheetFunction.Replace(arr, 1, 1, "")
    arr = Application.WorksheetFunction.Replace(arr, Len(arr), 1, "")
    keli.FormulaArray = arr
    End If: End If: End If: End If
    Next
    On Error GoTo 0
    End Sub
    
    
  423. Ο/Η Γιάννης Βα λέει:

    Για άλλη μια φορά, οι λύσεις που μου δώσατε δουλεύουν άψογα! Εκφράζω τις ευχαριστίες μου και τον θαυμασμό μου. Να είστε πάντα καλά!

  424. Ο/Η vioannis λέει:

    Μιχάλη δικαίως βγαίνεις στην αναφορά, κάπου είχα σκαλώσει, είπα να σου ζητήσω δείγμα, δεν το έκανα,…… απολογούμαι. Θα σου στείλω email για να μου στείλεις δείγμα. Το άλλο με τη σελίδα about, πρέπει να το βγάλω, το είχα βάλει προσωρινά διότι το URL προς 2η σελίδα δεν λειτουργούσε, τώρα όμως ύστερα από μήνες και αρκετά μηνύματα προς την WordPress το έφτιαξαν.

  425. Ο/Η vioannis λέει:

    Γιάννης Λογιστής. (Πρέπει να κάνω τη διευκρίνιση, διότι υγεία να έχουμε, είμαστε πολλοί Γιάννηδες στο ιστολόγιο). Λοιπόν τα δύο θέματα που έβαλες, έχουν ενδιαφέρον και θα σου απαντήσω αναλυτικά. Εν τω μεταξύ ρίξε μια ματιά στο θέμα του ιστολογίου “Συναρτήσεις τυχαίων αριθμών”. Και πάλι, εν τω μεταξύ, δες μια διασκεδαστική λύση-παιχνίδι για το πρώτο θέμα σου. Ας πούμε ότι οι αριθμοί είναι στα κελιά Η1 έως Η10. Στο κελί Ι1 γράψε τη συνάρτηση =RANDBETWEEN(0;1) και αντίγραψέ την έως το κελί Ι10. Στο κελί J1 γράψε τον τύπο =H1*I1 και αντίγραψέ τον έως το κελί J10. Τέλος στο κελί J11 γράψε τον τύπο =SUM(J1:J10). Πάτα, τώρα, το F9 στο πληκτρολόγιο, κάθε φορά που το πατάς θα αλλάζει το άθροισμα στο κελί J11. Όταν δεις το άθροισμα που αναζητάς σταμάτα. Οι αριθμοί στη στήλη Η1:Η10 που έχουν δεξιά 1, αποτελούν τη λύση. Τα ξαναλέμε, ίσως αύριο.

  426. Ο/Η Γιάννης λέει:

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

    Όντως είναι σαν παιχνίδι! Δεν μπόρεσα να επιλέξω εγώ το τελικό άθροισμα , αλλά ήταν πάρα πολύ σημαντική η βοήθειά σας διότι πλησίασα αρκετά στο νούμερο που έψαχνα και μετά ήταν πολύ πιο εύκολο να κάνω αυτό που ήθελα.

    Να στε καλά!!

  427. Ο/Η vioannis λέει:

    Γιάννη Βα, την Μακροεντολή2 της προηγούμενης απάντησής μου, την βελτίωσα, ώστε να καλύπτει όλες τις περιπτώσεις συναρτήσεων-πινάκων και να είναι πιο ασφαλής. Σε παρακαλώ λάβε υπ όψη σου τη νέα έκδοση.

  428. Ο/Η vioannis λέει:

    Γιάννης Λογιστής
    Αφού είδαμε την διασκεδαστική λύση, ας δούμε και την σοβαρή. Τη λύση αυτή θα τη δώσει το πρόσθετο εργαλείο του excel “Επίλυση” (Solver). Πρώτα να δούμε αν έχεις εγκατεστημένο το πρόσθετο. Αν το έχεις θα το βρεις στο μενού “Δεδομένα”. (Έως το excel 2003 ήταν στο μενού “Εργαλεία”). Αν δεν το βλέπεις πρέπει να το εγκαταστήσεις. Πήγαινε με τη σειρά:
    Επιλογές του Excel
    Πρόσθετα
    Μετάβαση
    Τσεκάρισε το Πρόσθετο επίλυσης
    ΟΚ
    Τώρα πρέπει να το βλέπεις τέρμα δεξιά στο μενού “Δεδομένα”.
    Στο πρόβλημα τώρα.
    Ας υποθέσουμε ότι οι αριθμοί είναι στη στήλη Α1:Α15 . Τη στήλη Β1:Β15 γέμισέ τη με τον αριθμό 1 (ή με 0 ή με συνδυασμούς του 0 και 1) . Στο κελί C1 γράψε τον τύπο =Α1*Β1 και αντίγραψέ τον έως το κελί C15. Τέλος στο κελί C16 γράψε τον τύπο =SUM(C1:C15). Είμαστε έτοιμοι να καλέσουμε τον Θεό Solver. Πάτα “Επίλυση”. Στην καρτέλα “Παράμετροι επίλυσης” που εμφανίζεται κάνε τις παρακάτω ρυθμίσεις:
    “Κελί προορισμού”, επιλέγεις (με το ποντίκι) το κελί C16.
    Τσεκάρεις την “Τιμή” και αμέσως δεξιά γράφεις τον αριθμό (άθροισμα) που αναζητάς.
    “Με αλλαγή των κελιών”, επιλέγεις (με το ποντίκι) τα κελιά Β1:Β15.
    Πάτα στη συνέχεια, το πλήκτρο “Προσθήκη” και εμφανίζεται η καρτέλα “Προσθήκη περιορισμού”. Στην “Αναφορά κελιού” επιλέγεις πάλι τα κελιά Β1:Β15 και από το αμέσως δεξιά μικρό πτυσσόμενο πλαίσιο, αφού το ανοίξεις, επιλέγεις “bin” και πάτα ΟΚ. Θα γυρίσεις στην καρτέλα “Παράμετροι επίλυσης” όπου στους περιορισμούς θα έχει προστεθεί $Β$1:$Β$15=δυαδικός. Τελειώσαμε. Πάτα το πλήκτρο “Επίλυση” και ο Θεός Solver θα εργαστεί σκληρά για να σου βρει μία λύση. Λύση είναι οι τιμές που έχουν δεξιά τους 1. Την αποδέχεσαι ή την απορρίπτεις. Αν το πρόβλημά σου επιδέχεται πολλές λύσεις ο Solver θα βρει μία, αν θέλεις και άλλη, άλλαξε τις αρχικές τιμές, δηλαδή τα 0 και 1 στη στήλη Β και ξαναβάλτον να δουλέψει. Όπως θα πρόσεξες ο solver έχει πολλές επιλογές και φυσικά πολλές δυνατότητες. Για να περιγράφουν όλες θα χρειαζόταν ένα βιβλίο. Πολύτιμο εργαλείο για να βρεθούν λύσεις σε προβλήματα γραμμικού και μη γραμμικού προγραμματισμού, προβλήματα μέγιστου και ελάχιστου και γενικά οιουδήποτε προβλήματος που μπορεί να παρασταθεί από ένα σύστημα εξισώσεων και ανισώσεων.
    ——————————————-
    Για το δεύτερο ερώτημά σου τώρα: Το θέμα της παραγωγής τυχαίων μοναδικών αριθμών έχει νομίζω εξαντληθεί στο σημείωμα του ιστολογίου “Συναρτήσεις τυχαίων αριθμών”.
    Για μεγάλες ακολουθίες αριθμών ασφαλείας ή κωδικών που παράγονται με τυχαίο τρόπο και αποτελούνται από γράμματα και αριθμούς (ή και άλλα σύμβολα) ένας απλός και πρακτικός τρόπος είναι ο παρακάτω: Ας πούμε ότι θέλεις να σχηματίσεις μια 15-ψήφια ακολουθία. Σε ένα κελί γράφεις έναν τύπο που έχει τη παρακάτω μορφή

    =X&X&X&X&X&X&X&X&X&X&X&X&X&X&X
    

    Όπου κάθε X αντιπροσωπεύει μία απλή παράσταση (συνάρτηση) που παράγει έναν μονοψήφιο τυχαίο αριθμό από 0-9 ή παράγει ένα τυχαίο ψηφίο γράμματος. Κάθε μία δρα ανεξάρτητα από την άλλη και παράγει το δικό της τυχαίο ψηφίο (γράμμα ή αριθμό). Οι απλές αυτές συναρτήσεις είναι:
    Για τυχαίο μονοψήφιο:

    INT(10*RAND())
    

    Για τυχαίο πεζό γράμμα της αγγλικής:

    CHAR(97+INT(26*RAND()))
    

    Για τυχαίο κεφαλαίο γράμμα της αγγλικής:

    CHAR(65+INT(26*RAND()))
    

    Συχνά σε προκαθορισμένες θέσεις της πολυψήφιας ακολουθίας, τοποθετούνται τμήματα της τρέχουσας ημερομηνίας ή ώρας.
    Παράδειγμα, για να πάρουμε τα δύο ψηφία της τρέχουσας ημερομηνίας:

    TEXT(TODAY();"ηη")
    

    του τρέχοντα μήνα

    TEXT(TODAY();"μμ")
    
    Αν δεν χρησιμοποιείς ελληνικό excel, αντικατέστησε τα ηη και μμ με dd και mm αντίστοιχα.
    Παράδειγμα, ο τύπος:
    
     
    =INT(10*RAND())&INT(10*RAND())&INT(10*RAND())&"-"&CHAR(65+INT(26*RAND()))&CHAR(65+INT(26*RAND()))&CHAR(65+INT(26*RAND()))&" "&TEXT(TODAY();"ηη")&"/"&TEXT(TODAY();"μμ") 
    

    παρήγαγε τον τυχαίο κωδικό 582-DNP 04/08

  429. Ο/Η Γιάννης Λογιστής λέει:

    Κύριε Γιάννη ένα ευχαριστώ είναι πραγματικά λίγο…

    Θα κάτσω να μελετήσω αυτά που μου στείλατε και θα σας ενημερώσω μόλις τα εφαρμόσω.

    Και πάλι ευχαριστώ!

  430. Ο/Η Κασαπάκης Μιχάλης λέει:

    Ως φανατικός σπουδαστής στο Varlamis University for excel, παρακολουθώ τα πάντα (ελέω RSS).
    Για το ερώτημα 1 του «Γιάννη του Λογιστή» νομίζω πως είναι δύσκολη δουλειά. Έκανα ένα παράδειγμα με αριθμούς από το 1 έως το 15 και αναζήτησα το άθροισμα 16 (για μέχρι 15 απλώς τσεκάρει τον αντίστοιχο αριθμό). Οι δυνατοί συνδυασμοί είναι 27 ! (7 ζευγάρια, 13 τριάδες, 6 τετράδες και 1 πεντάδα). Προσπαθώ όπως πάντα να δω σε τι μπορεί να χρησιμεύει για να το αξιοποιήσω κι εγώ καταλλήλως.
    Όπως πχ η απάντηση 2 μου έδωσε την ιδέα πως μπορεί άριστα να χρησιμοποιηθεί για την παραγωγή ισχυρών password.
    ΥΓ. Μια και μου είχες διαγράψει μια λέξη κάποτε, διαγράφω κι εγώ τη λέξη «απολογούμαι». Με έκανε κι ένοιωσα πολύ άβολα. Άλλωστε ήδη σου χρωστάω πολλά.

  431. Ο/Η vioannis λέει:

    Ώστε 27! Μιχάλη! μεγάλος αριθμός, τότε πολύ γρήγορα ο solver θα βρει μία λύση. Η λύση που δίνει εξαρτάται από τις αρχικές τιμές. Δουλεύει προσεγγιστικά και βρίσκει την πιο κοντινή λύση στις τιμές αυτές. Αν, παράδειγμα, του δώσεις μια τριτοβάθμια εξίσωση με 3 λύσεις, ας πούμε -11, 2, 12, τότε με αρχικές τιμές -5,0,1,2 δίνει τη ρίζα 2, με αρχικές πάνω από 12 θα δώσει τη 12 και με μικρότερες της -11 θα δώσει τη ρίζα -11. Για τις εξισώσεις καλό είναι ο solver να συνδυάζεται με γράφημα της εξίσωσης για να πάρουμε περισσότερες πληροφορίες πως θα χειριστούμε τις αρχικές τιμές. Η μεγάλη του αξία είναι στη λύση μεγάλων συστημάτων εξισώσεων και ανισώσεων γραμμικών ή μη. Στην έκδοση 2010 του excel ο solver έχει βελτιωθεί και του έχουν προστεθεί νέες ανισωτικές δυνατότητες, και νέοι αλγόριθμοι.
    Για το δεύτερο θέμα έχεις απόλυτο δίκιο.
    Σε ευχαριστώ πολύ για το πάντα θετικό, ενθαρρυντικό και γεμάτο χιούμορ τρόπο που έρχεσαι στο ιστολόγιο.

  432. Ο/Η Γιάννης Βα λέει:

    Κύριε Γιάννη, ευχαριστώ πολύ!

  433. Ο/Η Agger λέει:

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

    Το πρόβλημα έχει να κάνει με 10 διαφορετικά ανεξάρτητα ενδεχόμενα μεταξύ τους και τις πιθανότητες επιβεβαίωσης του Α.
    A B
    0,86 0,14
    0,47 0,53
    0,29 0,71
    0,45 0,55
    0,45 0,55
    0,39 0,61
    0,29 0,71
    0,32 0,68
    0,14 0,86
    0,87 0,13

    Αυτό που προσπαθώ να βρω είναι πόσες είναι οι πιθανότητες να επαληθευτεί το Α χρησιμοποιώντας την συνάρτηση BINOMDIST
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    Ευχαριστώ προκαταβολικά για τον χρόνο σας

  434. Ο/Η vioannis λέει:

    Φίλε Agger, σίγουρα έχεις διατυπώσει και έχεις δώσει όλα τα στοιχεία για το πρόβλημα;

  435. Ο/Η Agger λέει:

    Καλησπέρα και πάλι και ευχαριστώ για τον χρόνο σας.Ίσως δεν σας έθεσα σωστα το πρόβλημα.Σας το παραθέτω με παράδειγμα παρακάτω.

    A B
    0,86 0,14
    0,47 0,53
    0,29 0,71

    Πόσες πιθανότητες έχει να επαληθευτεί το Α
    α)Καμία φορά
    β)Μία φορά
    γ)Δύο φορές
    δ)Τρεις φορές

    α = (1-0,14)*(1-0,53)*(1-0,71) =0,054
    β = (0,86*0,53*0,71)+(0,47*0,14*0,71)+(0,29*0,14*0,53) =0,393
    γ = (0,86*0,47*0,71)+(0,86*0,29*0,53)+(0,47*0,29*0,14) = 0,437
    δ = 0,86*0,47*0,29 =0,115

    Αναζητώ μία συνάρτηση να το κάνει αυτόματα για περισσότερα από 10 ενδεχόμενα

  436. Ο/Η vioannis λέει:

    Agger,στον αλγόριθμο υπολογισμού που δίνεις, καθώς τα ενδεχόμενα αυξάνουν πάνω από 10, οι υπολογισμοί αυξάνουν γεωμετρικά λόγω των συνδυασμών που πρέπει να υπολογιστούν. Συνάρτηση ή συνδυασμό συναρτήσεων που να υποκαθιστούν την εργασία δεν γνωρίζω.

  437. Ο/Η Γιώργος Γ. λέει:

    Κύριε Βαρλάμη κατ’αρχήν θα ήθελα να σας δώσω συγχαρητήρια γιά το ιστολογιό σας.
    Είμαι και ‘γω της γενιάς του Μικρού Ήρωα. Θα ‘θελα να σας απασχολήσω, αν βέβαια έχετε χρόνο και υπάρχει λύση, με το εξής πρόβλημα:
    Πώς μπορώ να βρώ το άθροισμα των τιμών π.χ της F(x)=x+2, αν x ακέραιος & μικρότερος του 5 χωρίς να μπλέξουμε στη συγκεκριμένη με αριθμητική πρόοδο. Ίσως με χρήση loop … την οποία και δεν γνωρίζω. Ευχαριστώ γιά τον χρόνο σας.

  438. Ο/Η Γιώργος Γ. λέει:

    Μιά διόρθωση ηθελα να γράψω x=φυσικός & μικρότερος του 5.
    και πάλι ευχαριστώ.

  439. Ο/Η vioannis λέει:

    Αγαπητέ, Γιώργο, Γ.
    Αν θέλετε τον υπολογισμό με συνάρτηση φύλλου (χωρίς να εμπλακεί η vba), η συνάρτηση είναι:

    =SUMPRODUCT(ROW(INDIRECT("1:5"))-1+2)
    

    Αναλυτικά, η συνάρτηση:

    = ROW(INDIRECT("1:5"))
    

    Επιστρέφει ένα πίνακα που περιλαμβάνει τους αριθμούς 1,2,3,4,5. Για να το δείτε αυτό, γράψτε τη σε ένα κελί, και με επιλεγμένο το κελί αυτό, πατήστε F2 και μετά F9 και κοιτάξτε στη γραμμή τύπων. Στη συνέχεια η:

    = ROW(INDIRECT("1:5"))-1
    

    επιστρέφει τον πίνακα με τους αριθμούς ελαττωμένους κατά 1, άρα αυτούς που ζητάμε: 0,1,2,3,4. Στη συνέχεια θεωρείστε την αμέσως παραπάνω ποσότητα σαν τη μεταβλητή x της συνάρτησης, και σχηματίστε με αυτή τον τύπο της συνάρτησης. Επειδή F(x)=x+2, γράψτε:

    ROW(INDIRECT("1:5"))-1+2
    

    Αν η συνάρτηση ήταν F(x)=3*x+2, θα γράφατε:

    3*(ROW(INDIRECT("1:5"))-1)+2
    

    και αν ο τύπος ήταν F(x)=3*x^3-2*Χ^2-5, θα γράφατε:

    3*(ROW(INDIRECT("1:5"))-1)^3-2*(ROW(INDIRECT("1:5"))-1)^2-5,
    

    Τέλος δεν έχετε παρά να αθροίσετε τους αριθμούς που επιστρέφει ο παραπάνω τύπος-πίνακας. Καλή λύση είναι η συνάρτηση SUM

    =SUM (ROW(INDIRECT("1:5"))-1+2)
    

    Αλλά για να δουλέψει σωστά η SUM, επειδή το όρισμά της είναι πίνακας, πρέπει να εισαχθεί με Ctrl+Shift+Enter, όπως έχουμε πει εδώ. Αλλά αυτός ο μπελάς του Ctrl+Shift+Enter, ξεπερνιέται με την SUMPRODUCT, όπως έχουμε πει εδώ. Έτσι, καταλήγουμε στον τύπο:

    =SUMPRODUCT(ROW(INDIRECT("1:5"))-1+2)
    

    που εισάγεται με απλό Enter.
    Με vba, η παρακάτω μάκρο, μέσω ενός Massage Box επιστρέφει το ζητούμενο άθροισμα:

    Sub test()
    Dim i As Integer
    Dim F As Integer
    Dim S As Long
    For i = 0 To 4
    F = i + 2
    S = S + F
    Next
    MsgBox S
    End Sub
    
  440. Ο/Η Κασαπάκης Μιχάλης λέει:

    Κύριε, κύριε, να πω κι εγώ;!

    Στο Α1 γράφουμε τον μικρότερο όρο (0)
    Στο Β2 τον μεγαλύτερο (4)
    Στο C2 τον σταθερό όρο (2)
    Και στο D2 τον τύπο =(B2-A2+1)*C2+(A2+B2)*(B2-A2+1)/2

    1 A B C D
    2 α1 αν στ Άθρ
    3 0 4 2,00 20

    Ουσιαστικά είναι ο τύπος που δίνει το άθροισμα των ν όρων αριθμητικής ακολουθίας στον οποίο προσθέτω το γινόμενο του πλήθους των όρων ν (ν=Β2-Α1+1) επί τον σταθερό όρο (2)
    Δουλεύει και με αρνητικούς όρους ή ο ένας αρνητικός κι ο άλλος θετικός (προσοχή όμως στα «μικρότερος», «μεγαλύτερος») ο δε σταθερός όρος μπορεί να είναι θετικός, αρνητικός ή δεκαδικός.

    Τι βαθμό παίρνω;

  441. Ο/Η vioannis λέει:

    Άριστα 10! Και διαγωγή Κοσμιωτάτη!

    Πολύ καλό Μιχάλη.

  442. Ο/Η Κασαπάκης Μιχάλης λέει:

    Ευχαριστώ για το βαθμό αλλά πιο πολύ για την κάρτα !
    και συντονίζομαι στην ίδια …συχνότητα !

    Ο έλεγχος (γχ)

    Η Άννα κοιτάζει.
    Κοιτάζει τον έλεγχο.
    Βλέπει τον βαθμό της
    Και λέει:
    -Πήρα «άριστα».
    Θα χαρεί η γιαγιά.
    Θα χαρούν οι γονείς.
    Θα χαρούν όλοι,
    Όταν δουν τον έλεγχο.

    Τελικά η ηλικία δεν κρύβεται !
    (και γιατί να την κρύψωμεν άλλωστε!)

    Δεν πειράζει που ξεφεύγουμε λίγο ε; Θερινή ραστώνη γαρ.

  443. Ο/Η Γιώργος Γ. λέει:

    Ευχαριστώ και τους δυό σας. Και εσας κύριε Βαρλάμη όπως και τον κύριο Κασαπάκη.
    Καλό υπόλοιπο του καλοκαιριού…

  444. Ο/Η Όλγα Πετρίδου λέει:

    Καλησπέρα! ευχαριστούμε για τις πολύτιμες συμβουλές! Χρειάζομαι και εγώ την βοήθειά σου. Έχω 2 αρχεία xls τα οποία περιέχουν διάφορα δεδομένα μεταξύ των οποίων και ημερομηνίες. Προέκυψε η ανάγκη να δημιουργήσω ένα κοινό αρχείο και όταν κάνω την μεταφορά από το ένα στο άλλο οι ημερομηνίες αλλάζουν. Έχω προσπαθήσει να μετατρέψω τις ημερομηνίες σε κείμενο από την μορφοποίηση αλλά τότε εμφανίζεται ένας ενιαίος αριθμός. Μπορείς να μου προτείνεις κάποια λύση;
    Ευχαριστώ για τον χρόνο σου

  445. Ο/Η vioannis λέει:

    Όλγα, πως κάνεις τη μεταφορά; Αντιγραφή – επικόλληση ή κάποια ειδική επικόλληση; Και πως αλλάζουν; Μια ημερομηνία 5/12/14 (5 Δεκ) γίνεται 12/5/14 (12 Μαΐου) ή κάτι άλλο όπως πχ η ημερομηνία να μετατίθεται περίπου 4 χρόνια εμπρός ή πίσω; Είναι πάρα πολλά αυτά που μπορεί να συμβαίνουν. Αυτό που συμβαίνει στη μορφοποίηση σε κείμενο είναι φυσιολογική λειτουργία, σου εμφανίζει το σειριακό αριθμό της ημερομηνίας. Όλες οι ημερομηνίες είναι αριθμοί.

  446. Ο/Η Άρης λέει:

    Κύριε Βαρλάμη καλησπέρα.
    Θέλω να σας ρωτήσω το εξής: Πως μπορώ να καλέσω τις συναρτήσεις countIf και countA σε μακροεντολή ώστε να χρησιμοποιήσω τα αποτελέσματά τους στη συνέχεια;
    Ευχαριστώ πάρα πολύ για τον χρόνο σας.

  447. Ο/Η ΝΙΚΟΣ ΑΓΓΕΛΟΠΟΥΛΟΣ λέει:

    Γιάννη, καλησπέρα
    Θεωρώ εαυτόν πολύ ελάχιστο για να αξιολογήσω την εργασία που προσφέρεις σε όλους όσους σε ρωτούν και σε όλους όσου σε διαβάζουν. Γι’ αυτό, Σ’ ΕΥΧΑΡΙΣΤΩ.
    Είναι η πρώτη φορά που απευθύνομαι σε σένα και θέλω να με φωτίσεις .
    Στήλη Α = Ημερομηνίες, ΣΤΗΛΗ Β = Ποσά, και ΣΤΗΛΗ Γ = Υπόλοιπα (κίνηση λ/σμού)
    Αυτό που ζητώ είναι να μου δίνει στην ΣΤΗΛΗ Γ Υπόλοιπο, τότε μόνον όταν αλλάζει στην ΣΤΗΛΗ Α η ημερομηνία.
    Ευχαριστώ, Νίκος

  448. Ο/Η vioannis λέει:

    Άρη, ζητώ συγνώμη για την καθυστερημένη εμφάνιση της ερώτησής σου στο ιστολόγιο και της επίσης καθυστερημένης απάντησης μου, αλλά λόγω έκτακτης απασχόλησής μου, δεν είχα για μερικές ημέρες χρόνο και τρόπο πρόσβαση στο δίκτυο. Στο θέμα τώρα.
    Για την countA, το παράδειγμα testA είναι για την περιοχή Α1:Β2000 του Φύλλου1, και το παράδειγμα testB είναι για πολλές περιοχές: Για την Α1:Β2000 του Φύλλου1, ολόκληρες τις στήλες F έως G του ίδιου φύλλου και για ολόκληρες τις γραμμές 5,6,7 του Φύλλου2. Στο τρίτο παράδειγμα testC η περιοχή που ψάχνει η countA είναι αυτή που επέλεξε ο χρήστης πριν την καλέσει .

    Sub testA()
    Dim myCounta As Double
    Dim myRange As Range
    Set myRange = Sheets("Φύλλο1").Range("A1:B2000")
    myCounta = Application.WorksheetFunction.CountA(myRange)
    MsgBox myCounta
    End Sub
    '- - - - - - - - - - - - - - - - - - -
    Sub testB()
    Dim myCounta As Double
    Dim myRange1 As Range
    Dim myRange2 As Range
    Dim myRange3 As Range
    Set myRange1 = Sheets("Φύλλο1").Range("A1:B2000")
    Set myRange2 = Sheets("Φύλλο1").Range("F:G")
    Set myRange3 = Sheets("Φύλλο2").Range("5:7")
    myCounta = Application.WorksheetFunction.CountA(myRange1, myRange2, myRange3)
    MsgBox myCounta
    End Sub
    '- - - - - - - - - - - - - - - - - - -
    Sub testC()
    Dim myCounta As Double
    Dim myRange As Range
    Set myRange = Selection
    myCounta = Application.WorksheetFunction.CountA(myRange)
    MsgBox myCounta
    End Sub
    

    Τα επόμενα δύο παραδείγματα είναι για την CountIf, για μία και πολλές περιοχές.

    Sub testD()
    Dim myCountif As Double
    Dim myRange As Range
    Dim criteria As String
    Set myRange = Range("A1:B2000")
    criteria = ">500"
    myCountif = Application.WorksheetFunction.CountIf(myRange, criteria)
    MsgBox myCountif
    End Sub
    '- - - - - - - - - - - - - - - - - - -
    Sub testΕ()
    Dim myCountif As Double
    Dim myRange1 As Range
    Dim myRange2 As Range
    Dim criteria As String
    Set myRange1 = Sheets("Φύλλο1").Range("A1:B2000")
    Set myRange2 = Sheets("Φύλλο2").Range("C10:G100")
    criteria = "Πορτοκάλια"
    myCountif = Application.WorksheetFunction.CountIf(myRange1, criteria) _
        + Application.WorksheetFunction.CountIf(myRange2, criteria)
    MsgBox myCountif
    End Sub
    

    Δες και το σημείωμα του ιστολογίου: “Χρήση συναρτήσεων φύλλου στην vba”

  449. Ο/Η vioannis λέει:

    Νίκο, όπως έγραψα πιο πάνω στον Άρη, ζητώ συγνώμη για την καθυστέρηση στην επικοινωνία.
    Αν, όσο το κελί Α2 είναι κενό, δεν θέλεις να εμφανίζεται το υπόλοιπο στο κελί C2, και θέλεις να εμφανιστεί, μόνο αφού συμπληρώσεις την ημερομηνία στο A2, τότε απλά χρειάζεσαι, στο κελί C2,μία συνάρτηση σαν αυτή:

    =IF(A2="";"";B2-D2-E2)
    

    Όπου η πράξη B2-D2-E2 είναι μια υποθετική πράξη που υπολογίζει το υπόλοιπο. Εσύ στη θέση της, θα γράψεις τη σωστή.
    Αν όμως, κυριολεκτείς όταν λες: “μόνο όταν αλλάζει η ημερομηνία”, δηλαδή υπάρχει ήδη μία ημερομηνία στο κελί A2, και όταν αυτή αλλάξει, θέλεις να γίνεται (ή να ξαναγίνεται) ο υπολογισμός του υπολοίπου, τότε θα χρειαστείς μία μακροεντολή σαν αυτή που περιγράφω στη σελίδα “Μικρά και ίσως χρήσιμα”, στην παράγραφο 14, “Εισαγωγή χρόνου σε διπλανό κελί κατά την πληκτρολόγηση”. Με τη μάκρο αυτή, κάθε φορά που αλλάζει ένα κελί στη στήλη Α, αλλάζει και ο χρόνος στο αντίστοιχο κελί της στήλης Β. Αν αλλάξεις την τελευταία σειρά του κώδικα

    If Not keli Is Nothing Then keli(1, 2) = VBA.Time
    

    έτσι:

    If Not keli Is Nothing Then keli(1, 3) = keli(1, 2) - keli(1, 4) - keli(1, 5)
    

    Τότε, κάθε φορά που αλλάζεις μία ημερομηνία σε κελί της Α, στο αντίστοιχο κελί της C, θα γράφεται η διαφορά B-D-E. Φυσικά αυτό είναι ένα παράδειγμα που πρέπει να προσαρμοστεί στον τρόπο που εσύ υπολογίζεις το υπόλοιπο. Για ότι χρειαστείς επανέρχεσαι.

  450. Ο/Η Άρης λέει:

    Κύριε Βαρλάμη καλημέρα σας.
    Η ευγένειά σας είναι το ίδιο μεγάλη με την προσφορά σας.Μπροστά στον χρόνο που καταναλώνετε για να μας βοηθήσετε τι είναι μια μικρή καθυστέρηση.
    Ευχαριστώ πολύ για τις λύσεις που μου δώσατε.Το άρθρο το διάβασα και με βοήθησε να βρω λύση στο πρόβλημα που είχα τις μέρες που έστειλα το σχόλιο.Αλλά οι δικές σας λύσεις δίνουν καινούργιες προοπτικές
    Καλή μέρα να έχετε και ευχαριστώ πολύ για ακόμα μια φορά..

  451. Ο/Η dennis λέει:

    Καλημέρα! μπορω να κάνω το εξής? εχω
    14
    1400
    140001
    1400010023

    και θέλω να το κάνω

    14
    14-00
    14-00-01
    14-00-01-0023
    υπάρχει αυτή η δυνατότητα? Τι λέτε?

  452. Ο/Η vioannis λέει:

    Dennis,
    Για αριθμούς με 2,4,6 και 10 ψηφία, όπως στα παραδείγματα, ο παρακάτω τύπος :

    =IF(LEN(A1)=10;SUBSTITUTE(TRIM(TEXT(A1;"## ## ## ####"));" ";"-");SUBSTITUTE(TRIM(TEXT(A1;"## ## ##"));" ";"-"))
    

    Θα επιστρέψει τους αριθμούς στη ζητούμενη μορφή αλλά σαν κείμενο.
    Αν η θέλεις μόνο αλλαγή της μορφής, και οι αριθμοί να παραμείνουν αριθμοί, τότε για τους 4-ψήφιους και τους 6-ψήφιους χρησιμοποιήστε την προσαρμοσμένη μορφή:

    [<10000]##-##;[<1000000]##-##-##
    

    Και για τους 10-ψήφιους την προσαρμοσμένη μορφή.

    ##-##-##-####
    

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

  453. Ο/Η dennis λέει:

    vioannis παρα πολυ ωραιο αυτο που μου εστειλε και δουλευει να σου ζητησω αλλη μια βοηθεια?
    14
    1400
    140001
    140001023

    να γινεται
    14
    1400
    140001
    1400010023

    δηλαδη στην τεταρτη γραμμη ενω ειναι 9 ψηφια να προσθετει ενα μηδενικο
    14
    14-00
    14-00-01
    14-00-01-0023

  454. Ο/Η vioannis λέει:

    Dennis,
    Προφανώς πια, μιλάμε για την πρώτη περίπτωση, της επιστροφής του αριθμού σε μορφή κειμένου, αφού με το μηδενικό εσωτερικά, αλλάζει ο αριθμός.
    Τους αριθμούς αυτούς με 9 ψηφία, φέρνει στη μορφή που θέλεις και ταυτόχρονα βάζει το εμβόλιμο μηδέν ο τύπος:

    =SUBSTITUTE(TRIM(TEXT(LEFT(A1;6)&0&RIGHT(A1;3);"## ## ## ####"));" ";"-")
    

    Και όλος μαζί ο πρώτος τύπος γίνεται:

    =IF(LEN(A1)=9;SUBSTITUTE(TRIM(TEXT(LEFT(A1;6)&0&RIGHT(A1;3);"## ## ## ####"));" ";"-");IF(LEN(A1)=10;SUBSTITUTE(TRIM(TEXT(A1;"## ## ## ####"));" ";"-");SUBSTITUTE(TRIM(TEXT(A1;"## ## ##"));" ";"-")))
    
  455. Ο/Η Στεφανία λέει:

    Γιάννη, καλημέρα.
    Το γεγονός ότι η βοήθειά σου και οι γνώσεις σου είναι πολύτιμα εδώ και έξι σχεδόν μήνες που ανακάλυψα τη σελίδα σου,, δεν θα κουραστώ να το λέω. Πάντα πήρα από σένα πληροφορίες που διευκόλυναν τον τρόπο της δουλειάς μου και με γλύτωσαν από άπειρες ώρες “χειροκίνητου” έργου που θα είχαν και αμφίβολο αποτέλεσμα.
    Για μια φορά ακόμη ζητώ τη συνδρομή σου.
    Έχω δυο διαφορετικά μεγάλα αρχεία με κοινά στοιχεία. Το ένα είναι μηχανογραφημένο και άρα σωστό και πλήρες, στο δεύτερο καταχωρεί υπάλληλος και κατά συνέπεια ενυπάρχει η περίπτωση του ανθρώπινου λάθους. Παρ’ όλα αυτά υπάρχουν και άλλα στοιχεία για να αντλήσω το λάθος. Το πρόβλημά μου είναι το εξής: η στήλη “αίτηση” που περιέχει αριθμούς και κείμενα με τη μορφή Χ12345 και 23456789 και στα δυο αρχεία. Όταν χρειαστεί να πάρω πληροφορίες από το δεύτερο αρχείο για να ενημερώσω το πρώτο, δεν ταυτίζονται σε όλες τις περιπτώσεις, επειδή οι αριθμοί/κείμενα του ενός αρχείου δεν είναι απαραίτητα αριθμοί/κείμενα στο άλλο. Για να το διορθώσω κάνω το εξής και στα δύο αρχεία:
    1. Επιλέγω από κάθε αρχείο τη στήλη που με ενδιαφέρει να ταυτίσω.
    2. Με “TRIM” αφαιρώ τα κενά.
    3. Αφαιρώ το γράμμα Χ, όπου υπάρχει, από το “εύρεση” και “αντικατάσταση”.
    4. Από τη μορφοποίηση κελιών επιλέγω κείμενο.
    5. Με “VLOOKUP” ψάχνω για τα κοινά στοιχεία.
    Ενώ δεν έχω πρόβλημα με τις ημερομηνίες, υπάρχουν περιπτώσεις που τα κελιά δεν ταυτίζονται στη στήλη “αίτηση” αν και θα έπρεπε, καθώς υπάρχουν και στα δυο αρχεία. Κάποιες φορές διαπιστώνω, ότι δεν έχει μετατρέψει σε όλες τις περιπτώσεις τους αριθμούς σε κείμενα. Υπάρχει, άραγε, κάποιος άλλος τρόπος για τη μετατροπή που θέλω;
    Σ’ ευχαριστώ πολύ.

    Στεφανία

  456. Ο/Η vioannis λέει:

    Φίλη Στεφανία. Πάντα με τον καλό σου λόγο έρχεσαι στο ιστολόγιο, να είσαι καλά!
    Όταν κάνουμε τροποποίηση της μορφοποίησης κελιών σε κείμενο, και τα κελιά περιέχουν ήδη αριθμούς, οι αριθμοί δεν γίνονται κείμενο. Δυστυχώς έτσι είναι. Έχω γράψει αναλυτικά για το θέμα αυτό, σε αυτή εδώ, την απάντησή μου. Να προσθέσω όμως κάτι ακόμα. Αν τα αριθμητικά δεδομένα είναι σε στήλη και θέλεις να τα κάνεις κείμενο, ακολούθησε τα παρακάτω βήματα
    Α) επιλέγεις την περιοχή (μόνο στήλη ή τμήμα στήλης) με τους αριθμούς
    Β) Στο μενού “Δεδομένα” επιλέγεις “Κείμενο σε στήλη”
    Γ) Εμφανίζεται ο “Οδηγός μετατροπής κειμένου σε στήλες”
    Δ) Αγνοείς το βήμα 1 από 3 και πατάς “Επόμενο” και επίσης αγνοείς το βήμα 2 από 3 και πατάς ξανά “Επόμενο”.
    E) Στο βήμα 3 τσεκάρεις “Κείμενο” και πατάς “Τέλος”
    Τώρα οι αριθμοί έγιναν σίγουρα κείμενο.
    ——–
    Τώρα για να συγκρίνεις 2 κελία που περιέχουν τιμές, χωρίς να ξέρεις αν είναι πραγματικές τιμές ή κείμενο, χρησιμοποίησε έναν από τους παρακάτω τύπους

    =--A1=--B1
    ή
    =1*A1=1*B1
    

    Οι τύποι αυτοί αν οι αριθμοί είναι ίσοι, θα επιστρέψουν TRUE, ανεξάρτητα αν είναι και οι δύο τιμές στα κελιά Α1 και Β1, αριθμοί ή κείμενο ή ο ένας αριθμός και ο άλλος κείμενο.
    ———-
    Όταν κάνεις VLOOKUP.
    Ας πούμε ότι ο τύπος του VLOOKUP είναι

     =VLOOKUP(D1;$A$1:$B$20;2;FALSE)
    

    Α) Αν η τιμή αναζήτησης D1 είναι αριθμός είτε σε μορφή κειμένου είτε καθαρός αριθμός, ενώ η πρώτη στήλη του πίνακα ($A$1:$B$20) είναι καθαροί αριθμοί τότε τροποποίησε τον παραπάνω τύπο έτσι:

     =VLOOKUP(--D1;$A$1:$B$20;2;FALSE)
    

    Β) Αν η τιμή αναζήτησης D1 είναι αριθμός είτε σε μορφή κειμένου είτε καθαρός αριθμός, ενώ η πρώτη στήλη του πίνακα ($A$1:$B$20) είναι αριθμοί σε κείμενο, τότε τροποποίησε τον παραπάνω τύπο έτσι:

     =VLOOKUP(TEXT(D1;"Γενικός Τύπος");$A$1:$B$20;2;FALSE)
    

    Αν η πρώτη στήλη του πίνακα έχει κάποια ειδική μορφοποίηση, βάλε αυτή στη θέση του ορίσματος «Γενικός Τύπος”
    Γ) Αν η κατάσταση είναι χαοτική, με μεικτές μορφές και στη τιμή αναζήτησης και στην πρώτη στήλη του πίνακα, τότε θα βάλεις τα μεγάλα μέσα. Ο πίνακας της VLOOKUP θα συγκροτηθεί με τη βοήθεια της CHOOSE, με την μέθοδο που έχει αναπτυχθεί στο θέμα του ιστολογίου: “Ένας πρωτότυπος τρόπος χρήσης της συνάρτησης CHOOSE και οι εφαρμογές του”

     =VLOOKUP(--D1;CHOOSE({1\2};--$A$1:$A$20;$B$1:$B$20);2;FALSE)
    

    Σημείωση για τον τελευταίο τύπο: Ίσως στο δικό σου υπολογιστή να χρειαστεί να γράψεις στον τύπο, τον σταθερό πίνακα {1\2} έτσι: {1;2}. Αυτό εξαρτάται από τους διαχωριστές σταθερών πινάκων που έχεις. Μετά, σε όποιο υπολογιστή και αν ανοίξει το αρχείο θα δίνει τα ίδια σωστά αποτελέσματα.
    Ελπίζω οι παραπάνω σημειώσεις να σε βοηθήσουν να αντιμετωπίσεις το πρόβλημά σου. Αν όχι επανέρχεσαι.

  457. Ο/Η Στεφανία λέει:

    Καλέ μου Γιάννη, καλησπέρα.

    Να ‘ξερες πόσο μου ξεδιάλυνες τα θέματά μου! Η επισύναψη της παλιότερης ανάρτησης, με βοήθησε ιδιαίτερα, αφού το “είδα αλλιώς” και άλλαξα τη λογική μου μετατρέποντας τους αριθμούς, όχι σε κείμενο όπως έκανα, αλλά σε αριθμό με την τεχνική που υπέδειξες. Έτσι, ταίριαξαν και τα αρχεία. Βεβαίως και μοίρασα σε φωτοτυπίες την τεχνική σ’ όλο τον κόσμο που ψάχναμε τι φταίει και λύση δε βρίσκαμε. Μαζί και με τη διεύθυνση του ιστολογίου σου (ελπίζω να μη σε πειράζει, ναι;)

    Και φυσικά, ο τύπος =–A1=–B1 ή =1*A1=1*B1, εκεί που δεν το περίμενα, όταν τον εφάρμοσα (από τύχη) σε κάποια κελιά για να δω τι βγάζει, μου ‘δειξε λάθη από τη χειρόγραφη καταχώρηση. Καλά, δε σου κρύβω, ότι η ικανοποίηση και η ευχαρίστηση είχαν μεγάλα κέφια χθες! Με τις VLOOKUP που καταγράφεις, θα κάνω τεστ εν καιρώ και τότε θα σου πω και γι αυτές. Τις κρατάω σε «σκονάκι» επί του παρόντος για εφαρμογή σε πρώτη ζήτηση.

    Δυσεύρετη στις μέρες μας η ανυστερόβουλη προσφορά. Για ακόμα μια φορά σ’ ευχαριστώ από καρδιάς.

    Στεφανία

  458. Ο/Η vioannis λέει:

    Χαίρομαι που βοήθησα Στεφανία. Είσαι πάντα ευπρόσδεκτη στο ιστολόγιο, μαζί με την παρέα σου.

  459. Ο/Η Zωή Χαραλά λέει:

    Καλημέρα!

    Έχω ένα πρόβλημα – απλό θεωρώ – αλλά δεν μπορώ να θυμηθώ με τίποτα πώς πρέπει να το κάνω…
    Θέλω να τραβήξω πληροφορίες από 1 sheet σε άλλο, όπου όταν θα κάνω αλλαγές στο πρώτο να ενημερώνεται αυτόματα και το δεύτερο.

    παράδειγμα: Στο ένα worksheet θα φτιάξω το κοστολόγιό μου, και στο 2ο τον τιμοκατάλογο μορφοποιημένο για τους πελάτες μου…

    Ευχαριστώ πολύ εκ των προτέρων για την βοήθειά σας!!
    Ζωή

  460. Ο/Η vioannis λέει:

    Ζωή, η εργασία λέγεται (δια)σύνδεση.
    Επίλεξε (κλικ) στο ένα φύλλο το κελί που θέλεις να συνδέσεις (κελί-πηγή).
    Δεξί κλικ και από το πτυσσόμενο μενού επίλεξε “Αντιγραφή”.
    Επίλεξε (κλικ) στο άλλο φύλλο το κελί (κελί-προορισμός) που θέλεις να ενημερώνεται από το κελί-πηγή.
    Δεξί κλικ και από το πτυσσόμενο μενού επίλεξε “Ειδική επικόλληση” και στη συνέχεια “Επικόλληση σύνδεσης”
    Για ποιο μαζική δουλειά, δες εδώ μια παλιότερη απάντησή μου για το ίδιο θέμα.

  461. Ο/Η Γιάννης Βα λέει:

    Κύριε Γιάννη καλημέρα. Από μία λίστα τιμών που βρίσκονται ας πούμε στη στήλη Α και στα κελιά Α1 έως Α500, θέλω να παίρνω σε κάποιο άλλο κελί, πχ στο κελί Β1, την τελευταία εγγραφή, σε οποιαδήποτε γραμμή κι αν είναι αυτή. Οι τιμές έχουν μορφοποίηση κειμένου. Γίνεται; (είμαι σίγουρος οτι γίνεται, αλλά πως;) Ευχαριστώ εκ των προτέρων.

  462. Ο/Η vioannis λέει:

    Γιάννη, για το ωραίο θέμα που έβαλες θα πούμε περισσότερα, (ελπίζω μες την ημέρα) .
    Για την ώρα, για να κάνεις τη δουλειά σου, στο κελί Β1 γράψε τον τύπο:

    =INDIRECT("A"&MAX(MATCH(1E+300;A1:A500;1);MATCH("*";A1:A500;-1)))
    

    Ο τύπος αποδίδει τη θέση του τελευταίου στοιχείου επιστρέφει την τελευταία εγγραφή (αριθμό ή αλφαριθμητικό) στη στήλη Α1:Α500. Αγνοεί λογικές τιμές, σφάλματα και κενά κελιά.

  463. Ο/Η Γιάννης Βα λέει:

    Κύριε Γιάννη, μόλις το έκανα, αντιγράφοντας τον τύπο στο δικό μου αρχείο, αλλά το αποτέλεσμα που δίνει είναι #ΔΥ.

  464. Ο/Η Γιάννης Βα λέει:

    Κύριε Γιάννη, νομίζω ότι κατάλαβα τι συμβαίνει. Επειδή οι τιμές στη στήλη Α είναι αποτέλεσμα συναρτήσεων (συγκεκριμένα συνάρτησης IF όπου το όρισμα TRUE εμπεριέχει VLOOKUP), όρισα το όρισμα FAULSE σε «0» και μου έφερε τα σωστά αποτελέσματα. Ευχαριστώ πολύ για την άμεση ανταπόκρισή σας και περιμένω νεώτερα για το συγκεκριμένο θέμα.

  465. Ο/Η Γιάννης Βα λέει:

    Τελικά όχι, δεν κατάλαβα. Μην λαμβάνετε υπόψη σας το προηγούμενο σχόλιό μου. Αυτό που είδα όμως – και γιάυτό είμαι σίγουρος οτι συμβαίνει -, είναι το εξής: Αν το κελί α1 το γυρίσω σε μορφοποίηση γενική και καταχωρήσω εκεί έναν αριθμό, οποιονδήποτε, τότε η συνάρτηση μου επιστρέφει την τελευταία εγγραφή της στήλης. Ελπίζω να βοήθησα με όλα αυτά και να μη σας μπέρδεψα, όπως φοβάμαι. Ευχαριστώ και πάλι.

  466. Ο/Η vioannis λέει:

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

  467. Ο/Η Stazybο Hοrn λέει:

    Γιάννη και Γιάννη:

    =MATCH(TRUE;INDEX(ISBLANK(A1:A500);0;0);0)-1
  468. Ο/Η vioannis λέει:

    Τελευταία και πρώτη εγγραφή σε στήλη.

    (Α)
    Ο παρακάτω τύπος επιστρέφει τον αριθμό γραμμής (δηλαδή τη θέση) του τελευταίου αλφαριθμητικού (κειμένου)στη στήλη Α:Α
    Αγνοεί αριθμούς, λογικές τιμές, σφάλματα και κενά κελιά.

    =MATCH("*";A:A;-1)
    

    Ο επόμενος τύπος αποδίδει τον αριθμό γραμμής (δηλαδή τη θέση) του πρώτου αλφαριθμητικού (κειμένου) στη στήλη Α:Α

    =MATCH("*";A:A;0)
    

    Αν στη στήλη Α το τελευταίο κείμενο είναι στο κελί Α99 και το πρώτο στο κελί Α7, οι τύποι θα επιστρέψουν αντίστοιχα 99 και 7 . Αριθμοί, λογικές τιμές (TRUE, FALSE), σφάλματα (#ΚΕΝΟ!, #ΔΙΑΙΡ/0!, #ΤΙΜΗ!, #ΑΝΑΦ!, #ΟΝΟΜΑ?, #ΑΡΙΘ!, #Δ/Υ) και κενά κελιά θα αγνοηθούν.
    Όταν λέμε θέση εννοούμε τη σχετική θέση μέσα στη στήλη. Αν δεν χρησιμοποιήσετε στους τύπους όλο το εύρος (Α:Α) της στήλης, αλλά τμήμα της στήλης (πχ Α5: Α500), οι τύποι δεν θα επιστρέψουν τον αριθμό γραμμής, αλλά τη σχετική θέση των αλφαριθμητικών στην στήλη Α5:Α500. Στο προηγούμενο παράδειγμα οι τύποι:

    =MATCH("*";A5:A500;-1)
    =MATCH("*";A5:A500;0)
    

    θα επιστρέψουν αντίστοιχα 95 και 3.
    Έτσι, τώρα με την βοήθεια της συνάρτησης INDEX θα πάρετε ακριβώς το τελευταίο αλφαριθμητικό:

    =INDEX(A:A;MATCH("*";A:A;-1))  
    Ή
    =INDEX(A5:A500;MATCH("*";A5:A500;-1))  
    

    Αν το τελευταίο κείμενο(ας πούμε “Γιάννης” ) είναι στο κελί Α99, τότε και οι δύο παραπάνω τύποι θα επιστρέψουν σωστά “Γιάννης”.
    Όμοια, οι παρακάτω τύποι θα επιστρέψουν το πρώτο αλφαριθμητικό:

    =INDEX(A:A;MATCH("*";A:A;0))  
    Ή
    =INDEX(A5:A500;MATCH("*";A5:A500;0))  
    

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

    =INDIRECT("A"&MATCH("*";A:A;-1))
    =INDIRECT("A"&MATCH("*";A:A;0))
    

    (Β)
    Για τη θέση του τελευταίου αριθμού σε μία στήλη και για να επιστραφεί ο τελευταίος αυτός αριθμός, αντίστοιχα οι τύποι:

    =MATCH(1E+300;A:A;1)
    =INDEX(A:A;MATCH(1E+300;A:A;1))
    

    Το όρισμα lookup_value της MATCH είναι απλά ένας τεράστιος αριθμός (10^300). Οι τύποι αγνοούν αλφαριθμητικά, λογικές τιμές, σφάλματα και κενά κελιά που θα βρουν στη στήλη. Οι τύποι, όπως και οι συναρτήσεις της ενότητας (Α), θα δουλέψουν σωστά και για τμήμα στήλης.

    (Γ)
    Για τη θέση του τελευταίου στοιχείου(αριθμού ή αλφαριθμητικού) σε μία στήλη και για το ίδιο το στοιχείο χρειάζεται ένα πάντρεμα των προηγουμένων τύπων:

    =MAX(MATCH(1E+30;A:A;1);MATCH("*";A:A;-1))
    =INDEX(A:A;MAX(MATCH(1E+300;A:A;1);MATCH("*";A:A;-1)))
    

    Οι τύποι αγνοούν λογικές τιμές, σφάλματα και κενά κελιά που θα βρουν στη στήλη. Οι τύποι, όπως και οι συναρτήσεις της ενότητας (Α), θα δουλέψουν σωστά και για τμήμα στήλης.

    (Δ)
    Άλλη προσέγγιση:
    ΠΡΟΣΟΧΗ: Όλοι οι τύποι αυτής της ενότητας είναι “συναρτήσεις πίνακες” και εισάγονται με Ctrl+Shift+Enter.
    Αριθμός γραμμής τελευταίου αριθμού σε στήλη:

    =MAX(ISNUMBER(A:A)*ROW(A:A))
    

    Αριθμός γραμμής τελευταίου αλφαριθμητικού (κειμένου) σε στήλη:

    =MAX(ISTEXT(A:A)*ROW(A:A))
    

    Αριθμός γραμμής τελευταίου σφάλματος σε στήλη:

    =MAX(ISERROR(A:A)*ROW(A:A))
    

    Αριθμός γραμμής τελευταίας λογικής τιμής σε στήλη:

    =MAX(ISLOGICAL(A:A)*ROW(A:A))
    

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

    =MAX(ISNUMBER(A:A)*ROW(A:A))
    =MAX(ISNUMBER(A30:A200)*ROW(A30:A200))
    

    θα επιστρέψουν σωστά 99.
    Συνδυάζοντας αυτούς τους τύπους με την INDIRECT ή με την INDEX, θα έχετε επιστροφή του τελευταίου αριθμού ή κειμένου ή σφάλματος ή λογικής τιμής
    Έτσι, για τον τελευταίο αριθμό της στήλης:

    =INDIRECT("A"& MAX(ISNUMBER(A:A)*ROW(A:A)))
    =INDEX(A:A; MAX(ISNUMBER(A:A)*ROW(A:A)))
    

    και για το τελευταίο κείμενο της στήλης:

    =INDIRECT("A"& MAX(ISTEXT(A:A)*ROW(A:A)))
    =INDEX(A:A; MAX(ISTEXT(A:A)*ROW(A:A)))
    

    Όμοια και για τους τύπους λογικών τιμών και σφαλμάτων. Στις συναρτήσεις αυτές χρησιμοποιήστε το πραγματικό εύρος στήλης που σας είναι απαραίτητο. ΟΙ συναρτήσεις που χρησιμοποιούν εύρος Α:Α γίνονται πολύ βαριές και καθυστερούν το φύλλο.
    Οι επόμενοι τύποι επιστρέφουν την τελευταία εγγραφή στήλης, όποια και να είναι αυτή, αριθμός, κείμενο, λογική τιμή ή σφάλμα

    =INDIRECT("A"& MAX(NOT(ISBLANK(A:A))*ROW(A:A)))
    =INDEX(A:A; MAX(NOT(ISBLANK(A:A))*ROW(A:A)))
    

    Ή ισοδύναμα:

    =INDIRECT("A"& MAX((1-ISBLANK(A:A))*ROW(A:A)))
    =INDEX(A:A; MAX((1-ISBLANK(A:A))*ROW(A:A)))
    

    Αν δεν υπάρχουν οι αναζητούμενες εγγραφές στη στήλη, οι συναρτήσεις INDIRECT επιστρέφουν το σφάλμα #ΑΝΑΦ! και οι συναρτήσεις INDEX επιστρέφουν μηδέν. Υπενθυμίζω, όλοι οι τύποι αυτής της ενότητας εισάγονται με Ctrl+Shift+Enter.

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

    =1/MAX(ISNUMBER(A:A)*1/ROW(A:A))
    

    Αριθμός γραμμής πρώτου αλφαριθμητικού (κειμένου) σε στήλη:

    =1/MAX(ISTEXT(A:A)*1/ROW(A:A))
    

    Αριθμός γραμμής πρώτου σφάλματος σε στήλη:

    =1/MAX(ISERROR(A:A)*1/ROW(A:A))
    

    Αριθμός γραμμής πρώτης λογικής τιμής σε στήλη:

    =1/MAX(ISLOGICAL(A:A)*1/ROW(A:A))
    

    Αριθμός γραμμής πρώτης εγγραφής (οποιασδήποτε) σε στήλη:

    =1/MAX(NOT(ISBLANK(A:A))*1/ROW(A:A))
    

    και κατόπιν αναλαμβάνουν οι INDIRECT ή η INDEX για να επιστρέψουν την ίδια την εγγραφή.
    Οι επόμενοι τύποι επιστρέφουν την πρώτη εγγραφή στήλης, όποια και να είναι αυτή, αριθμός, κείμενο, λογική τιμή ή σφάλμα

    =INDIRECT("A"& 1/MAX(NOT(ISBLANK(A:A))*1/ROW(A:A)))
    =INDEX(A:A; 1/MAX(NOT(ISBLANK(A:A))*1/ROW(A:A)))
    

    Και μία παραλλαγή για τους τελευταίους:

    =INDIRECT("A"& MIN(IF(ISBLANK(A:A);"";ROW(A:A))))
    =INDEX(A:A; MIN(IF(ISBLANK(A:A);"";ROW(A:A))))
    

    Όλοι οι τύποι και αυτής της (Ε) ενότητας είναι “συναρτήσεις πίνακες” και εισάγονται με Ctrl+Shift+Enter.

    (ΣΤ)
    Μεταφέρω εδώ τους επίσης Ctrl+Shift+Enter τύπους που υπάρχουν στο pdf αρχείο που συνοδεύει το σημείωμα του ιστολογίου “ ΕΝΑΣ ΜΗ ΤΕΚΜΗΡΙΩΜΕΝΟΣ ΤΡΟΠΟΣ ΧΡΗΣΗΣ ΤΗΣ ΣΥΝΑΡΤΗΣΗΣ CHOOSE ΚΑΙ ΟΙ ΕΦΑΡΜΟΓΕΣ ΤΟΥ”, είναι οι τύποι 16-19:
    Επιστέφει την τελευταία εγγραφή μιας στήλης (clmn):

    =VLOOKUP(MAX((1-ISBLANK(clmn))*ROW(clmn));CHOOSE({1;2};ROW(clmn);(clmn));2;FALSE)
    

    Επιστέφει την τελευταία αριθμητική εγγραφή μιας στήλης (clmn):

    =VLOOKUP(MAX(ISNUMBER(clmn)*ROW(clmn));CHOOSE({1;2};ROW(clmn);(clmn));2;FALSE)
    

    Επιστέφει την τελευταία αλφαριθμητική εγγραφή μιας στήλης (clmn):

    =VLOOKUP(MAX(ISTEXT(clmn)*ROW(clmn));CHOOSE({1;2};ROW(clmn);(clmn));2;FALSE)
    

    Επιστέφει την τελευταία εγγραφή μιας γραμμής (γραμμη):

    =HLOOKUP(MAX((1-ISBLANK(γραμμη))*COLUMN(γραμμη));CHOOSE({1\2};COLUMN(γραμμη);( γραμμη));2;FALSE)
    

    Προσάρμοσε τους σταθερούς πίνακες {1;2} και {1\2} στους διαχωριστήρες του δικού σου excel. Ίσως χρειαστεί να γράψεις πίνακες {1\2} και {1;2} αντίστοιχα.
    Παραπάνω, φίλε Γιάννη, σου έδωσα μέρος μόνο από το μεγάλο αυτό θέμα. Μερικές από τις λύσεις αυτές υπάρχουν στη βιβλιογραφία του excel, άλλες είναι δικές μου. Υπάρχει στο δίκτυο μία πολύ ενδιαφέρουσα αναλυτική μελέτη για το θέμα, των Frank Kabel και Bob Phillips, θα τη βρεις εδώ. Πρόσεχε μόνο, μερικές από τις συναρτήσεις που αναφέρονται σε αλφαριθμητικά, δεν δουλεύουν για ελληνικό κείμενο.

  469. Ο/Η vioannis λέει:

    Καλέ φίλε Stazybο, ίσως σε παρέσυρα από την κακή διατύπωση της βιαστικής πρωινής απάντησής μου. Θα την διορθώσω. Ο άλλος Γιάννης θέλει όχι απλά τη θέση της τελευταίας εγγραφής αλλά την ίδια την εγγραφή. Πάντως ο τύπος σου είναι για στήλη χωρίς κενά.

  470. Ο/Η Stazybο Hοrn λέει:

    Ε, ωραία:

    =INDIRECT("A"&MATCH(TRUE;INDEX(ISBLANK(A1:A500);0;0);0)-1)

    Στο ερώτημα, δε μιλάει για ενδιάμεσα κενά.

  471. Ο/Η Stazybο Hοrn λέει:

    και αλλάξτε το 500 σε 501:

    =INDIRECT("A"&MATCH(TRUE;INDEX(ISBLANK(A1:A501);0;0);0)-1)
  472. Ο/Η Γιάννης Βα λέει:

    Κύριε Γιάννη, μόλις τώρα είδα την αναλυτικότατη απάντησή σας, η οποία όχι μόνο έδωσε λύση στο θέμα που με απασχολούσε αλλά, απ΄ ο,τι καταλαβαίνω, θα διευρύνει τις δυνατότητες να αξιοποιήσω καλύτερα το αρχείο στο οποίο δουλεύω. Από αύριο το πρωΐ θα έχω πολύ «διάβασμα» στην προσπάθειά μου να κατανοήσω όσο γίνεται καλύτερα τα όσα γράφετε. Να είστε πάντα καλά!

  473. Ο/Η Γιάννης Βα λέει:

    Καλημέρα κύριε Γιάννη. Με το φόβο οτι κάνω κατάχρηση της φιλοξενείας σας, θα ήθελα τη βοήθειά σας στο εξής πρόβλημα: Στο Φύλλο 1 έχω πίνακα, πχ Α1:Ζ50. Στην πρώτη γραμμή του πίνακα και στα κελιά Β1:Ζ2, ημερομηνίες σε μορφή κειμένου (πχ 01014, 020114 κ.ο.κ.). Στην πρώτη στήλη του πίνακα και στα κελιά Α2:A50 τετραψήφιοι κωδικοί εργαζομένων, επίσης με μορφοποίηση κειμένου (πχ 0712, 2435,4264 κ.λ.π). Αυτό που ζητώ είναι: Σε κάποιο άλλο Φύλλο του Βιβλίου, όταν πληκτρολογώ στο κελί Α1 την ημερομηνία και στο κελί Α2 τον κωδικό του εργαζομένου, στο κελί Β2 να μου φέρνει την τιμή που έχει το κελί του πίνακα που βρίσκεται στην τομή της στήλης όπου βρίσκεται η ημερομηνία και της γραμμής που βρίσκεται ο κωδικός του εργαζομένου. Φαντάζομαι δηλαδή μία παραλλαγή της INDEX όπου τα ορίσματα θα καθορίζονται από αυτές τις δύο τιμές στα κελιά Α1 και Α2. Γίνεται;

  474. Ο/Η Νίκος Κ. λέει:

    Κύριε Γιάννη,συγχαρητήρια για την εξαιρετική δουλειά που κάνετε!Θα ήθελα αν μπορούσατε να με βοηθήσετε.Ίσως έχει παλιά ανάρτηση με το θέμα αλλά δεν μπόρεσα να το βρω.Λοιπόν,έχω ένα πίνακα(τιμοκατάλογο) όπου στην κάθετη στήλη έχω το προιόν(σωλήνες) και στην οριζόντια το μέγεθος (διάμετρος),μέσα έχω τιμές αγοράς μου.Διπλα στο ίδιο φύλλο έχω άλλο πίνακα όμοιο με το διπλανό αλλά με άλλες τιμές(άλλης εταιρίας).Θέλω να συγκρίνω τις τιμές των πινάκων ξεχωριστα για κάθε κελί μεταξύ τους και να φαίνεται κάπως (π.χ κοκκινίζει το κελί με τη μικρότερη τιμή).Ελπίζω να ήμουν κατανοητός.Ευχαριστώ.

  475. Ο/Η vioannis λέει:

    Γιάννη:
    Γίνεται με την Vlookup (και όχι μόνο):
    Σε ένα άλλο φύλλο:
    Στο κελί Α2 γράψε τον κωδικό.
    Στο κελί Β2 γράψε την ημερομηνία.
    Στο κελί C2 γράψε την συνάρτηση:

    =VLOOKUP(A2;Φύλλο1!A1:Z50;MATCH(B2;Φύλλο1!A1:Z1;0);FALSE)
    

    η οποία θα επιστρέψει την τιμή που είναι στη διασταύρωση κωδικού-ημερομηνίας στον πίνακα A1:Z50 του φύλλου1.
    Κάνεις δηλαδή vlookup για τον κωδικό που έγραψες στο κελί Α2 και για να ξέρει η vlookup από ποια στήλη θα επιστρέψει τιμή (col_index_num), βάζουμε την match να μας πει σε ποια στήλη βρίσκεται η ημερομηνία. Το όρισμα, δηλαδή, MATCH(B2;Φύλλο1!A1:Z1;0) ψάχνει για την ημερομηνία που έγραψες στο κελί Β2, μέσα στη στήλη Α1:Ζ1 του πίνακα, και επιστρέφει τη σχετική θέση της ημερομηνίας στη στήλη. Έτσι ξέρει η vlookup από ποια στήλη να επιστρέψει τιμή.

    Με την ίδια λογική λύση δίνει και η hlookup:

    =HLOOKUP(B2;Φύλλο1!A1:Z50;MATCH(A2;Φύλλο1!A1:A50;0);FALSE)
    

    Εδώ κάνεις hlookup για την ημερομηνία και η match σε πληροφορεί από σε ποια γραμμή βρίσκεται ο κωδικός, και από αυτή τη γραμμή επιστρέφει τιμή η hlookup.

    Επίσης μπορείς να δουλέψεις με την index ή την offset

    =INDEX(Φύλλο1!A1:Z50;MATCH(A2;Φύλλο1!A1:A50;0);MATCH(B2;Φύλλο1!A1:Z1;0))
    
    =OFFSET(Φύλλο1!A1;MATCH(A2;Φύλλο1!A1:A50;0)-1;MATCH(B2;Φύλλο1!A1:Z1;0)-1)
    

    Αυτές τις έχω περιγράψει στο σημείωμα του ιστολογίου: “Δουλεύοντας με ένα πίνακα”. Εκεί θα δεις και πως θα ορίσεις τον πίνακα δυναμικά, ώστε να μην χρειάζεται να τροποποιείς τις συναρτήσεις όταν ο πίνακας επεκτείνεται προς τα κάτω με νέες εγγραφές ή προς τα δεξιά με νέα πεδία (στήλες). Τους παραπάνω τύπους δες τους να δουλεύουν στο βιβλίο: cross_tabulation_tables.xls
    Φυσικά, κωδικοί και ημερομηνίες πρέπει να είναι μοναδικές εγγραφές και να μην παρουσιάζουν διπλοεγγραφές.

  476. Ο/Η vioannis λέει:

    Νίκο, αν και έχω την αίσθηση ότι δεν σε καλύπτω (και εσύ δεν λες πολλά για το πώς θες να γίνεται η αναζήτηση, μιλάς μόνο για επισήμανση της μικρότερης τιμής), δες δύο παραδείγματα με μορφοποίηση υπό όρους στο βιβλίο Nikos_Test.xls. Στο παράδειγμα του πρώτου φύλλου του βιβλίου υπάρχουν τρεις πίνακες. Έχω εισάγει μορφοποίηση υπό όρους και στους τρεις πίνακες, ώστε να χρωματίζεται η μικρότερες τιμή για κάθε αντίστοιχη τριάδα. Παράδειγμα από το Προϊόν_05 με Διάμετρο_07 χρωματίζεται η τιμή του πίνακα 2. Στους πίνακες ο τύπος της μορφοποίησης είναι:

    =B2=MIN(B2;B23;B44)
    

    Στο δεύτερο φύλλο μια διαφορετική μορφοποίηση υπό όρους. Επιλέγεις την τιμή που θες στον πρώτο πίνακα (όχι στους άλλους) και πατάς F9. Τότε χρωματίζεται η αντίστοιχη πιο φτηνή τιμή σε κάποιον από τους πίνακες. Στα κελιά L3:L5 μεταφέρονται με συναρτήσεις, οι αντίστοιχες τιμές της επιλεγμένης. Η μορφοποίηση εδώ είναι λίγο πιο σύνθετη:

    =AND(COLUMN(B2)=CELL("col");B2=MIN($L$3:$L$5))
    

    Με μακροεντολές μπορεί να γίνουν πιο ενδιαφέροντα πράγματα, αν αυτά δεν σου δίνουν ιδέες για να λύσεις το πρόβλημά σου.

  477. Ο/Η Γιάννης Βα λέει:

    Κύριε Γιάννη, με καλύψατε πλήρως! Πολλά πολλά ευχαριστώ!

  478. Ο/Η Νίκος Κ. λέει:

    Κύριε Γιάννη σας ευχαριστώ πάρα πολύ με καλύψατε πλήρως!!!Να είστε πάντα καλά!

  479. Ο/Η Zωή Χαραλά λέει:

    Ευχαριστώ πολύ για την βοήθεια!!!

  480. Ο/Η Γιάννης Βα λέει:

    Καλημέρα κύριε Γιάννη. Με βάση τα όσα απαντήσατε πριν λίγες ημέρες, σε φίλο του ιστολογίου, σχετικά με την ενσωμάτωση συναρτήσεων στη VBA και διαβάζοντας και το σχετικό σημείωμα που έχετε ανεβάσει, προσπάθησα να κάνω το ίδιο για την IF, αλλά δεν τα κατάφερα επειδή στην περίπτωσή μου τα ενσωματωμένα IF είναι πολλά, (περίπου 10) και μπερδεύτηκα. Θα ήμουν ευγνώμων αν με βοηθούσατε. Ευχαριστώ.

  481. Ο/Η vioannis λέει:

    Γιάννη, μία τεχνική για να γράφονται συναρτήσεις με πολλές ενσωματωμένες IF χωρίς λάθη, θα περιγράψω πολύ σύντομα στο ιστολόγιο. Σχεδόν το μισό σημείωμα το έχω έτοιμο, αύριο-μεθαύριο θα το ολοκληρώσω. Ίσως βοηθήσει να βρεις το πρόβλημα. Αν το πρόβλημα είναι στην vba, είναι άλλο θέμα, θα χρειαστούν πιο πολλές λεπτομέρειες εκ μέρους σου.

  482. Ο/Η bill λέει:

    καλησπέρα gourou του excel. Πώς εισάγω controls από τη microsoft visual basic σε excel; θέλω στο κελί F5 για παράδειγμα να βάλω combobox ή checklist;ΕΥΧΑΡΙΣΤΩ

  483. Ο/Η vioannis λέει:

    Bill
    Για ένα πχ ComboBox ή ένα ListBox μέσω της vba θα χρειαστούν τα παρακάτω βήματα:
    Α) Θα γίνει εισαγωγή ενός UserForm στον επεξεργαστή της vba.
    Β) Θα γραφτεί η μάκρο που θα προβάλει το UserForm στο φύλλο.
    Γ) Θα προστεθεί στο UserForm το στοιχείο ComboBox ή ListBox ή όποιο από τα 15 συνηθισμένα στοιχεία ελέγχου.
    Δ) Θα οριστούν οι ιδιότητες του στοιχείου.
    Ε) Θα γραφτεί ο κώδικας για το στοιχείο, κώδικας που θα κάνει τη δουλειά για την οποία έχει εισαχθεί το στοιχείο.
    Δες παραδείγματα ListBox στο αρχείο GoToSheet_vbamacro.xls που θα βρεις στο σημείωμα του ιστολογίου: “Κρυφά και πολύ κρυφά φύλλα” και στο αρχείο SpecialValidation_03.xls στο σημείωμα “Επικύρωση δεδομένων από λίστα”.
    Η αναλυτική περιγραφή όλων αυτών των βημάτων και οι ιδιότητες των στοιχείων ξεφεύγουν από τα όρια μιας απάντησης , θα χρειαζόταν πολλές ώρες να γράφω (σε ένα βιβλίο vba η παραπάνω περιγραφή καταλαμβάνει πολλές σελίδες).

    Από την άλλη υπάρχουν τα στοιχεία ελέγχου της γραμμής εργαλείων «Φόρμες». Για αυτά δες λεπτομέρειες στις παρακάτω διευθύνσεις:

    Τρόπος χρήσης των στοιχείων ελέγχου της γραμμής εργαλείων «Φόρμες» (Forms) σε ένα φύλλο εργασίας του Excel: Εδώ

    Προσθήκη πλαισίου λίστας ή σύνθετου πλαισίου σε φύλλο εργασίας: