Συζητήσεις

letters2015

2015

Προσωρινά κλειστό

Το ιστολόγιο,  για αρκετό καιρό θα είναι κλειστό. Στο διάστημα αυτό, ούτε θα ενημερώνεται, ούτε θα μπορείτε να στείλετε σχόλια και  μηνύματα.

295 Responses to Συζητήσεις

  1. Ο/Η giorgos chania λέει:

    Καλη χρονια σε ολους με υγεια! εχω φτιαξει ενα πινακα και για καποιο ανεξηγητο λογο οταν φιλτραρω κατι αφηνει την τελευταια γραμμη που πινακα με ολα τα δεδομενα της αφιλτραριστη. Εχετε καμια ιδεα τι μπορει να φταιει? ευχαριστω!

  2. Ο/Η vioannis λέει:

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

  3. Ο/Η ΑΡΗΣ λέει:

    Για να επιλέξω όλα τα αντικείμενα, γραφήματα, εικόνες που υπάρχουν σε ένα φύλλο στην κεντρική καρτέλα επιλέγω Εύρεση & Επιλογή, Μετάβαση Ειδικά σε, Αντικείμενα και ΟΚ. Η καταγραφή της εργασίας αυτής σε μακροεντολή δίνει ActiveSheet.DrawingObjects.Select
    Τι πρέπει να κάνω όμως για να επιλέξω όλα τα αντικείμενα σε μία συγκεκριμένη περιοχή του φύλλου και όχι σε όλο το φύλλο. Όχι να τα επιλέξω ένα- ένα με το Ctrl, αλλά να ορίσω την περιοχή και όλα τα αντικείμενα μέσα στην περιοχή αυτή να επιλεγούν. Δοκίμασα παράδειγμα την Range(«A1:C200»).DrawingObjects.Select αλλά δεν δουλεύει. Ευχαριστώ για όποια βοήθεια.

  4. Ο/Η giorgos chania λέει:

    δυστυχως φιλε γιαννη(να χαιρεσαι και το ονομα) τσεκαρα οτι ειπες και ειναι ολα οκ! δεν μπορω να καταλαβω τι γινεται

  5. Ο/Η vioannis λέει:

    Άρη το θέμα σου με έχει απασχολήσει και εμένα στο παρελθόν και έχω λύση. Θα σου γράψω αναλυτικά αύριο.

  6. Ο/Η vioannis λέει:

    Γιώργο, αν στον πίνακα με τα δεδομένα σου υπάρχουν συναρτήσεις SUBTOTAL, αντί να τις γράφεις = SUBTOTAL(….), γράψτες:

    =--SUBTOTAL(….),
    

    Δηλαδή με ένα διπλό μείον αμέσως μετά το ίσον. Το διπλό μείον δεν αλλάζει το αποτέλεσμα της συνάρτησης και σε πολλές περιπτώσεις αναιρεί τα προβλήματα που δημιουργεί η συνάρτηση αυτή. Δες και στη σελίδα του ιστολογίου “Μικρά και ίσως χρήσιμα” το μικρό Νο (3) “Αρίθμηση μετά από φιλτράρισμα”, όπου και εκεί για ανάλογους λόγους γράφω την SUBTOTAL με διπλό μείον. Ισοδύναμα μπορείς να γράψεις

    =0+SUBTOTAL(….)
    ή
    =N(SUBTOTAL(….))
    

    Αφού τροποποιήσεις όλες τις SUBTOTAL ακύρωσε και ξανατοποθέτησε το φίλτρο στον πίνακα.

  7. Ο/Η vioannis λέει:

    Άρη, πολύ ωραίο θέμα.
    Η θέση ενός αντικειμένου πάνω σε ένα φύλλο καθορίζεται από την πάνω αριστερή και κάτω δεξιά γωνία του πλαισίου επιλογής του αντικειμένου (Top Left Cell και Bottom Right Cell). Τα κελιά Α2 και C8 αντίστοιχα, καθορίζουν τη θέση του παρακάτω σχήματος:

    Στο ερώτημά σου τώρα υπάρχουν δύο περιπτώσεις:
    1η) Όταν, παράδειγμα, επιλέξεις την περιοχή Β1:Β10, να θεωρείς ότι το σχήμα αυτό ανήκει στην περιοχή. Δηλαδή, οποιαδήποτε επαφή του σχήματος με την επιλεγείσα περιοχή κελιών θα σημαίνει ότι το σχήμα ανήκει στην περιοχή.
    2η) Να θεωρείς ότι ένα σχήμα ανήκει σε μία περιοχή, όταν ολόκληρο το σχήμα εμπεριέχεται στην περιοχή που έχει επιλεγεί. Στο παράδειγμα της εικόνας, το σχήμα θα επιλεγεί αν προηγουμένως έχει επιλεγεί τουλάχιστον η περιοχή κελιών A2:C8 ή μια μεγαλύτερή της.
    Και για τη μία και για την άλλη περίπτωση υπάρχει λύση.
    1η περίπτωση:
    Ο χρήστης επιλέγει μία περιοχή κελιών (ή περισσότερες, με το Ctrl) στο φύλλο. Τρέχει την μάκρο, και όλα τα αντικείμενα που υπάρχουν στην περιοχή, είτε ανήκουν εξ ολοκλήρου μέσα στην περιοχή είτε έχουν μόνο ένα τμήμα τους κοινό με την περιοχή, θα επιλεχθούν. Επαναλαμβάνω ότι το πραγματικό μέγεθος ενός αντικειμένου ορίζεται από το ορθογώνιο πλαίσιο επιλογής του αντικειμένου, αυτό καθορίζει σε ποια κελιά “πατάει” (καταλαμβάνει) το αντικείμενο.
    Η μάκρο δουλεύει ως εξής: Διατρέχει όλα τα αντικείμενα του φύλλου και για κάθε ένα, αφού βρει τις διευθύνσεις των TopLeftCell και BottomRightCell, προσδιορίζει την περιοχή (ObjRng) κελιών που “πατάει” το αντικείμενο. Αν η ObjRng έχει επικάλυψη (Intersect) με την επιλεγείσα από το χρήστη περιοχή (Selection), τότε και μόνο τότε γίνεται ένα ακόμα στοιχείο του πίνακα ObjArr(). Όταν ολοκληρωθεί η διαδικασία For…Next ο πίνακας ObjArr() θα περιέχει όλα τα αντικείμενα της επιλεγείσης περιοχής και μόνο αυτά. Τέλος με την ιδιότητα ActiveSheet.Shapes.Range(Αrray) επιλέγονται τα αντικείμενα και η διαδικασία τερματίζει.

    Sub GoToObjectsOfSelectedRange()
    
    Dim Obj As Object
    Dim ObjName As String
    Dim ObjRng As Range
    Dim ObjArr() As Variant
    Dim k As Integer
    Dim TL As String
    Dim BR As String
    
    If Not TypeName(Selection) = "Range" Then GoTo telos
    For Each Obj In ActiveSheet.DrawingObjects
        TL = Obj.TopLeftCell.Address
        BR = Obj.BottomRightCell.Address
        Set ObjRng = Range(TL, BR)
        If Not Intersect(ObjRng, Selection) Is Nothing Then
        ObjName = Obj.Name
        k = k + 1
        ReDim Preserve ObjArr(k - 1)
        ObjArr(k - 1) = ObjName
        End If
    Next
    If k = 0 Then
    MsgBox "Δεν εντοπίστηκαν αντικείμενα"
    GoTo telos
    End If
    ActiveSheet.Shapes.Range(ObjArr).Select
    telos:
    End Sub
    

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

    If Not Intersect(ObjRng, Selection) Is Nothing Then
    

    με τη γραμμή:

    If Not Intersect(Obj.TopLeftCell, Selection) Is Nothing And _
    Not Intersect(Obj.BottomRightCell, Selection) Is Nothing Then
    
  8. Ο/Η ΑΡΗΣ λέει:

    Ευχαριστώ πολύ για την πλήρη ανάλυση και λύση στο ερώτημα μου

  9. Ο/Η marimarou λέει:

    Καλή χρονιά και Χρόνια πολλά! Σε προηγούμενη συζήτηση που είχαμε σε είχα ρωτήσει πως μπορώ έχοντας έναν πίνακα στην στήλη Α με ονοματεπώνυμα και στην στήλη Β με αριθμούς και σε μια ανεξάρτητη στήλη Ε έχω μία λίστα μόνο με ονόματα. Πως μπορώ από τη λίστα που έχω στη στήλη Ε να μου εμφανίζει ποια ονόματα υπάρχουν στην στήλη Α και να αθροίζει από τη στήλη Β τους αριθμούς, αν υποθέσουμε ότι ένα όνομα (και μόνο αυτό χωρίς επώνυμο) υπάρχει πάνω από 1 φορά; Αν υπάρχει μόνο μια φορά απλά να εμφανίζει τα δεδομένα όπως είναι. Μου είχες πει ότι θα χρησιμοποιήσω τη συνάρτηση αυτή ως εξής: =SUMPRODUCT(N(NOT(ISERROR(FIND(E1;$A$1:$A$100))))*$B$1:$B$100)
    και δούλεψε πολύ καλά.
    Τώρα σε μία στήλη C έχω καταχωρήσει τα γράμματα Α, Β, Γ, Δ και Ε ως στοιχεία και θέλω να ελέγχει αν υπάρχει το γράμμα Α σ αυτήν τη στήλη και το όνομα από την στήλη Ε στην στήλη Α και να μου βγάζει το άθροισμα αυτών από τη στήλη Β.
    Σ ευχαριστώ πολύ εκ των προτέρων για την πολύτιμη βοήθεια που μας προσφέρεις!!!

  10. Ο/Η vioannis λέει:

    Καλή χρονιά marimarou!
    Να ανακεφαλαιώσω και να καταλάβω: Έχεις μια στήλη Α με ονόματα, μια στήλη Β με αριθμούς, μια στήλη C με χαρακτηρισμούς Α,Β,Γ,Δ,Ε ώστε σε κάθε όνομα να αντιστοιχεί ένας αριθμός και ένας χαρακτηρισμός.
    Πχ μία γραμμή έχει : ΠΕΤΡΟΣ ΠΕΤΡΙΔΗΣ – 100 – Δ
    Άλλη γραμμή έχει: ΠΕΤΡΟΣ ΝΙΚΟΛΑΟΥ- 200 – Ε
    Άλλη γραμμή έχει: ΠΕΤΡΟΣ ΤΑΔΕ- 300 – Δ
    Τώρα στη στήλη Ε έχεις ονόματα ή τμήματα ονομάτων, παράδειγμα μπορεί να έχεις απλά ΠΕΤΡΟΣ και θέλεις το άθροισμα των ποσών της στήλης Β, για όλους όσους έχουν μικρό όνομα ΠΕΤΡΟΣ και ταυτόχρονα έχουν χαρακτηρισμό Δ; Δηλαδή η συνάρτηση να επιστρέφει 100+300=400; Πάω καλά ή τα έχω καταλάβει λάθος;

  11. Ο/Η marimarou λέει:

    Ναι ακριβώς αυτό θέλω να κάνω.
    Σ ευχαριστώ πολύ για την άμεση ανταπόκριση σου!

  12. Ο/Η vioannis λέει:

    Τότε marimarou, αν το γράμμα το εισάγεις από ένα κελί, έστω το F1, ο προηγούμενος τύπος τροποποιείται ως εξής:

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

    Αν το γράμμα το εισάγεις απευθείας στον τύπο, έτσι:

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

    Χρειάζεται λίγο προσοχή στους χαρακτηρισμούς Α και Β, αν είναι ελληνικοί ή αγγλικοί χαρακτήρες.

  13. Ο/Η marimarou λέει:

    Σ ευχαριστώ πολυ. Δούλεψε τέλεια!

  14. Ο/Η Georgia λέει:

    Καλή χρονιά και συγχαρητήρια για το Blog!
    Εχω ένα απλό πρόβλημα, αλλά για εμένα που ειναι καινούργια στην χρήση του excel είναι μεγάλο! Έχω ένα πίνακα στο φύλλο 1 όπου καταγράφω τα στοιχεία δύο κατηγοριών πχ (Προσφορά- Ζήτηση). Θέλω στο φύλλο 2 να μου μεταφέρει τις γραμμές της κατηγορίας «προσφορά» και στο φύλλο 3 τις γραμμές της κατηγορίας «Ζήτηση» έτσι ώστε να έχω στο φύλλο 1 ένα συγκεντρωτικό πίνακα αλλά όποτε θέλω να βλέπω ξεχωριστά την προσφορά και την ζήτηση.

  15. Ο/Η vioannis λέει:

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

    Sub PasteFilteredDataInNewSheet()
    Dim keli As Range
    Dim keliColumn As Integer
    Dim keliValue As String
    Set keli = Selection
    If Not keli.Count = 1 Then GoTo telos
    If IsEmpty(keli) Then GoTo telos
    keliColumn = 1 + keli.Column - keli.CurrentRegion.Column
    keliValue = keli.Value
    Selection.AutoFilter
    Selection.AutoFilter Field:=keliColumn, Criteria1:=keliValue
    Selection.CurrentRegion.Select
    Selection.SpecialCells(xlCellTypeVisible).Copy
    keli.Select
    Sheets.Add
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    Range("A1").Select
    keli.AutoFilter
    telos:
    End Sub
    

    – – – – – – – – – –
    14/2/15 : Στο σημείωμα του ιστολογίου «Γρήγορο φιλτράρισμα μιας λίστας « θα βρείτε μια μακροεντολή που κάνει ότι και η παραπάνω, αλλά είναι πιο αποτελεσματική, μπορεί να φιλτράρει οποιαδήποτε τιμή, όπως ημερομηνίες , ώρες κλπ , ενώ αυτή εδώ περιορίζεται σε κείμενο και αριθμούς.
    – – – – – – – – – –
    Επειδή είσαι νέα στο excel:
    Αναλυτικά βήματα για να εισάγεις τον κώδικα :
    – -Αν δουλεύεις σε excel 2007 και πάνω, άνοιξε το βιβλίο σου και αποθήκευσέ το σαν βιβλίο με δυνατότητα μακροεντολών. Αν το βιβλίο σου λέγεται ABCD θα αποθηκευτεί με όνομα ABCD.xlsm. Αν δουλεύεις σε excel 2003 και παλιότερο, αγνόησε αυτό το βήμα
    – – Με ανοιχτό το βιβλίο πάτησε τον συνδυασμό πλήκτρων ALT+F11. Θα εμφανιστεί ο επεξεργαστής της Visual Basic.
    – – Στο πάνω αριστερά παράθυρο Project-VBAProject, βρες το βιβλίο σου. Εδώ το βιβλίο θα λέγεται VBAProject(ABCD.xlsm) ή VBAProject(ABCD.xls).
    – – Κλικ στο τετράγωνο μπροστά στο όνομα ώστε να δείχνει πλην (-) και όχι συν (+) και κάνε κλικ πάνω στο όνομα VBAProject(ABCD.xlsm) για να το επιλέξεις. (γίνεται γαλάζιο)
    – – Άνοιξε το μενού Insert και κάνε κλίκ στην επιλογή module. Θα προστεθεί ένας φάκελος με όνομα module και μία σελίδα του φακέλου με όνομα module1
    – – Κάνε διπλό κλικ πάνω στο όνομα module1 και στη δεξιά μεγάλη λευκή περιοχή γράψε (καλλίτερα αντίγραψε και επικόλλησε) τον παραπάνω κώδικα.
    – – Όταν ολοκληρώσεις πατήστε ALT+Q για να κλείσει ο επεξεργαστής της Visual Basic και να ξαναγυρίσεις στο βιβλίο. Αποθήκευσε το βιβλίο και είσαι έτοιμη.
    Από τη στιγμή που εγκατέστησες την μακροεντολή, για να την τρέξεις, υπάρχουν πολλοί τρόποι. Μια καλή παρουσίαση δες εδώ:
    https://support.office.com/en-nz/article/Run-a-macro-5535c4ee-ff91-4e99-9704-99a49f1dcdf4

  16. Ο/Η Georgia λέει:

    Σε ευχαριστώ πολύ για την άμεση και εμπεριστατωμένη απάντηση σου.
    Το δοκίμασα και λειτούργησε! Κι ας ήταν η πρώτη επαφή με μακροεντολές.

  17. Ο/Η vioannis λέει:

    Χαίρομαι, Γεωργία, που δούλεψε. Καλώς όρισες στον μαγικό κόσμο των μακροεντολών του excel!

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

    Καλησπέρα και καλη χρονια και απο εμενα.Λοιπον προσπαθω εδω και καιρο αλλα δεν μπορω να καταφερω το εξης.Καταρχην θελω μεσα στο excel να βαζω SUM=AD στήλη, λοιπον επειτα ομως δεν εχω αριθμους απο το C4 – AC4 δεν γραφω αριθμους εχω μονο λεξεις θελω αυτες τις λεξεις να τις διαβαζει και να με λεει ποσες εχω συνολο σε αυτην την στήλη. Ευχαριστω πολυ.

  19. Ο/Η vioannis λέει:

    Χάρη, Για να μετρήσεις πόσα κελιά στην περιοχή C4:AC4 περιέχουν κείμενο χρησιμοποίησε έναν από τους τύπους:

    =COUNTA(C4:AC4)-COUNT(C4:AC4)
    ή
    =COUNTIF(C4:AC4;"*")
    

    Η συνάρτηση SUM για τις στήλες AD δεν γράφεται όπως την γράφεις, αλλά έτσι:

    =SUM(A:D)
    

    Και πρέπει να τη γράψεις έξω από τις στήλες Α έως D για να αποφύγεις κυκλικές αναφορές.

  20. Ο/Η marimarou λέει:

    Καλημέρα Γιάννη,
    Για άλλη μια φορά χρειάζομαι τη βοήθεια σου. Έχω έναν πίνακα στο excel με τις στήλες D: κωδικός & E: Όνομα στο φύλλο Α. Στην στήλη D ο ίδιος κωδικός μπορεί να αναγράφεται πολλές φορές. Στην στήλη Ε αντιστοιχεί ένα όνομα σε κάθε κωδικό της στήλης D. Στο φύλλο Β έχω σε μία στήλη με τους κωδικούς (απο μία φορά τον καθένα) και θέλω στη στήλη Ε να μου εμφανίζει το όνομα που αντιστοιχεί σε κάθε κωδικό. Ελπίζω να έγινα κατανοητή. Ευχαριστώ πολύ.

  21. Ο/Η vioannis λέει:

    marimarou, Είναι μια χαρακτηριστική εφαρμογή της συνάρτησης φύλλου vlookup.
    Φύλλο1 στήλη D : κωδικοί
    Φύλλο1 στήλη E :νόματα
    Φύλλο2 στήλη Α : κωδικοί
    Φύλλο2 στήλη Ε : στο κελί Ε2 γράψε τη συνάρτηση:
    (Υποθέτω και στα δύο φύλλα, στην πρώτη γραμμή υπάρχουν τίτλοι)

    =VLOOKUP(A2;Φύλλο1!$D$1:$E$1000;2;FALSE)
    

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

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

  23. Ο/Η vioannis λέει:

    Χαράλαμπε, Ευχαριστώ για τα καλά σου λόγια. Ας ξεκινήσουμε με μια vba συνάρτηση και στην πορεία συμπληρώνουμε και βελτιώνουμε. Η συνάρτηση SortLetters δέχεται το περιεχόμενο ενός κελιού και επιστρέφει τους χαρακτήρες του κελιού ταξινομημένους και χωρισμένους με κόμμα. Τα τυχόν κενά του κελιού θα αγνοηθούν. Παράδειγμα, αν στο κελί Α1 είναι το κείμενο ‘Excel Λύσεις’, η συνάρτηση =SortLetters(Α1) θα επιστρέψει: E,c,e,l,x,Λ,ε,ι,ς,σ,ύ
    Η βοηθητική συνάρτηση BubbleSort που κάνει την ταξινόμηση είναι παρμένη από την υποστήριξη της Microsft (http://support2.microsoft.com/kb/133135)
    Η SortLetters, αν κάνει αυτό που ζητάς, μπορεί να χρησιμοποιηθεί από μία μακροεντολή που θα διατρέχει στήλες ή περιοχές του φύλλου και θα κάνει αυτόματα τη δουλειά για πολλές λέξεις. Τα λέμε..
    Ο κώδικας:

    Option Base 1
    
    Function SortLetters(lexi As String) As String
    Dim i As Integer
    Dim ArrLexi() As Variant
    lexi = Replace(lexi, " ", "")
    For i = 1 To Len(lexi)
    ReDim Preserve ArrLexi(i)
    ArrLexi(i) = Mid(lexi, i, 1)
    Next
    BubbleSort ArrLexi
    SortLetters = Join(ArrLexi, ",")
    End Function
    Private Function BubbleSort(TempArray As Variant)
    Dim Temp As Variant
    Dim i As Integer
    Dim NoExchanges As Integer
    Do
    NoExchanges = True
    For i = 1 To UBound(TempArray) - 1
    If TempArray(i) > TempArray(i + 1) Then
    NoExchanges = False
    Temp = TempArray(i)
    TempArray(i) = TempArray(i + 1)
    TempArray(i + 1) = Temp
    End If
    Next i
    Loop While Not (NoExchanges)
    End Function
    
  24. Ευχαριστώ πάρα πολύ! Μου έλυσες τα χέρια! Θα το προχωρήσω όσο μπορώ τώρα, και όταν ξαναβρώ πρόβλημα θα σου πω! ;)

  25. Σκόνταψα σε ένα πετραδάκι, και δεν λέω να ξεκολλήσω.
    Έχω τον εξής απλό κώδικα:

    Function Dokimazo(lexi As String) As String
    Dokimazo = Subt() ‘εξηγώ παρακάτω τι βάζω εδώ
    End Function

    Private Function Subt(lexi As String, old As String, neo As String)
    Subt = Application.WorksheetFunction.Substitute(lexi, old, neo)
    End Function

    Private Function Lwr(lexi As String)
    Lwr = Application.WorksheetFunction.Lower(lexi)
    End Function

    Private Function Upper(lexi As String)
    Upper = Application.WorksheetFunction.Upper(lexi)
    End Function

    Private Function Exact(lexi1 As String, lexi2 As String)
    Exact = Application.WorksheetFunction.Exact(lexi1, lexi2)
    End Function

    Η Private Function Subt μου λειτουργεί άψογα με οποιόδηποτε σωστό όρισμα, και όποτε την εκτελώ στο φύλλο εργασίας επιστρέφει αποτέλεσμα.
    Για παράδειγμα αν βάλω Dokimazo = Subt(lexi, «ι», Subt(lexi, «β», «!»)) ή αν βάλω
    Dokimazo = Subt(lexi,»β»,»!»), θα τα κάνει όλα σωστά.
    Αν όμως χρησιμοποιήσω κάποια από τις άλλες έχοντας προσέξει τα ορίσματα και όλα, μου βγάζει στο κελί σφάλμα τύπου #ΤΙΜΗ! πάντα
    Επίσης αν γράψω Dokimazo = Subt(lexi, κατι, Lwr(lexi)) ή αντί για τη Lwr βάλω κάποια από τις άλλες βγάζει το ίδιο σφάλμα
    Επίσης αν στη Function Dokimazo εκτελέσω τον ακόλουθο κώδικα που είναι σε σχόλιο παρακάτω
    (χωρίς το ‘5) βγάζει σφάλμα, ή αν εκτελέσω τα 1-5 μόνο βγάζει σφάλμα!

    Function Dokimazo(lexi As String) As String
    ‘Dim R, T1 As String ‘1
    ‘Dim T2 As Boolean ‘2
    ‘T1 = Lwr(lexi) ‘3
    ‘T2 = Exact(lexi, T1) ‘4

    ‘If (Len(lexi) < 13) And T2 Then
    'R = Subt(Subt(Subt(Subt(Subt(Subt(Subt(Subt(Subt(Application.WorksheetFunction.Upper(lexi), "Ώ";"Ω");"Ύ";"Υ");"Ή";"Η");"Ί";"Ι");"Έ";"Ε");"Ό";"Ο");"Ά";"Α");"Ϋ";"Υ");"Ϊ";"Ι")
    'Else
    'R = Subt(lexi, lexi, "re file")
    'End If

    Dokimazo = Subt(lexi,"β","!") '5
    'Dokimazo = R
    End Function

    Συγνώμη για τη ζαλάδα, αλλά δεν καταλαβαίνω γιατί η Subt δουλεύει όταν εκτελείται μόνη της στη function και οι άλλες όχι…, αλλιώς αν εκτελεστεί και άλλη εντολή τύπου Application.WorksheetFunction πετάει σφάλμα στο κελί.
    Από το About: TDM Importer Version 3.2.0.18 (Είναι το Office 2007)

  26. Ο/Η vioannis λέει:

    Χαράλαμπε, Γρήγορα-γρήγορα, γιατί πιο αναλυτικά θα τα πούμε αύριο. Οι συναρτήσεις φύλλου Upper και Lower δεν μπορούν να κληθούν από την vba σαν μέλη του αντικείμενου Application.WorksheetFunction διότι η vba για την εργασία αυτή έχει δικές της συναρτήσεις τις UCase, LCase.Η γραμμές κώδικα λοιπόν:
    Application.WorksheetFunction.Upper(lexi)
    Application.WorksheetFunction.Lower(lexi)
    μοιραία επιστρέφουν λάθος. (Να σημειώσω ότι ειδικά για την ελληνική γλώσσα οι Upper, Lower του φύλλου και UCase, LCase της vba δεν δουλεύουν με τον ίδιο τρόπο, θα το συζητήσουμε αυτό). Για να δεις αν μια συνάρτηση φύλλου είναι μέλος του αντικειμένου Application.WorksheetFunction. μόλις πατήσεις την τελεία μετά τη λέξη Function ανοίγει ένα πλαίσιο με όλες τις διαθέσιμες συναρτήσεις. Έτσι θα δεις ότι ούτε η Exact προσφέρεται, ενώ η σύνταξη Application.WorksheetFunction.Substitute είναι αποδεκτή. Συνέχεια αύριο. Πες μου όμως ποιος είναι ο τελικός στόχος;

  27. Πρόκειται για ένα αρκετά εκτενές πρόγραμμα που λειτουργεί ως επίλυση σε ένα παιχνίδι της μορφής του scrubble, το κυβόλεξο του DOD στο Facebook.
    Αν θες μπορείς να ρίξεις μια ματιά, αλλιώς να κάνω ένα περιγραφικό post γλιτώνοντάς σε από τον κόπο.
    Η υλοποίηση χωρίζεται σε 2 κομμάτια.
    Το πρώτο είναι η εισαγωγή του τρέχοντος πίνακα γραμμάτων.
    Και το δεύτερο η επίλυση του πίνακα με το ποιες λέξεις μπορούν να σχηματιστούν.
    Έχω αρκετές ιδέες και για τα 2 μέρη, αλλά υπολείπομαι σε γνώσεις.

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

    Για το δεύτερο, χρειάζομαι το λεξικό μου υπό κάποιες μορφοποιήσεις. Αρχικά, όλα θα είναι κεφαλαία χωρίς τόνους.
    Ένα κέλι θα έχει την αυθεντική λέξη, ένα άλλο τα γράμματά της αλφαβητικά ταξινομημένα με τα πολλαπλά γράμματα να παραλείπονται, και ένα ακόμα με μία μάσκα-πίνακα 24 θέσεων όπου θα περιλαμβάνει το πλήθος εμφάνισης κάθε γράμματος του αλφάβητου στη λέξη.

    Αυτά είναι που χρειάζεται να σχεδιάσω και να βρω τρόπο να φτιάξω. Ύστερα είναι ο πυρήνας του προγράμματος με την επεξεργασία των δεδομένων που είναι καθαρός αγνός προγραμματισμός…

    Τέλος, να προσθέσω ότι στο κώδικα για την ταξινόμηση που μου έδωσες, το πεδίο SortLetters = Join(ArrLexi, «,») το έκανα απλώς SortLetters = Join(ArrLexi, «») αφού για το core του προγράμματος δεν θέλω τα γράμματα ξεχωριστά αλλά όλα μαζί σαν λέξη.

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

  28. Ο/Η vioannis λέει:

    Χαράλαμπε, Καλή επιτυχία στο αρκετά φιλόδοξο σχέδιο σου να μεταφέρεις στη vba τα παιχνίδια αυτά. Αν μη τι άλλο τα προβλήματα που θα συναντήσεις θα σε βάλουν αρκετά μέσα της. Ας δούμε σήμερα το επί μέρους πρόβλημα. Θέλεις μία συνάρτηση που να δέχεται μια λέξη ή ένα κείμενο που να μετατρέπει όλα τα γράμματα σε κεφαλαία και να απαλείφει τα διαλυτικά. Η παρακάτω συνάρτηση myUpper, πρώτα καλεί την vba συνάρτηση UCase η οποία μετατρέπει σε κεφαλαία τους χαρακτήρες (όχι όλους) και μένει να αντιμετωπίσει όσους δεν χειρίζεται,τους τονισμένους κεφαλαίους και τους χαρακτήρες με διαλυτικά, συνολικά τους:

     Ά , Έ , Ή , Ί , Ϊ , ΐ , Ό , ς , Ύ , Ϋ , ΰ , Ώ 
    

    και να τους μετατρέψει αντίστοιχα σε:

     Α , Ε , Η , Ι , Ι , Ι , Ο , Σ , Υ , Υ , Υ , Ω
    

    Για να το κάνει αυτό ο κώδικας, χρησιμοποιεί τη vba συνάρτηση Replace, η οποία ανιχνεύει και αντικαθιστά τους χαρακτήρες από τους αντίστοιχους Unicode κωδικούς τους, που είναι αντίστοιχα οι:

    902,904,905,906,938,912,908,962,910,939,944,911
    913,917,919,921,921,921,927,931,933,933,933,937
    

    Να σημειώσω ότι η συνάρτηση δουλεύει για το μονοτονικό σύστημα και για τους 69 ελληνικούς χαρακτήρες που παράγονται από το πληκτρολόγιο. Δεν δουλεύει για το πολυτονικό. Για να βρίσκεις Unicode κωδικούς χαρακτήρων και αντίστροφα δες τις vba συναρτήσεις UnicodeChar και UnicodeCode στο σχετικό σημείωμα του ιστολογίου.
    Η συνάρτηση:

    Function myUpper(lexi As String) As String
    Application.Volatile
    Dim TON As Variant
    Dim ATON As Variant
    Dim i As Integer
    TON = Array(902, 904, 905, 906, 938, 912, 908, 962, 910, 939, 944, 911)
    ATON = Array(913, 917, 919, 921, 921, 921, 927, 931, 933, 933, 933, 937)
    lexi = UCase(lexi)
    For i = LBound(TON) To UBound(TON)
    lexi = Replace(lexi, ChrW(TON(i)), ChrW(ATON(i)))
    Next i
    myUpper = lexi
    End Function
    
  29. Ο/Η marimarou λέει:

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

  30. Ο/Η vioannis λέει:

    Marimarou μου λείπουν στοιχεία για να μπορέσω να απαντήσω με σαφήνεια και να μην εικάζω. Λες «Στο ίδιο φύλλο έχω και μία στήλη με ημερομηνίες» Ποια στήλη ; Ποια σχέση έχει με τη γραμμή C1: ΑU1; Αποτελεί την αριστερή στήλη ενός πίνακα; Λες «το όνομα και η ημερομηνία που θα επιλέξω στο φύλλο 1» Μήπως εννοείς ότι επιλέγεις ένα κελί και όνομα και ημερομηνία είναι αυτά που αντιστοιχούν πάνω και αριστερά στο κελί;

  31. Ο/Η marimarou λέει:

    Στο φύλλο 1 έχω μια γραμμή και μία στήλη. η γραμμή είναι C1: ΑU1, ενώ η στήλη Α περιέχει ημερομηνίες για όλο το έτος αναλυτικά (από το Α3 και κάτω). Εδώ θέλω επιλέγοντας μια ημερομηνία και ένα όνομα (συνδυαστικά) να ψάχνει στο φύλλο 2 αν το όνομα και η ημερομηνία ταυτόχρονα (στην ίδια σειρά) υπάρχουν έστω και μία φορά. Αν υπάρχει να μου εμφανίζει τον αριθμό 1 αν όχι να μου εμφανίζει 0. Τώρα είναι πιο σαφές;
    Στο φύλλο 2 έχω δύο στήλες. Η μία περιέχει ονόματα (στήλη Α) και η άλλη ημερομηνίες (στήλη D). Ευχαριστώ πολύ.

  32. Ο/Η vioannis λέει:

    marimarou, ο τύπος που ζητάς είναι:

    =SUMPRODUCT(--ISNUMBER(MATCH(C$1&$A3;Φύλλο2!$A$2:$A$100&Φύλλο2!$D$2:$D$100;0)))
    

    Δες τον στην πράξη στο βιβλίο marimarou_test.xls, όπου έστησα ένα παράδειγμα. Αν έχω χαθεί … στη μετάφραση, επανέρχεσαι

  33. Ο/Η sofita λέει:

    Καλησπέρα σας αντιμετωπίζοντας ένα πρόβλημα στο excel βρήκα το blog σας. Εξαιρετική βοήθεια τους χρήστες. Συγχαρητήρια για την πρωτοβουλία σας και την βοήθεια που παρέχετε. Έχω μια στήλη που περιέχει δεδομένα (κείμενο) από λίστα drop-down,θέλω να μετρήσω ποσά κελιά περιέχουν συγκεκριμένες τιμές. Χρησιμοποιώ την συνάρτηση COUNTIF άλλα τα αποτελέσματα που παίρνω είναι λανθασμένα. Μήπως πρέπει να χρησιμοποιήσω άλλη συνάρτηση;Ευχαριστώ πολύ εκ των προτέρων

  34. Ο/Η vioannis λέει:

    Σωστά με την COUNTIF. Αν στη στήλη Α1 Α100 υπάρχουν ονόματα η συνάρτηση

    =COUNTIF($A$1:$A$100;"Πέτρος")
    

    θα μετρήσει το πλήθος των εμφανίσεων του Πέτρου. Εναλλακτικά γράψε στο κελί D1 Πέτρος και χρησιμοποίησε τον τύπο:

    =COUNTIF($A$1:$A$100;D1)
    

    Αν αυτά δεν δουλεύουν, ίσως η πτυσσόμενη λίστα να σου εισάγει τα ονόματα με επί πλέον κενά ή κάτι άλλο.
    Δοκίμασε το εξής: Αν πχ δεν σου μετρά το όνομα Πέτρος, γράψε το όνομα σε ένα κελί ας πούμε το D1 και δες αν η συνάρτηση

    =A1=$D$1
    

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

    =TRIM(CLEAN(A1))
    
  35. Ο/Η Andreas Onisiforou λέει:

    Γεια σας
    Ήθελα να ρωτήσω το εξής
    Πως μπορώ από ένα αρχείο excel (είναι ένας τιμοκατάλογος) να μεταφέρονται τα στοιχεία ενός προϊόντος σε τιμολόγιο το οποίο είναι και αυτό σε excel ?
    Σε κάθε προϊόν σε γραμμή υπάρχουν :
    1) Κωδικός προϊόντος
    2) Περιγραφή
    3) Τιμή χωρίς Φ.Π.Α.
    4) Τιμή με Φ.Π.Α
    5) Λιανική τιμή πωλήσεως
    Θέλω όταν βάζω τον κωδικό του προϊόντος στο τιμολόγιο, να εμφανίζονται στης ανάλογες θέσης η περιγραφή και η τιμή χωρίς Φ.Π.Α.
    Σας ευχαριστώ εκ τον προτέρων

  36. Ο/Η SOFITA λέει:

    Με την συνάρτηση =TRIM(CLEAN(A1)) λύθηκε το πρόβλημα μου. Σας ευχαριστώ πολύ για την ανταπόκριση και την βοήθεια.

  37. Ο/Η vioannis λέει:

    Αντρέα, με την συνάρτηση Vlookup. Θα βρεις πολλά παραδείγματα με τη συνάρτηση αυτή στο ιστολόγιο, παράδειγμα εδώ . Κατέβασε το παράδειγμα στο βιβλίο skopelosexample.xls

  38. Ο/Η Andreas Onisiforou λέει:

    Ιωάννη αρχικά σε ευχαριστώ.
    Δεν μπόρεσα να βάλω στην θέση των κωδικό την ανάλογη φόρμουλλα.
    Πως μπορώ να το κάνω αυτό ?

  39. Ο/Η vioannis λέει:

    Αντρέα, Αν ο πίνακας είναι ο παρακάτω στο φύλλο1:

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

    =VLOOKUP(K1;Φύλλο1!$A$1:$D$10;2;FALSE)
    

    Στο κελί του τιμολογίου που θέλεις να εμφανίζεται η τιμή χωρίς ΦΠΑ θα γράψεις τον τύπο:

    =VLOOKUP(K1;Φύλλο1!$A$1:$D$10;3;FALSE)
    

    Στο κελί του τιμολογίου που θέλεις να εμφανίζεται η τιμή με ΦΠΑ θα γράψεις τον τύπο:

    =VLOOKUP(K1;Φύλλο1!$A$1:$D$10;4;FALSE)
    
  40. Ο/Η Andreas Onisiforou λέει:

    Τα έχω σε 2 διαφορετικά αρχεία και όχι σε φύλλα, αυτό μπορεί να δουλέψει ?
    ——————————————————————
    Αυτό το έχω κάνει, αλλά βάζω το κωδικό στο τιμολόγιο και δεν γίνετε τίποτα
    ——————————————————————
    Κωδικός / Περιγραφή / Ποσότητα / Τιμή χωρίς ΦΠΑ /
    Αυτές είναι οι στήλες στο τιμολόγιο.
    Ανάλογες στήλες είναι και στον τιμοκατάλογο ο οποίος είναι σε ξεχωριστό αρχείο.
    Στην στήλη A είναι ο κωδικός
    B = περιγραφή
    D = Τιμή χωρίς ΦΠΑ
    Και στα 2 αρχεία είναι οι ίδιες στήλες

  41. Ο/Η vioannis λέει:

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

    =VLOOKUP(K1;[Βιβλίο1.xlsx]Φύλλο1!$A$1:$D$10;2;FALSE)
    

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

    =VLOOKUP(K1;'C:\Users\User\Desktop\[Βιβλίο1.xlsx]Φύλλο1'!$A$1:$D$10;2;FALSE)
    

    Την πλήρη διαδρομή θα γράψει μόνο του το excel όταν αποθηκεύσεις και κλίσεις το βιβλίο1 που περιέχει τον πίνακα. Αν δεν δουλεύει η συνάρτηση μπορεί οι αιτίες να είναι πολλές. Μία περίπτωση είναι: οι κωδικοί στον πίνακα να είναι κείμενο και εσύ στο κελί Κ1 να εισάγεις αριθμό ή αντίστροφα. Δες στη σελίδα about του ιστολογίου τη συζήτηση που είχα με την Στεφανία στις 14 Σεπτ 2014 για το θέμα αυτό. Άλλη περίπτωση είναι στον πίνακα οι κωδικοί να έχουν γραφτεί με επί πλέον κενά εμπρός ή πίσω ή ενδιάμεσα. Καθάρισέ τα με την συνάρτηση TRIM

  42. Ο/Η Angelos λέει:

    Kαλημέρα σε όλους,
    Έστω ότι έχω 2 excels και από 1 στήλη στο καθένα με ονοματεπώνυμα. Πώς μπορώ να συγρίνω τις 2 διαφορετικές στήλες ώστε να δω ποια είναι κοινά και ποια μοναδικά;
    Ευχαριστώ

  43. Ο/Η vioannis λέει:

    Άγγελε, με τη συνάρτηση COUNTIF. Έστω ότι η μία στήλη είναι η Α1:Α15 στο Φύλλο1 στο Βιβλίο1 και η άλλη στη στήλη Β1:Β20 στο Φύλλο1 στο Βιβλίο2. Τότε άνοιξε και τα δύο βιβλία και στο βιβλίο1 γράψε σε ένα άδειο κελί δεξιά του Α1 τον τύπο:

    =COUNTIF([Βιβλίο2]Φύλλο1!$B$1:$B$20;A1)
    

    Και αντίγραψέ τον έως τη γραμμή 15. Όπου η COUNTIF επιστρέφει μηδέν η τιμή είναι μοναδική. Οι τιμές που είναι μεγαλύτερες από μηδέν δείχνουν πόσες φορές εμφανίζεται το όνομα στο βιβλίο2
    Παρόμοια κάνε την ίδια εργασία στο βιβλίο2 με την συνάρτηση:

    =COUNTIF([Βιβλίο1]Φύλλο1!$A$1:$A$15;B1)
    
  44. Ο/Η Γιώργος λέει:

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

  45. Ο/Η vioannis λέει:

    Γώργο, στο σημείωμα «Οργάνωση των αρχείων του υπολογιστή σας μέσα από το excel» δες την τέταρτη μακροεντολή: InsertPictureInCell

  46. Ο/Η Vaggelis Balakas λέει:

    Καλησπέρα και από μένα. Οπως ολοι και εγω μια ερωτηση να κανω . Εχω μια λιστα αρκετα μεγαλη σε 8 στηλες η πρωτη στηλη με την εκτη ειναι ιδιες.Πως μπορω να βαλω χρωμα στην γραμμη οταν οι αριθμοι στην πρωτη και εκτη ειναι ιδιος? Και πως μπουμε τις επομενες γραμμες να βαλουμε παλι χρωμα αλλα διαφορετικο?

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

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

  48. Ο/Η Angelos λέει:

    Γιάννη ευχαριστώ καταρχάς,

    μόλις πάω να κάνω copy paste την εντολή στο Α1 και πατάω Enter μου βγάζει παράθυρο για να διαλέξω αρχείο. Περίεργο

  49. Ο/Η vioannis λέει:

    Βαγγέλη, Με μορφοποίηση υπό όρους. Αναλυτικά: Έστω Α1:Η200 ο πίνακας, και οι στήλες αριθμών που θέλεις να συγκρίνεις οι Α και η F. Για να εισάγεις τη μορφοποίηση, επίλεξε όλο τον πίνακα Α1:Η200 και από το κεντρικό μενού επίλεξε ‘Μορφοποίηση υπό όρους’ και στη συνέχεια ‘Δημιουργία κανόνα.. ‘. Ανοίγει η καρτέλα: ‘Δημιουργία κανόνα μορφοποίησης’ και επίλεξε: ‘Χρήση τύπου για τον καθορισμό των κελιών που θα μορφοποιηθούν’ και στο πλαίσιο: ‘Μορφοποίηση τιμών όπου ο τύπος είναι αληθής’ γράψε τον τύπο:

    =$A1=$F1
    

    Στη συνέχεια επιλέξτε το πλήκτρο ‘Μορφοποίηση’ και από την καρτέλα ‘Γέμισμα’ διαλέξτε ένα χρώμα. Πατήστε ΟΚ και ξανά ΟΚ και έχεις έτσι ολοκληρώσει τη μορφοποίηση.
    Για να χρωματίσεις τις γραμμές με διαφορετικές τιμές κάνε το ίδιο με τύπο αυτή τη φορά:

    =NOT($A1=$F1)
    
  50. Ο/Η vioannis λέει:

    Άγγελε, Είναι ανοιχτά και τα δύο βιβλία; Όταν γράφεις το τύπο, μην γράφεις το τμήμα του τύπου:

    [Βιβλίο2]Φύλλο1!$B$1:$B$20
    

    αλλά επίλεξέ το και το excel θα το γράψει μόνο του. Και: Μην κάνεις αντιγραφή-επικόλληση αλλά γράψε τον τύπο στο κελί. Με επιλεγμένο το κελί πήγαινε το ποντίκι στην κάτω δεξιά γωνία του κελιού και μόλις δεις να γίνεται + , τότε κάνε διπλό κλικ. Η στήλη θα γεμίσει μόνη της.

  51. Ο/Η Vaggelis Balakas λέει:

    Γιαννη ευχαριστω για την αμεση απαντηση.
    Οι δυο στηλες ειναι παντα ιδιες η δευτερη συναρτηση δεν ειναι εφικτη αλλα εκανα το Α1 με Φ2 μηπως αλλα ουτε και παλι..

  52. Ο/Η vioannis λέει:

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

  53. Ο/Η Πετρος λέει:

    Αγαπητε Γιαννη,

    θα ηθελα να μου πεις αν γινεται σε εναν πινακα δυο στοιχειων ,ο οποιος ομως δεν ειναι χωρισμενος σε δυο στηλες και ειναι «σπασμενος» σε παραπανω απο ενα τμηματα,να χρησιμοποιησω την συναρτηση index σε συνδυασμο με την match ωστε να μου δινει την αντιστοιχια της τιμης που εισαγω.Σου παραθετω ενα παραδειγμα για να καταλαβεις καλυτερα :

    225 5.121 275 5.022 325 4.923
    226 5.119 276 5.020 326 4.921
    227 5.117 277 5.018 327 4.919
    228 5.115 278 5.016 328 4.917
    229 5.113 279 5.014 329 4.915
    230 5.111 280 5.012 330 4.913
    231 5.109 281 5.010 331 4.911
    232 5.107 282 5.008 332 4.909
    233 5.105 283 5.006 333 4.907

    Ευχαριστω πολυ

  54. Ο/Η vioannis λέει:

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

    =CHOOSE({1;2;3};A225:A233;A275:A283;A325:A333)
    =CHOOSE({1\2\3};A225:A233;A275:A283;A325:A333)
    

    Το ίδιο κάνουν και οι επόμενοι, ανεξαρτήτως διαχωριστών:

    =CHOOSE(TRANSPOSE(ROW(INDIRECT("1:3")));A225:A233;A275:A283;A325:A333)
    =CHOOSE(COLUMN(INDIRECT("A:C"));A225:A233;A275:A283;A325:A333)
    

    (Όταν τους γράψεις, με επιλεγμένο το κελί του τύπου, πάτα F2 και μετά F9 για να δει τον πίνακα). Αυτόν τον τύπο μπορείς τώρα να χρησιμοποιήσεις στη θέση του ορίσματος array και να κάνεις ότι θέλεις με την index και την match. Πως η choose συγκροτεί πίνακα από διάσπαρτες τιμές σε φύλλα και βιβλία, το έχω περιγράψει στο σημείωμα του ιστολογίου «Ένας πρωτότυπος τρόπος χρήσης της συνάρτησης CHOOSE και οι εφαρμογές του». Δες και το σημείωμα «Απαραίτητες διευκρινίσεις για τους διαχωριστές ορισμάτων (Separators)»

  55. Ο/Η Πετρος λέει:

    Φιλε Γιαννη, το προσπαθησα αλλα δεν μου βγαζει τπτ και παιρνει ως εσφαλμενο τον τυπο…το ιδιο μου κανει και στο παραδειγμα που παραθετεις εσυ στο κομματι που εξηγεις την συναρτηση choose.Μηπως οφειλεται στο οτι εχω την εκδοση 2003;

  56. Ο/Η vioannis λέει:

    Πέτρο, Η έκδοση 2003 είναι άριστη. Δεν έχει κανένα πρόβλημα. Πες μου που ακριβώς είναι οι τιμές σου (πχ Α1:Α200 , Β1:Β200 κλπ) και τι θέλεις ακριβώς (αναλυτική περιγραφή) να κάνεις με τις τιμές αυτές. Επίσης σε ένα άδειο φύλο σε ένα κελί γράψε τον τύπο =Α1:Α5. Με επιλεγμένο το κελί με τον τύπο πάτα F2 και μετά F9. Πες μου αν βλέπεις τα μηδενικά χωρισμένα με ελληνικό ερωτηματικό (;) ή με κάθετο(\)

  57. Ο/Η sofita λέει:

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

  58. Ο/Η Diomidis λέει:

    Αγαπητέ Ιωάννη ψάχνοντας για κάποια βοηθήματα (μια και είμαι νέος σχετικά πανω στο excel) βρήκα τυχαία την σελίδα σου και βοηθήθηκα πάρα πολύ, σε ευχαριστώ πάρα πολύ, μπραβο σου για αυτο που κάνεις και είναι τόσο εξαιρετικό!!!!
    Η Σελίδα σου έχει μεγάλο ενδιαφέρον και θα την παρακολουθώ πάντα ;-) … Θα ήθελα να σε παρακαλέσω αν θέλεις κάποια στιγμή αν γίνεται να κάνεις κάποιους αυτοματισμούς με μακροεντολές και μπάρες πάνω στα εργαλία και κάποια επιπλέον σε ότι έχει σχέση με συντομέυσεις πάνω σε link και συντομευσεις με button… να σαι καλά και πάλι, συγχρητήρια πολλά και τις ευχαρηστίες μου!!!!!!!!!!!

  59. Ο/Η Vaggelis Balakas λέει:

    Γιαννη καλησπερα.Θα δοκιμασω την ευκολη αναζητηση σου που εχεις στην αρχικη σελιδα, ο κοσμος εδω θελει χρωμα!! Θα ηθελα ομως να ρωτησω εαν δουλευει σε 97-2003

  60. Ο/Η vioannis λέει:

    sofita, Στο μενού δεδομένα υπάρχει το εργαλείο «Συνολική Εικόνα». Κατάλληλο για αριθμητικά δεδομένα σε απλούς πίνακες. Λεπτομέρειες εδώ και εδώ στην υποστήριξη της Microsoft.
    Μια άλλη λύση, για κάθε είδους δεδομένα τοποθετημένα σε απλούς πίνακες , είναι να δημιουργήσεις από αυτούς μία ενιαία βάση. Την λύση αυτή περιγράφω στο σημείωμα του ιστολογίου «Συγκέντρωση διάσπαρτων πινάκων σε μία βάση»
    Για πιο σύνθετες καταστάσεις μόνο μακροεντολή μπορώ να σκεφτώ. Αλλά φοβάμαι ότι χωρίς λεπτομέρειες στη δομή των πινάκων και κυρίως λεπτομέρειες για το τελικό αποτέλεσμα, δεν μπορεί να γραφτεί. Στις περιπτώσεις αυτές υπολογίζεις τι είναι πιο χρονοβόρο. Να γραφτεί η μάκρο ή να προχωρήσεις χειριστικά. Για συχνά επαναλαμβανόμενη εργασία σίγουρα προτιμητέα η μάκρο.

  61. Ο/Η vioannis λέει:

    Διομήδη, ευχαριστώ πολύ για το τόσο ενθαρρυντικό σου μήνυμα

  62. Ο/Η vioannis λέει:

    Βαγγέλη, Ότι ανεβάζω είναι δοκιμασμένο σε 2000, 2003, 2007, 2010. Προσέχω οι συναρτήσεις και οι μακροεντολές να είναι συμβατές με όλες τις εκδόσεις, αν δεν είναι το αναφέρω.

  63. Ο/Η Πετρος λέει:

    Γιαννη, ο πινακας μου εχει δυο στοιχεια Α και Β.Εγω θελω να πληκτρολογω σε ενα αδειο κελι την τιμη του Α και να μου δινει την αντιστοιχη τιμη του Β.Ως διαχωριστη ορισματος εχω την καθετο \.
    Το στοιχειο Α ειναι στις περιοχες B10:B59\E10:E59\H10:H59\K10:K59\
    N10:N59\Q10:Q59\B80:B129\E80:E129\H80:H129\K80:K129\N80:N129\Q80:Q129.
    Αντιστοιχα το στοιχειο Β ειναι
    =D10:D59\G10:G59\J10:J59\M10:M59\P10:P59\S10:S59\V10:V59\
    Y10:Y59\D80:D129\G80:G129\J80:J129\M80:M129\P80:P129\
    S80:S129\V80:V129\Y80:Y129
    ευχαριστω πολυ!!!

  64. Ο/Η vioannis λέει:

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

    Function myRespective(timi)
    Application.Volatile
    Dim stoixio1 As Range
    Dim stoixio2 As Range
    Dim keli As Range
    
    Set stoixio1 = Union(Range("B10:B59"), Range("E10:E59"), Range("H10:H59"), _
            Range("K10:K59"), Range("N10:N59"), Range("Q10:Q59"), _
            Range("B80:B129"), Range("E80:E129"), Range("H80:H129"), _
            Range("K80:K129"), Range("N80:N129"), Range("Q80:Q129"))
           
    For Each keli In stoixio1
    If keli.Value = timi Then
    myRespective = keli.Item(1, 0).Value
    Exit For
    End If
    Next
    End Function
    
  65. Ο/Η George λέει:

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

  66. Ο/Η vioannis λέει:

    George, Το δεύτερο ερώτημά σου είναι επιλυμένο στο ιστολόγιο και μάλιστα χωρίς vba. Δες την παράγραφο «Επικύρωση με αυτόματη εισαγωγή νέων εγγραφών» στο σημείωμα «Επικύρωση δεδομένων από λίστα». Για το πρώτο ερώτημα νομίζω η μόνη λύση είναι στην καρτέλα «Προειδοποιητικό μήνυμα» της επικύρωσης, να επιλέξεις «Προειδοποίηση» ή «Πληροφορία».

  67. Ο/Η George λέει:

    Vioannis σε ευχαριστώ πολύ, βαθύτατα υποχρεωμένος! Μου έλυσες τα χέρια!

  68. Ο/Η Vaggelis Balakas λέει:

    Καλησπέρα . Γιαννη ΕΥΧΑΡΙΣΤΩ. Θα ηθελα να ρωτησω εαν ειναι δυνατη η ανακτηση του κωδικα κλειδωματος ενος αρχειου ?

  69. Ο/Η vioannis λέει:

    Βαγγέλη, Με διαδικασίες excel όχι, γιατί κάτι τέτοιο θα ακύρωνε την έννοια του κλειδώματος. Άλλωστε, όποια υπόδειξη για το θέμα αυτό, πιθανά να μην είναι νόμιμη ή τουλάχιστον θα είναι unfair.

  70. Ο/Η Vaggelis Balakas λέει:

    Γιαννη ΕΥΧΑΡΙΣΤΩ… απλα το αρχειο ειναι παραγγελιας , βαζω μονον ποσοτητες , η λιστα ειναι τοσο μακρυα που η 19αρα 16.9 δεν φτανει, βαζω το ζουμ σε λιγοτερο ποσοστο και παλι παρα πολυ μικρα γραμματα, ελεγα να μικρυνω τα κελια αναμεσα απο τον κωδικο με την ποσοτητα που θελω να βαλω παραγγελια…. Απλα δεν με αφηνει να αλλαξω τιποτα μα τιποτα … (δεν ειναι για κατι παρανομο ουτε κακο ειναι για προσωπικη χρηση μονον.)

  71. Ο/Η Vaggelis Balakas λέει:

    Να πω οτι η αναζητηση που ειχα αναφερθει πιο πριν ειναι τελεια λειτουργει παντου. Για τα tablets τα δωρεαν προγραμματα που παρεχονται ειναι λιγα αυτα που αναγνωριζουν συναρτησεις, ασε που ειναι και αργα και δυσκολα στην χρηση , οσα τις αναγνωριζουν!

  72. Ο/Η vioannis λέει:

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

  73. Ο/Η Γιάννης Βα λέει:

    Καλησπέρα κύριε Γιάννη. Θέλω να μορφοποιήσω κάποια κελιά που περιέχουν ημερομηνία, αλλά δεν ξέρω τι να κάνω. Πηγαίνω στη μορφοποίηση υπό όρους, στην επιλογή όπου ο τύπος είναι αληθής, αλλά δεν ξέρω πως να το περιγράψω. Οι ημερομηνίες είναι σε μορφή ηη/μμ/εεεε. Δουλεύω σε έκδοση 2007. Ευχαριστώ.

  74. Ο/Η vioannis λέει:

    Γιάννη, Ποιος θέλεις να είναι ο κανόνας της μορφοποίησης; Θέλεις να μορφοποιούνται διαφορετικά ποιες ημερομηνίες;

  75. Ο/Η Vaggelis Balakas λέει:

    Γιαννη ΕΥΧΑΡΙΣΤΩ

  76. Ο/Η Γιάννης Βα λέει:

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

  77. Ο/Η vioannis λέει:

    Δυστυχώς δεν υπάρχει συνάρτηση φύλλου που να μας πληροφορεί αν ένα κελί περιέχει ημερομηνία. Το φύλλο θεωρεί όλες τις ημερομηνίες αριθμούς.(Πιο σωστά το φύλλο θεωρεί αριθμούς τις ημερομηνίες από 1/1/1900 και μετά, και τις πριν από αυτή, τις θεωρεί κείμενο). Αν στα κελιά Α1 και Α2 γράψεις τις ημερομηνίες 28/2/2015 και 25/3/1821 οι συναρτήσεις:

    =ISNUMBER(A1)
    =ISTEXT(A2)
    

    θα επιστρέψουν και οι δύο TRUE.Στην vba όμως, υπάρχει η συνάρτηση ΙsDate που αναγνωρίζει όλες τις ημερομηνίες. Με βάση αυτή μπορούμε να φτιάξουμε μια συνάρτηση χρήστη την όποια μπορούμε να χρησιμοποιούμε στο φύλλο. Σε ένα module του βιβλίου σου γράψε τον λίγο κώδικα της συνάρτησης :

    Function extraIsDate(keli As Range) As Boolean
    Application.Volatile True
    extraIsDate = VBA.IsDate(keli)
    End Function
    

    Τώρα κάνε εισαγωγή μορφοποίησης υπό όρους, (όπως την περιγράφω σε αυτή εδώ την συζήτηση) με τύπο:

    =extraIsDate(A1)=TRUE
    

    Φυσικά αυτό σημαίνει ότι θα πρέπει να αποθηκεύσεις το βιβλίο σου σαν βιβλίο με μακροεντολές. Αν αυτό δεν το θέλεις, μια άλλη λύση είναι να γράψεις τη παραπάνω συνάρτηση στο βιβλίο προσωπικών μακροεντολών. Αλλά τότε δεν θα μπορέσεις να χρησιμοποιήσεις τη συνάρτηση extraIsDate άμεσα σε μορφοποίηση υπό όρους, αλλά έμμεσα μέσω καθορισμένου ονόματος. Τη μέθοδο έχω περιγράψει αναλυτικά στο σημείωμα του ιστολογίου: ‘Χρήση VBA συναρτήσεων σε επικυρώσεις και μορφοποιήσεις υπό όρους’.
    Υπάρχει και μία λύση χωρίς να εμπλέκεται η vba, αλλά δεν καλύπτει όλες τις περιπτώσεις. Παρατήρησε ότι η συνάρτηση:

    =CELL("format";A1)
    

    όπου Α1 είναι ένα κελί με ημερομηνία, σε αρκετές μορφές ημερομηνίας επιστρέφει, για να χαρακτηρίσει τη μορφή του κελιού, έναν από τους χαρακτηρισμούς D1,D2,D3…D9. Η συνάρτηση λοιπόν:

    =LEFT(CELL("format";A1))="D"
    

    θα επιστρέφει True για κελιά που περιέχουν ημερομηνία και έχουν μία από τις μορφές που επιστρέφουν χαρακτηρισμό που αρχίζει από D. Παράδειγμα οι κλασικές μορφές :

    ηη-μμ-εεεε
    ηη/μμ/εεεε
    η/μ/εε
    η-μμμ-εε
    και άλλες
    

    επιστρέφουν όλες D1.
    (Αλλά όχι όμως η

    ηηη, ηη/μμ/εεεε
    

    που επιστρέφει G).
    Αν λοιπόν τυποποιήσεις στο φύλλο σου, τη μορφή των ημερομηνιών με μία από αυτές, τότε η μορφοποίηση με την παραπάνω συνάρτηση ή με την:

    = CELL("format";A1)="D1"
    

    θα είναι αξιόπιστη.

  78. Ο/Η Γιάννης Βα λέει:

    Εντάξει κ. Γιάννη, έκανα δουλειά με τον κώδικα που μου δώσατε. Σας ευχαριστώ και πάλι.

  79. Ο/Η ΝΙΚΟΣ Σ λέει:

    Καλησπερα ειμαι αρχαριος στη χρηση του exel και βλεπωντας εδω πολυ προχωρημενα πραγματα ειπα να ζητησω βοηθεια.
    εχω ενα φυλλο στο οποιο απο το Α3 και κατω θελω να καταχωρω ονοματα
    επισης εχω ενα δευτερο φυλλο με συγκεκριμενη μορφοποιηση
    το ερωτημα ειναι: μπορω καθε φορα που γραφω ενα ονομα πχ. στοΑ 5 η Α 1000 ναδημιουργειται ενα καινουργιο φυλλο με την μορφοποιηση του δευτερου φυλλου ωστε να καταχωρω δεδομενα για το ονομα αυτο! και συνχρονος καθε επομενη φορα που επιλεγω ενα οποιοδηποτε ονομα (κελι) να με πηγαινει αυτοματα στο συγκεκριμενο φυλλο

    ευχαριστω

  80. Ο/Η vioannis λέει:

    Νίκο
    Μια και είσαι νέος στο νέος στο excel, επίτρεψε μου να πω ότι δεν είναι σωστή τακτική να σκορπίζεις τα δεδομένα σε διάφορα φύλλα. Η λογική είναι να έχεις συγκεντρωμένα όλα τα δεδομένα σου για όλα τα ονόματα (πελάτες κλπ) συστηματικά και νοικοκυρεμένα σε ένα πίνακα (βάση). Από εκεί με πολύ απλούς τρόπους κατασκευάζεις καρτέλες(φύλλα) για κάθε όνομα και για κάθε άλλη πληροφορία που χρειάζεσαι. Από μια βάση, με φίλτρα, pivot, συναρτήσεις, γραφήματα ακόμα και με απλές ταξινομήσεις μπορείς να αποσπάσεις όποια πληροφορία θέλεις. Αν φτιάξεις χωριστή καρτέλα για κάθε πελάτη, θα έχεις μία ίσως καλή εικόνα για τον πελάτη αλλά μία εικόνα στατική. Αν χρειαστείς πληροφορίες όπως παράδειγμα:ποιους πελάτες έχω από τη βόρεια Ελλάδα; ποιοι δεν είχαν κίνηση τον τελευταίο χρόνο; ποιοι έχουν υπόλοιπο λογαριασμού και πόσο ο καθένας; και άλλες παρόμοιες, πολύ-πολύ δύσκολα ή μάλλον δεν θα μπορείς να τις έχεις. Δες στα δύο τελευταία σημειώματα του ιστολογίου (Φεβ 2015), πόσο εύκολα δημιουργούνται φύλλα από μία βάση για όποιο στοιχειό. Εκτός από αυτό, στην πράξη, ένα βιβλίο excel δεν αντέχει το βάρος πάρα πολλών φύλλων. Βέβαια αυτό είναι θέμα υπολογιστή. Κάνε ένα πείραμα πριν ξεκινήσεις, φτιάξε ένα βιβλίο με πολλά αντίγραφα ενός φύλλου και μέτρησε τον χρόνο αποθήκευσης και το χρόνο ανοίγματος του βιβλίου και γενικά τη συμπεριφορά του. Βέβαια θα σου δώσω τον κώδικα, (και ένα έτοιμο παράδειγμα) για να δεις υλοποιημένο αυτό που περιγράφεις. Αν δεν έχεις ξαναπεράσει κώδικα, δες τις λεπτομέρειες στην απάντηση που έδωσα στις 20 Ιανουαρίου 2015 λίγο πιο πάνω στην ίδια σελίδα ‘Συζητήσεις’. Στον κώδικα θα αλλάξεις τα ονόματα των φύλλων ‘Ονόματα’ και ‘Πρότυπο’ στα δικά σου. Η μακροεντολή δουλεύει ως εξής. Γράφεις στο φύλλο ‘Ονόματα’, στη στήλη Α, ένα όνομα. Επιλέγεις το κελί αυτό και καλείς την μακροεντολή, ας πούμε από ένα κουμπί. Αμέσως στο βιβλίο προστίθεται ένα αντίγραφο του φύλλου ‘Πρότυπο’ με όνομα το κείμενο του κελιού, και το κελί μετατρέπεται σε υπερσύνδεση προς το νέο φύλλο. Κατέβασε το παράδειγμα OpenNewWorksheetAndMakeHyperlink.xls για να το δεις στην πράξη. Έλα ξανά στο ιστολόγιο σε 2-3 εβδομάδες. Σκοπεύω να ανεβάσω ένα σημείωμα με μερικές τεχνικές οργάνωσης βιβλίων με πολλά φύλλα.

    Sub OpenNewWorksheetAndMakeHyperlink()
    Dim check As Boolean
    Dim keli As Range
    Dim nameSh As String
    Dim modelSh As String
    
    nameSh = "Ονόματα"
    modelSh = "Πρότυπο"
    Set keli = Selection
    
    On Error Resume Next
    check = Not (Sheets(keli.Text).Name = "")
    On Error GoTo 0
    If check = True Then GoTo telos
    
    If keli.Parent.Name = nameSh And keli.Column = 1 _
        And keli.Count = 1 And Not keli = "" Then
    Worksheets(modelSh).Copy After:=Worksheets(Sheets.Count)
    ActiveSheet.Name = keli.Text
    Worksheets(nameSh).Activate
    keli.Select
    ActiveSheet.Hyperlinks.Add Anchor:=keli, Address:="", _
                SubAddress:="'" & keli.Text & "'!A1"
    keli(1, 2).Select
    End If
    telos:
    End Sub
    
  81. Ο/Η Νίκος Γαβριλάκης λέει:

    Χαίρετε,
    Και (πολλά πολλά)^(πολλά πολλά) μπράβο για το ιστολόγιό σας!
    Έχω φτιάξει ένα φύλλο excel πίσω από το οποίο τρέχουν άλλα δύο,με δεδομένα για τις vlookup και τις if του 1ου φύλλου. Εν ολίγοις και για να μη σας κουράζω, αλλάζοντας την αριθμητική τιμή ενός κελιού (του Ε4, όχι ότι έχει σημασία), ενημερώνονται συνολικά 23 πεδία-κελιά στο φύλλο αυτό. Έχω βάλει μία φωτογραφία χάρις στο Ν.4 από το «Μικρά αλλά Χρήσιμα» στο φύλλο αλλά θέλω να μπορεί ΚΑΙ η φωτογραφία να αλλάζει ανάλογα με την τιμή που παίρνει το κελί Ε4. Γίνεται;
    Ευχαριστώ εκ των προτέρων!

  82. Ο/Η Nick λέει:

    Γεια σας δεν τα πάω και πολύ καλά στη χρήση του exel βλέπω εδώ ότι έχετε κάνει πραγματικά θαύματα με το excel και πήρα το θάρρος να σας ζητήσω μια μικρή βοήθεια.
    Αν σας είναι εύκολο… Συχνά φτιάχνω πολλές καταστάσεις βαθμολογίας για το σχολείο μου και για λόγους ταχύτητας, ευκολίας και προς αποφυγή λαθών ζητάω το εξής:
    Πως μπορώ να γράφω τον βαθμό ενός μαθητή σε ένα κελί του excel (π.χ. 18, 19, 20 κλπ) και στο διπλανό κελί να εμφανίζεται αυτόματα ολογράφως το αντίστοιχο του βαθμού??? (π.χ. Δέκα οκτώ) (Εννοείται βέβαια ότι το εύρος της βαθμολογίας είναι από 0 έως 20)
    Σας ευχαριστώ…!!!
    Πιστεύω ότι η δουλειά που κάνετε εδώ είναι αναντικατάστατη…!!!

  83. Ο/Η vioannis λέει:

    Νίκο Γαβριλάκη , στο σημείωμα του ιστολογίου ‘Εικονογραφημένη επικύρωση’ ο καλός φίλος του ιστολογίου Stazybο Hοrn μας ενημέρωσε ότι η μέθοδος εισαγωγής εικόνων σε σχόλια για τις εκδόσεις 2007, 2010 (και 2013?) παρουσιάζουν ένα πολύ επικίνδυνο bug που μπορεί να οδηγήσει σε πλήρη απώλεια δεδομένων. Πιο συγκεκριμένα, αν εισαχθούν περισσότερα από ένα εικονογραφημένα σχόλια στο φύλλο , και σε κάποια από τα ανοίγματα του αρχείου διαγραφτεί ένα από σχόλια (πλην του τελευταίου χρονικά), τότε στο αμέσως επόμενο άνοιγμα του αρχείου όλα τα δεδομένα θα έχουν χαθεί. Στη σελίδα αυτή ‘Εικονογραφημένη επικύρωση’ θα βρεις όλο τη σχετική συζήτηση. Στις εκδόσεις 2003 και προηγούμενες δεν υπάρχει κανένα πρόβλημα. Είναι μεγάλη μου παράληψη που στο μικρό 4 δεν έβαλα σχετική προειδοποίηση. Θα το κάνω αμέσως μόλις ολοκληρώσω αυτά που σου γράφω. Αν λοιπόν δουλεύεις σε 2007 ή νεώτερο και έχεις εισάγει περισσότερα από ένα σχόλια σε ένα φύλλο, τότε δοκίμασε να τα διαγράψεις όλα μαζί με τον παρακάτω τρόπο (για σιγουριά δοκίμασε σε ένα αντίγραφο) Επιλέγεις όλη την περιοχή που περιέχει σχόλια, ή όλο το φύλλο και από το δεξί μενού επιλέγεις απαλοιφή σχολίων.
    Τώρα να έρθουμε στο κυρίως ερώτημα. Στην ίδια παραπάνω σελίδα ‘Εικονογραφημένη επικύρωση’ νομίζω κρύβεται η απάντηση στην ερώτησή σου. Το σημείωμα περιγράφει την εναλλαγή των εικόνων καθώς ο χρήστης επιλέγει τιμές από πτυσσόμενο πλαίσιο στο κελί Α1. Η μέθοδος που περιγράφω στο σημείωμα είναι χωρίς μακροεντολές, απλά με συναρτήσεις φύλλου. Υπάρχει και παράδειγμα να κατεβάσεις. Επίσης στο ιστολόγιο θα βρεις και μία λύση με κώδικα. Θα τη βρεις στη σελίδα About, 1 Ιουλίου 14. Είναι η μακροεντολή Sub ShowHiddenPicture. Και εδώ υπάρχει παράδειγμα να κατεβάσεις.

  84. Ο/Η vioannis λέει:

    Nick,
    Το θέμα αναγραφής αριθμών ολογράφως στο excel είναι εντελώς εξαντλημένο σε αυτό εδώ το ιστολόγιο. Όπως θα έλεγαν και οι μαθητές σου, πιο εξαντλητικά πεθαίνεις. Αλλά βέβαια για τόσους λίγους αριθμούς δεν θα σε παιδέψω με πολύπλοκες vba συναρτήσεις. Λοιπόν :
    Άνοιξε στο βιβλίο σου, ένα νέο φύλλο, έστω ότι είναι το Φύλλο2
    Στη στήλη Α1:Α21 γράψε τους αριθμούς 0 έως 20
    Στη στήλη Β1:Β21 γράψε τους ίδιους αριθμούς ολογράφως:

    Μηδέν
    Ένα
    Δύο
    Τρία
    Τέσσερα
    Πέντε
    Έξι
    Επτά
    Οκτώ
    Εννέα
    Δέκα
    Έντεκα
    Δώδεκα
    Δεκατρία
    Δεκατέσσερα
    Δεκαπέντε
    Δεκαέξι
    Δεκαεπτά
    Δεκαοκτώ
    Δεκαεννέα
    Είκοσι
    

    (αν θέλεις αντίγραψε αντί να γράφεις, έβαλα το δικό μου πολύ ‘υπάκουο’ excel να το κάνει, για να σε διευκολύνω)
    Τώρα γύρνα στη σελίδα με τις βαθμολογίες. Ας πούμε ότι οι βαθμοί είναι στη στήλη Ε και στη στήλη F θέλεις να εμφανίζεται το ολόγραφο. Τότε στο κελί F1 γράψε τον τύπο

    =IFERROR(VLOOKUP(E1;Φύλλο2!$A$1:$B$21;2;FALSE);"")
    

    Γράφε έναν αριθμό στο Ε1 και θα δεις το ολόγραφο να εμφανίζεται στο F1.
    Μπορείς αν θέλεις το Φύλλο2 να το κρύψεις (δεξί κλικ στην καρτέλα του φύλλου και ‘απόκρυψη’)
    Ο παραπάνω τύπος είναι για excel 2007 και νεώτερο. Για excel 2003 και παλαιότερο, (ισχύει φυσικά και για τα νεώτερα) κάνε χρήση του τύπου:

    =IF(ISERROR(VLOOKUP(E1;Φύλλο2!$A$1:$B$21;2;FALSE));"";VLOOKUP(E1;Φύλλο2!$A$1:$B$21;2;FALSE))
    
  85. Ο/Η ΝΙΚΟΣ Σ λέει:

    Ευχαριστω πολυ για την βοηθεια. Για την εργασια που κανω ειναι πολυ καλο. Το καθε φυλλο που παραγεται ειναι καρτελλα ασθενους με συγκεκριμενα στοιχεια που αφορουν επισκεψεις σε δημοσιο ιατρειο. δεν ξερω ποσο βαρυ θα γινει το συγκεκριμενο βιβλιο αν δημιουργηθουν πολλα φυλλα, αλλα για μενα που οπως ειπαμε ειμαι αρχαριος ειναι πολυ χρησιμο το αποτελεσμα της βοηθειας σας. και παλι ευχαριστω για την μεγαλη βοηθεια που μου δωσατε!!

  86. Ο/Η Nick λέει:

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

    Σας ευχαριστώ πολύ…!!!
    Καλό σας βράδυ… και
    καλή σας δύναμη για την όλη προσπάθεια που καταβάλλετε
    Αν γίνουμε πολλοί ίσως και να αλλάξει αυτή η «ευλογημένη» χώρα…
    Με εκτίμηση
    Nick

  87. Ο/Η vioannis λέει:

    Nick χαίρομαι που καλύφτηκες. Να είσαι πάντα καλά!

  88. Ο/Η Γρηγόρης λέει:

    Καλησπέρα,
    θα ήθελα να ρωτήσω το εξής:
    Έχω σε μια στήλη στο φύλλο 2 αριθμούς από το 1 έως το 20 (πχ Α1 το 1 , Α2 το 2 κ.ο.κ.) και στην διπλανή στήλη σε κάθε αριθμό αντιστοιχεί ένα ωράριο πχ 08:00-16:00 κλπ.
    Πως μπορώ στα κελιά του φύλλου 1 πληκτρολογωντας κάποιον από τους αριθμούς να μου φέρνει το αντίστοιχο ωράριο ? Πχ πατώντας στο φύλλο 1 , στο κελί C4 τον αριθμό 1 να μου φέρνει το 08:00-16:00 του φύλλου 2 ?
    Ελπίζω να έγινα κατανοητός.
    Ευχαριστώ πολύ για την γενικότερη βοήθεια που μας προσφέρεται !!

  89. Ο/Η vioannis λέει:

    Γρηγόρη, αν θέλεις να πληκτρολογείς στο C1 τον αριθμό 1, και το ίδιο το κελί C1 να αλλάζει σε 08:00-16:00 θα χρειαστείς μια μακροεντολή. Αν θέλεις το ωράριο 08:00-16:00 να εμφανίζεται σε ένα άλλο (οποιοδήποτε) κελί του φύλλου τότε στο άλλο αυτό κελί γράψε τον τύπο:

    =IFERROR(VLOOKUP(C1;Φύλλο2!$A$1:$B$20;2;FALSE);"")
    

    Ο τύπος αυτός δουλεύει σε excel 2007, 2010, 2013
    Ο παρακάτω τύπος δουλεύει σε όλα τα excel:

    =IF(ISERROR(VLOOKUP(C1;Φύλλο2!$A$1:$B$20;2;FALSE));"";VLOOKUP(C1;Φύλλο2!$A$1:$B$20;2;FALSE))
    

    Αν θέλεις την μακροεντολή, πες το

  90. Ο/Η Γρηγόρης λέει:

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

  91. Ο/Η vioannis λέει:

    Ο κώδικας είναι ο παρακάτω. Οδηγίες για το πώς θα τον εισάγεις δες στο σημείωμα του ιστολογίου ‘Χρωματική επισήμανση ενεργού κελιού, στήλης και γραμμής’ στην παράγραφο ‘Αναλυτικά βήματα για να εισάγετε τον κώδικα’, με τη διαφορά ότι δεν θα γράψεις τον κώδικα στο ThisWorkbook αλλά στη λειτουργική μονάδα του Φύλλου1 (Θα διπλοπατήσεις κάτω από το ThisWorkbook, στο Φύλλο1, δηλαδή στο φύλλο που θες να γράφεται ο αριθμός και να αλλάζει σε ωράριο.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("C1")) Is Nothing Then Exit Sub
    Dim lookValue
    Dim lookArray As Range
    lookValue = Range("C1").Value
    On Error GoTo telos
    Set lookArray = Sheets("Φύλλο2").Range("A1:B20")
    Application.EnableEvents = False
    Target = Application.WorksheetFunction.VLookup(lookValue, lookArray, 2, False)
    telos:
    Application.EnableEvents = True
    End Sub
    
    
    
  92. Ο/Η Γιώργος λέει:

    Καλησπέρα Γιάννη.
    Προσπαθώ με Ctrl+Shift+Enter να περάσω τον παρακάτω τύπο, χρησιμοποιώ την Offset για να αλλάζει αυτόματα τις στήλες , SMALL(E4:E13;ROW(INDIRECT(«1:10»))) η στήλες έχουν απόσταση ανά 11 , η πρώτη στήλη είναι η 17 , 28, 39, κλπ (SMALL(E4:E13) και συνολικά 10 στήλες (ROW(INDIRECT(«1:10») η γραμμή παραμένει η ίδια ($A15), με τον υπολογισμό τύπου φτιάχνει τον πίνακα , όταν συνεχίσει τον υπολογισμό και φτάσε =SUM(MID({# ΤΙΜΗ/# ΤΙΜΗ/ κλπ}) sum(({# ΤΙΜΗ/# ΤΙΜΗ/ κλπ}) τελικός υπολογισμός # ΤΙΜΗ.

    =SUM(MID(OFFSET($A$1;$A15;(SMALL(E4:E13;ROW(INDIRECT("1:10")))));1;2))
    

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

     (=TEXT(SUM((MID(OFFSET($A$1;$A15;$E$4;1;1);MID($E$1;1;1);2)+MID(OFFSET($A$1;$A15;$E$5;1;1);MID($E$1;1;1);2)+MID(OFFSET($A$1;$A15;$E$6;1;1);MID($E$1;1;1);2)+MID(OFFSET($A$1;$A15;$E$7;1;1);MID($E$1;1;1);2)+MID(OFFSET($A$1;$A15;$E$8;1;1);MID($E$1;1;1);2)));"00") &TEXT(SUM((MID(OFFSET($A$1;$A15;$E$4;1;1);MID($E$1;2;1);2)+MID(OFFSET($A$1;$A15;$E$5;1;1);MID($E$1;2;1);2)+MID(OFFSET($A$1;$A15;$E$6;1;1);MID($E$1;2;1);2)+MID(OFFSET($A$1;$A15;$E$7;1;1);MID($E$1;2;1);2)+MID(OFFSET($A$1;$A15;$E$8;1;1);MID($E$1;2;1);2)));"00") &TEXT(SUM((MID(OFFSET($A$1;$A15;$E$4;1;1);MID($E$1;3;1);2)+MID(OFFSET($A$1;$A15;$E$5;1;1);MID($E$1;3;1);2)+MID(OFFSET($A$1;$A15;$E$6;1;1);MID($E$1;3;1);2)+MID(OFFSET($A$1;$A15;$E$7;1;1);MID($E$1;3;1);2)+MID(OFFSET($A$1;$A15;$E$8;1;1);MID($E$1;3;1);2)));"00"))
    

    Ευχαριστώ για την βοήθεια , Γιώργος.

  93. Ο/Η vioannis λέει:

    Γιώργο, δεν κατάλαβα τι θέλεις να κάνεις. Δεν μπορώ να το καταλάβω από τον τύπο, πρέπει να μου το περιγράψεις

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

    Φυσικά και θα προσπαθήσω Γιάννη μου πήρε πολύ χρόνο και δεν τα κατάφερα.
    C D E F G
    «000106» «010004» «030000»

    Από κάθε στήλη χωρίζουμε το κείμενο (είναι αριθμοί ) ανά 2 στοιχεία.

    Από την στήλη C τα 2 πρώτα “00” , το ίδιο από την στήλη E “01” & G “03”, και τα τρία τα προσθέτουμε , αποτέλεσμα “04”.

    Tο ίδιο και με 3&4 και 5&6 σημείου του κειμένου, το αποτέλεσμα θα είναι “040110”.

  95. Ο/Η vioannis λέει:

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

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

    Το παλεύουμε Γιάννη διάθεση να έχεις,.
    Το κελί Ε5 έχει “0401030000” τιμή σε κείμενο, είναι 5 θέσεις 5 αριθμών .
    Γιατί είναι σε κείμενο, αν κάποια θέση περάσει των αριθμό 9 να μπορώ να ξέρω σε ποια θέση είναι .
    Το κελί G5 έχει αυτήν “0502000201” τιμή σε κείμενο.
    Στο κελί B5 να πρόσθεση το κελί E5+G5 χωρίς να αλλάξει η μορφοποίηση, ανά 2 σημεία.
    (Χωρίζουμε τις τιμές ανά 2 σημεία (Ε5 “04-01-03-00-00” G5 “05-02-00-02-01”)
    (Το 04 από E5 με το 05 του G5 συνεχίζουμε το 01 από Ε5 με το 02 από G5 κλπ )
    Αυτό είναι το ένα μέρος του προβλήματος.
    Το 2ο μέρος είναι ότι οι στήλες δεν είναι συνεχόμενες , δεν από το Α έως το G είναι μεταβλητές, μπορεί να είναι η 5η στήλη και η 20ο.
    Στην ουσία θέλω ένα πίνακα να αθροίσει τις τιμές χωρίς να αλλάξει η μορφοποίηση και να υποδείξουμε σε ποιες στήλες θα πηγαίνει.
    Αυτό προσπάθησα να κάνω, χρησιμοποιώ την OFFSET($A$1;$A15;(SMALL(E4:E13;ROW(INDIRECT(«1:10»)))) για να κάνει έναν πίνακα με 10 θέσεις, το SMALL(E4:E13 είναι η τιμές από τις στήλες που θα πηγαίνει η OFFSET($A$1;$A15;(SMALL(E4:E13 ,με το ROW (INDIRECT(«1:10») κάνει ένα πίνακα 10 θέσεων, μέχρι τώρα οδηγήσαμε την OFFSET , κάνει τον πίνακα με τις στήλες που ζητάμε και συνεχίζουμε με την MID για ορίσουμε ότι από κάθε κελί να πάρει 2 σημεία , και την Sum να τα προσθέσει, η MID κάνει επιστροφή 10 φόρες #TIMH, οπότε η SUM δεν έχει τίποτα να προσθέσει.
    SUM(MID(OFFSET($A$1;$A15;(SMALL(E4:E13;ROW(INDIRECT(«1:10»)))));1;2))

    Ελπίζω να μην σε ζάλισα, ευχαριστώ για την προσπάθεια.

  97. Ο/Η Panos Dim λέει:

    Καλησπέρα κ συγχαρητήρια για την δουλειά σου. Εδώ & αρκετό καιρό ψάχνω να βρω λύση σε ένα πρόβλημα αλλά δεν μπορώ. Το πρόβλημα είναι το εξής : Έχω χωρίσει 30 αριθμούς σε 6 πεντάδες. Οι αριθμοί είναι από το 1 έως το 30 αλλά σε τυχαία σειρά. Ψάχνω να βρω μια συνάρτηση που να μου εμφανίζει τους συνδυασμούς των αριθμών που δεν ανήκουν σε καμία από τις παραπάνω πεντάδες. Δηλαδή π.χ. 1/2/3/4/6, 5/7/8/9/10/12, 11/13/14/15/16/18, 17/19/20/21/22/24, 23/25/26/27/28/30 είναι οι 6 πεντάδες πως θα μπορούσα να βρω μια πεντάδα αριθμών που δεν ανήκει σε κάποια από τις παραπάνω όπως η 1/2/3/4/7
    Ευχαριστώ εκ των προτέρων

  98. Ο/Η vioannis λέει:

    Panos Dim, Το πρόβλημα συνδυασμών και μεταθέσεων απαιτεί κώδικα, και μάλιστα κώδικα με αρκετές απαιτήσεις. Ευτυχώς, εδώ και χρόνια, η κα Myrna Larson έχει κάνει τον κόπο να γράψει τον κώδικα αυτό για μας, θα τον βρεις εδώ. Όλη η κοινότητα του excel σε αυτόν ανατρέχει.
    Από την άλλη ο παρακάτω απλός τύπος:

    =RANDBETWEEN(1;30) & "/" &RANDBETWEEN(1;30)&"/"&RANDBETWEEN(1;30) & "/" &RANDBETWEEN(1;30) & "/" &RANDBETWEEN(1;30)
    

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

  99. Ο/Η vioannis λέει:

    Γιώργο, το πρόβλημα που έθεσες (8, 9 και 11 Μαρτίου), στάθηκε αδύνατο να το προσεγγίσω με συνάρτηση φύλλου όπως ζήτησες. Δεν ισχυρίζομαι ότι είναι αδύνατο να λυθεί, αλλά όλες οι προσπάθειές μου δεν έφεραν αποτέλεσμα. Όσο όμως δείχνει δύσκολο να λυθεί με συναρτήσεις φύλλου, τόσο εύκολα λύνεται με μία vba συνάρτηση. Η παρακάτω συνάρτηση, δέχεται ένα μόνο όρισμα, το πρώτο αριστερά κελί που περιέχει το 10ψήφιο αριθμητικό κείμενο. Μετά συλλέγει 10 όμοιους αριθμούς προς τα δεξιά (σε διαστήματα των 11 στηλών) τους αθροίζει με τον τρόπο που περιγράφεις και επιστρέφει το αποτέλεσμα σε μορφή κειμένου:

    Function extraFun(keli As Range) As String
    Application.Volatile
    Dim i As Integer, col As Integer
    Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer
    Dim Sa As Integer, Sb As Integer, Sc As Integer, Sd As Integer, Se As Integer
    Dim rw As Long
    col = keli.Column
    rw = keli.Row
    For i = col To col + 99 Step 11
    a = Mid(Cells(rw, i), 1, 2)
    b = Mid(Cells(rw, i), 3, 2)
    c = Mid(Cells(rw, i), 5, 2)
    d = Mid(Cells(rw, i), 7, 2)
    e = Mid(Cells(rw, i), 9, 2)
    Sa = (Sa + a)
    Sb = (Sb + b)
    Sc = (Sc + c)
    Sd = (Sd + d)
    Se = (Se + e)
    Next
    extraFun = Sa & Sb & Sc & Sd & Se
    End Function
    
  100. Ο/Η Chronis λέει:

    Κ.Γιαννη Kαλησπερα.
    Ηθελα την βοηθεια σου.
    Εχω μια λιστα με ονοματα ομαδων σε ενα φυλλο εργασιας.
    Ονοματα που επαναλαμβανονται και θα ηθελα στη λιστα αυτη των ονοματων να γινεται ταξινομηση με βαση την συχνοτητα εμφανισης των ονοματων αυτων.
    ΠΧ.Στην λιστα αυτη υπαρχει 5 φορες το ονομα του ολυμπιακου , 3 φορες το ονομα του παναθηναικου,2 φορες το ονομα της ΑΕΚ και παει λεγοντας.Θα ηθελα να μπαινει πρωτο το ονομα του ολυμπιακου και μετα του παναθηναικου και μετα της ΑΕΚ μεχρι βεβαια να αλλαξει η συχνοτητα εμφανισης των ονοματων.Η οποια θα ενημερωνεται συνεχως.
    Δεν μπορω να βρω συναρτηση που να μου κανει αυτην την δουλεια.
    Θα σας παρακαλεσω να με βοηθησετε……….
    Ευχαριστω..

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

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

    Στεφανία

  102. Ο/Η vioannis λέει:

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

  103. Ο/Η Chronis λέει:

    Κ.Γιαννη καλημερα.
    Με ξεχασατε…….

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

    Γιάννη ευχαριστώ για τον χρόνο σου , ούτε εγώ έβγαλα άκρη ,το δοκίμασα και δουλεύει μια χαρά.

  105. Ο/Η vioannis λέει:

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

  106. Ο/Η vioannis λέει:

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

  107. Ο/Η Chronis λέει:

    Σε ευχαριστω παρα πολυ.Ειναι πολυ καλο αυτο που εφτιαξες και μαλιστα ειναι αποριας αξιο πως καταφερες και εφτασες σε τετοιο επιπεδο θα ειστε ελαχιστοι στην Ελλαδα.
    Μια παρατηρηση να κανω αν γινεται.
    Θα ηθελα και ισως θα επρεπε να το ειχα αναφερει απο την αρχη οι ομαδες στην στηλη D να εμφανιζονται μια φορα.1 φορα ο Ολυμπιακος 1 φορα η ΑΕΚ και κτ.λ,καθως επισης να επιτρεπονται στην στηλη Α κενα κελια σε οποιοδηποτε σημειο.
    Δεν ξερω αν σε κουραζω με ολο αυτο.Αν εχεις κεφι να βοηθησεις εχει καλως, αλλιως κανενα προβλημα.
    Ευχαριστω παρα πολυ.

  108. Ο/Η vioannis λέει:

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

  109. Ο/Η apostolos λέει:

    ΑΓΑΠΗΤΕ ΔΑΣΚΑΛΕ ΓΙΑΝΝΗ ΚΑΛΗΣΠΕΡΑ . ΤΙ ΚΑΝΕΙΣ ? ΠΩΣ ΕΙΣΑΙ ?
    ΜΙΑ ΜΙΚΡΗ ΒΟΗΘΕΙΑ . ΦΤΙΑΧΝΩ ΕΝΑ EXCEL ΓΙΑ ΕΚΔΟΣΗ ΤΙΜΟΛΟΓΙΩΝ .
    ΕΧΩ ΦΤΙΑΞΕΙ ΠΕΛΑΤΕΣ ( ΣΤΟΙΧΕΙΑ ΠΕΛΑΤΩΝ ΤΑ ΠΑΝΤΑ ΕΤΟΙΜΑ !!! ) ΚΑΙ ΜΕ VLOOKUP ΟΛΑ
    ΘΑΥΜΑΣΙΑ . Η ΠΡΩΤΗ ΕΡΩΤΗΣΗ ΕΙΝΑΙ ΠΩΣ ΘΑ ΔΙΑΤΗΡΗΣΩ ΑΥΞΟΥΣΑ ΑΡΙΘΜΗΣΗ ΤΙΜΟΛΟΓΙΩΝ. ΕΠΕΙΔΗ ΘΕΛΩ ΝΑ ΕΙΜΑΙ ΣΑΦΗΣ ΚΑΙ ΟΣΟ ΤΟ ΠΙΟ ΑΝΑΛΥΤΙΚΟΣ ΓΙΝΕΤΑΙ ΘΑ ΣΤΟ ΑΝΑΠΤΥΞΩ…. ΟΤΑΝ ΕΠΙΛΕΞΩ ΠΕΛΑΤΗ ΚΑΙ ΤΥΠΟ ΤΙΜΟΛΟΓΙΟΥ ( ΠΙΣΤΩΤΙΚΟ ΤΙΜΟΛΟΓΙΟ Ή ΠΑΡΟΧΗΣ ΥΠΗΡΕΣΙΩΝ ) , ΕΠΙΛΕΞΩ ΠΟΣΟΤΗΤΕΣ ΚΑΙ ΑΞΙΕΣ , ΤΟ ΦΥΛΛΟ ΜΟΥ ΥΠΟΛΟΓΙΖΕΙ ΤΑ ΠΑΝΤΑ . ΘΑ ΗΘΕΛΑ ΛΟΙΠΟΝ ΟΤΑΝ ΕΚΔΟΘΕΙ ΝΑ ΑΠΟΤΥΠΩΘΕΙ Ο ΑΥΞΩΝ ΑΡΙΘΜΟΣ ΠΧ ΕΝΑ ( 01 ) ΟΤΑΝ ΘΑ ΠΑΩ ΣΤΟ ΕΠΟΜΕΝΟ ΝΑ ΕΚΔΟΘΕΙ ΜΕ ( 02 ) ΚΟΚ .
    ΕΡΩΤΗΣΗ 2
    ΠΩΣ ΜΠΟΡΩ ΑΥΤΟΜΑΤΑ ΣΕ ΜΙΑ ΑΛΛΗ ΣΕΛΙΔΑ ΤΟΥ ΦΥΛΛΟΥ ΝΑ ΑΠΟΤΥΠΩΘΟΥΝ ΑΥΤΟΜΑΤΑ
    ΟΛΕΣ ΟΙ ΚΙΝΗΣΕΙΣ ΤΩΝ ΤΙΜΟΛΟΓΙΩΝ ΜΟΥ ΩΣ ΕΞΗΣ

    ΗΜΕΡΟΜΗΝΙΑ — ΑΡΙΘΜΟΣ ΤΙΜΟΛΟΓΙΟΥ — ΤΕΛΙΚΟ ΠΟΣΟ.

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

  110. Ο/Η George λέει:

    Καλησπέρα σας
    Κ. Γιάννη
    Και στο παρελθόν έχω βοηθηθεί αρκετές φορές από το πλούσιο ιστολόγιό σας
    και σας ευχαριστώ θερμά γι αυτό
    Έχοντας ένα πρόβλημα έψαξα για κάτι σχετικό αλλά δεν μπόρεσα να προσεγγίσω
    το θέμα μου
    Το πρόβλημά μου έχει ως εξής :
    Έχω ένα βιβλίο που μέσα περιέχει αρκετά φύλλα
    Το κάθε φύλλο περιέχει μόνον έναν πίνακα που αρχίζει από το Α2
    και που οι στήλες του είναι πάντα σταθερές ως προς το πλήθος (πάντα έχει 6)
    Οι δε γραμμές τους όμως δεν είναι σταθερές ως προς το πλήθος και αναλόγως
    του φύλλου κυμαίνονται από 1-250 περίπου.
    Θα ήθελα να με βοηθήσετε αν είναι δυνατόν με μια makro που θα δημιουργεί
    ένα επιπρόσθετο φύλλο μέσα στο ίδιο βιβλίο με το όνομα ALL και μέσα σε αυτό
    θα μαζεύει όλες τις γραμμές από όλα τα άλλα φύλλα αυτού του βιβλίου επίσης είναι σημαντικό να προστεθεί μία στήλη στην κάθε γραμμή που θα είναι η ετικέτα του φύλλου που προήλθε και αφού τα συγκεντρώσει όλα σε αυτό το φύλλο ALL θα αφαιρεί τις διπλοεγγραφές και τις στήλες που δεν χρειάζονται
    πχ. τα φύλλα ΑΘΗΝΑ/ΠΑΤΡΑ/ΛΑΜΙΑ
    και έστω στο φύλλο ΑΘΗΝΑ ο πίνακας περιέχει όπως παρακάτω:

    https://app.box.com/s/ye488kx8qmiuh0o59ebhxbsi2raq8dmo

    Προστίθεται μια στήλη στην αρχή του πίνακα που είναι η ονομασία του φύλλου

    https://app.box.com/s/e8oxb5dwhls0cdv5vek27b6xeh1y6ciy

    και κατόπιν συγκεντρώνονται όλα στο φύλλο ALL και αφαιρεί τις διπλοεγγραφές
    Αν υπάρχει δυνατότητα να μπορώ παραμετρικά με μενού να επιλέγω τις στήλες που με ενδιαφέρουν θα εξυπηρετούσε πολύ.
    Δηλαδή σε ένα ΒΟΧ στην αρχή να επιλέγω σε ποιες στήλες να επιδρά η makro

    https://app.box.com/s/8k89czp6w6xmtdhzp6vifc3jvodxup3e

    Σας ευχαριστώ πολύ
    Γεώργιος Μαρτιλάκης

  111. Ο/Η vioannis λέει:

    Απόστολε, νομίζω ότι και για τα δύο θέματα υπάρχουν προτάσεις στο ιστολόγιο. Για το θέμα του μετρητή δες στη σελίδα Μικρά και ίσως χρήσιμα το θέμα (13) Δημιουργία μετρητή για παραστατικά (μακροεντολή meter). Για το θέμα της αποθήκευσης των τιμολογίων σε μία βάση, δες το σημείωμα ‘Ενημέρωση βάσης από φόρμα’ (μακροεντολή UpdateBaseAndCleanForm). Σαν τελικό αποτέλεσμα προτείνω μια μακρο η οποία θα εκτυπώνει το τιμολόγιο, στην συνέχεια θα το αποθηκεύει σαν μια εγγραφή στη βάση, θα το καθαρίζει για να είναι έτοιμο να δεχτεί νέες εγγραφές και θα αυξάνει τον α/α κατά 1. Κάτι σαν αυτό:

    Sub test()
    Worksheets("ΤΙΜΟΛΟΓΙΟ").Activate
    ActiveSheet.PrintOut
    Call UpdateBaseAndCleanForm
    Call meter
    End Sub
    
  112. Ο/Η vioannis λέει:

    George, Η διαγραφή διπλότυπων στα excel από το 2007 και μετά γίνεται με το αντίστοιχο εργαλείο το οποίο μπορεί να καλέσει η vba. Για τις προηγούμενες εκδόσεις θα χρειαστεί να γραφτεί κώδικας αρκετά επίπονος αν το κριτήριο για τα διπλότυπα επεκτείνεται σε περισσότερες από μία στήλες. Νομίζω ότι σαν διπλοεγγραφές εννοείς εξ ολοκλήρου ίδιες γραμμές, από A έως G. Έτσι είναι; Ένα ακόμα πρόβλημα: Αν στους αρχικούς πίνακες υπάρχουν συναρτήσεις και στον πίνακα ALL μεταφερθούν σαν συναρτήσεις, η διαγραφή γραμμών μπορεί να οδηγήσει σε σφάλματα υπολογισμών ή σε τιμές σφαλμάτων. Μόνο αξίες (τιμές) πρέπει να μεταφερθούν. Πες μου τις σκέψεις σου και σε ποια έκδοση excel δουλεύεις.

  113. Ο/Η GEORGE λέει:

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

    Ακριβώς όπως το είπατε σαν διπλοεγγραφές εννοώ εξ ολοκλήρου ίδιες γραμμές,
    από A έως G.

    Δηλαδή αν ολόκληρη η γραμμή Α1 Β1 C1 D1 E1 F1 G1
    είναι ίδια με την Α2 Β2 C2 D2 E2 F2 G2 τότε και μόνον τότε θεωρείτε διπλοεγγραφή…
    Οι αρχικοί πίνακες σε όλα τα φύλλα δεν περιέχουν ποτέ συναρτήσεις…!!!
    Μεταφέρονται ολόκληρες οι γραμμές εκάστου πίνακα και φύλλου από το Α έως το F αυτούσιες χωρίς καμία επεξεργασία και προστίθεται μία ακόμη στήλη (στην αρχή) με ετικέτα ΦΥΛΛΟ.
    Η makro λοιπόν κατ’ ουσία κάνει μια συγκέντρωση από όλα τα φύλλα
    (με δοσμένα κριτήρια στις αρχικές ΣΤΗΛΕΣ A – F) σε ένα νέο που δημιουργεί με το όνομα ALL που περιέχει τις 6 προηγούμενες Α έως F συν μία επιπλέον. (A-G)
    Και είναι η ΣΤΗΛΗ με ετικέτα ΦΥΛΛΟ και με περιεχόμενο την ονομασία του κάθε φύλλου..!
    Η οποιαδήποτε επεξεργασία γίνεται μετά την συγκέντρωση όλων και μόνο στο φύλλο ALL
    Δουλεύω με Excel 2003

    Σας ευχαριστώ για το ενδιαφέρον σας
    Γεώργιος Μαρτιλάκης

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

    Γιάννη καλησπέρα και συγχαρητήρια για τον ιστοχώρο σου.
    Έχω μία βάση δεδομένων (πίνακα) που αφορά ωριαίες καταγραφές 4 ρύπων από το 1990 έως και το 2012. Όπως καταλαβαίνεις, ο πίνακας είναι τεράστιος (365 ημέρες Χ 24ώρες Χ 23χρόνια). Δηλαδή, έχει πέντε στήλες (ημερομηνία, 4 ρύποι) και 200.000 γραμμές.
    Πως μπορώ να υπολογίσω με μία εντολή τον μέσο όρο του Ιανουαρίου όλων των ετών ?
    Κάνω φιλτράρισμα, μου εμφανίζει μόνο τους μήνες που θέλω, αλλά όταν επιλέγω τα κελιά και βάζω τη συνάρτηση average, μου υπολογίζει ΚΑΙ ΤΑ ΚΡΥΦΑ ΚΕΛΙΑ, οπότε το αποτέλεσμα είναι λάθος. Υπάρχει τρόπος να μην υπολογίζονται τα κρυφά κελιά ?
    Ευχαριστώ εκ των προτέρων για το χρόνο σου.

  115. Ο/Η vioannis λέει:

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

    Sub MakeSheetAll()
    Dim pl As Integer
    Dim j As Integer
    Dim L As Long
    Dim rng As Range
    If CheckSheetExist("ALL") = True _
        Then MsgBox "Το φύλλο ALL υπάρχει": GoTo telos
    With ActiveWorkbook
        pl = .Worksheets.Count
        .Worksheets.Add(After:=Worksheets(pl)).Name = "ALL"
    End With
    Worksheets(1).Range("A1:G1").Copy Destination:=Worksheets("ALL").Range("B1")
    Worksheets("ALL").Range("A1") = "ΦΥΛΛΟ"
    For j = 1 To pl
    Worksheets(j).Activate
    Set rng = Range("A1").CurrentRegion
    L = rng.Rows.Count - 1
    Set rng = rng.Offset(1, 0).Resize(L)
    rng.Copy Destination:=Worksheets("ALL").Range("B" & Rows.Count).End(xlUp).Offset(1)
    Worksheets("ALL").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Resize(L) = Worksheets(j).Name
    Next
    Worksheets("ALL").Activate
    telos:
    End Sub
    
    Private Function CheckSheetExist(ByVal SheetName As String) As Boolean
    On Error Resume Next
    CheckSheetExist = (Sheets(SheetName).Name <> "")
    On Error GoTo 0
    End Function
    
  116. Ο/Η vioannis λέει:

    Δημήτρη, η συνάρτηση:

    =SUBTOTAL(1;A1:A200000)
    

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

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

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

  118. Ο/Η GEORGE λέει:

    κ. Γιάννη

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

    Σας ευχαριστώ και πάλι
    Με εκτίμηση
    Γεώργιος Μαρτιλάκης

  119. Ο/Η vioannis λέει:

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

  120. Ο/Η GEORGE λέει:

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

    Υπάρχει λοιπόν κώδικας VBA που αναλαμβάνει να καθορίσει τουλάχιστον αυτά τα δύο κυρίαρχα παραπάνω στοιχεία σε δοσμένα μεγέθη;
    ΔΗΛΑΔΗ
    Μετά την ολοκλήρωση οποιασδήποτε επεξεργασίας σε ένα φύλλο να δηλώσουμε
    ότι θέλουμε εστω:

    ύψος γραμμής =15
    Πλάτος στήλης 5

    Σας ευχαριστώ
    Με εκτίμηση
    Γιώργος Μαρτιλάκης

  121. Ο/Η vioannis λέει:

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

    	
    Range("A:A").EntireColumn.AutoFit	ή
    Columns("A:A").EntireColumn.AutoFit	ή
    

    Για πολλές συνεχόμενες στήλες – όπτιμουμ φάρδος:

    		
    Columns("A:F").EntireColumn.AutoFit	ή
    Range("A:F").EntireColumn.AutoFit	
    

    Για πολλές μη συνεχόμενες στήλες – όπτιμουμ φάρδος:

    		
    Range("A:A,C:C,F:F").EntireColumn.AutoFit
    Range("A:A,C:C,F:Q").EntireColumn.AutoFit	
    

    Για καθορισμένο φάρδος:

    		
    Range("A:A").ColumnWidth = 10	
    Columns("A:A").ColumnWidth = 10	
    Columns("A:F").ColumnWidth = 10	
    Range("A:F").ColumnWidth = 10
    Range("A:A,C:C,F:F").ColumnWidth = 10
    

    Για γραμμές ανάλογα: πχ

    	
    Rows("4:4").EntireRow.AutoFit
    Rows("4:8").EntireRow.AutoFit
    Range("4:8").EntireRow.AutoFit
    Range("4:4, 6:6, 8:8").EntireRow.AutoFit
    Rows("4:8").RowHeight = 25
    Range("4:8").RowHeight = 25
    Range("4:4, 6:6, 8:8").RowHeight = 25
    Range("4:4, 6:6, 8:15").RowHeight = 25
    

    Για μη συνεχόμενες γραμμές ή στήλες μόνο Range

  122. Ο/Η vioannis λέει:

    Συζήτηση με το Γιώργο (συνέχεια)
    Γιώργο, η παρακάτω ρουτίνα DeleteDuplicateRows κάνει αυτό που λέει, διαγράφει μέσα στο φύλλο ALL τις διπλοεγγραφές. Δεν είναι μία ρουτίνα γενικής χρήσης, είναι προσαρμοσμένη στα δικά σου δεδομένα, για αυτό ο χαρακτηρισμός private, ώστε να καλείτε από την MakeSheetAll, αλλά να μην φαίνεται στον κατάλογο των μακροεντολών σου και να μην μπορεί να κληθεί αυτόνομα από το φύλλο. Θα τη γράψεις στο ίδιο module με την MakeSheetAll, στην οποία θα διαγράψεις την τρίτη από το τέλος γραμμή:

    Worksheets("ALL").Activate
    

    Και στη θέση της θα γράψεις:

    Call DeleteDuplicateRows
    

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

    Hbl.EntireRow.Interior.Color = 255
    

    και ενεργοποιείς την γραμμή που τις διαγράφει:

    Hbl.EntireRow.Delete
    

    Αν και έως εδώ τα πράγματα πάνε καλά, μένει να βάλουμε ένα Input Box (ή κάτι ανάλογο) που θα ρωτάει τον χρήστη ποιες από τις 6 στήλες A-G να κρατήσει τελικά. Υποθέτω ότι η στήλη Α με τα φύλλα θα παραμένει πάντα. Σωστά;
    Ο κώδικας:

    Private Sub DeleteDuplicateRows()
    Dim rng As Range
    Dim L As Long
    Dim Hcl As Range
    Dim Hbl As Range
    Worksheets("ALL").Activate
    Set rng = Range("A1").CurrentRegion
    On Error Resume Next
    rng.AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    On Error GoTo 0
    L = rng.Rows.Count
    Set Hcl = Range("H1:H" & L)
    Hcl.SpecialCells(xlCellTypeVisible) = "H"
    On Error Resume Next
    ActiveSheet.ShowAllData
    Set Hbl = Hcl.SpecialCells(xlCellTypeBlanks)
    Hbl.EntireRow.Interior.Color = 255
    'Hbl.EntireRow.Delete
    On Error GoTo 0
    Hcl.ClearContents
    End Sub
    
  123. Ο/Η GEORGE λέει:

    κ. Γιάννη
    Σας ευχαριστώ πολύ
    Θα ενσωματώσω τον κώδικα και θα σας ενημερώσω σχετικά…!!!

    Με εκτίμηση
    Γιώργος Μαρτιλάκης

  124. Ο/Η GEORGE λέει:

    κ. Γιάννη
    Στο προηγούμενο μήνυμά μου, εκ παραδρομής, δεν σας ενημέρωσα οτι πράγματι
    σωστά υποθέσατε η στήλη Α με τα φύλλα θα ΠΑΡΑΜΕΝΕΙ πάντα.
    Γιώργος Μαρτιλάκης

  125. Ο/Η GEORGE λέει:

    κ. Γιάννη
    Πάντα η ίδια «απορία» πλανάται στο μυαλό μου μετά απο κάθε κώδικα που μου στέλνετε:
    «γιατί πρέπει να ελέγξω ό,τι έχετε προγραμματίσει;» αφού έιναι αυταπόδεικτος ο κώδικάς σας…!!!
    ΜΕΝΩ ΑΝΑΥΔΟΣ ΔΟΥΛΕΥΕΙ ΑΨΟΓΑ..!!!

    Χίλια ευχαριστώ που μάλλον δεν φτάνουν…
    Γιώργος Μαρτιλάκης

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

    Γιάννη καλησπέρα.
    Έχω φτιάξει ένα γράφημα τύπου «Γραμμή 2-Δ» που αφορά συχνότητες τιμών (96 τιμές).
    Μπορώ για τέσσερεις συγκεκριμένες τιμές να σχεδιάσω κάθετες γραμμές από το γράφημα προς τον άξονα x-x ?
    Θέλω να φαίνεται όπως το παρακάτω γράφημα :

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

  127. Ο/Η vioannis λέει:

    Δημήτρη, αν στη στήλη Α είναι οι τιμές x και στη στήλη Β η τιμές ψ, τότε στην άδεια στήλη C στις τιμές x που αντιστοιχούν στις μπάρες (και μόνο σε αυτές) επαναλαμβάνεις τις τιμές της ψ.

    Μετά φτιάχνεις ένα κοινό γράφημα με μπάρες και για την μεταβλητή ψ και για την ψευδομεταβλητή t.

    Στη συνέχεια επιλέγεις τις μπάρες της ψ (απλό κλικ σε μία γαλάζια) και για τη σειρά αυτή κάνεις αλλαγή τύπου γραφήματος σε γραμμή. (Μπορείς και ανάποδα, να φτιάξεις γράφημα γραμμών και να αλλάξεις τη t σε μπάρες)

    Συμπληρώνω: μπορείς με διπλό κλικ πάνω σε μία μπάρα, να επιλέξεις μόνο αυτή και να τις δώσεις δικό της χρώμα.

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

    Γιάννη σε ευχαριστώ πάρα πολύ για την άμεση ανταπόκρισή σου.
    Χρησιμοποιώ το Excel χρόνια και θεωρούσα ότι το γνώριζα αρκετά καλά. Βλέποντας όμως το site που έχεις φτιάξει, συνειδητοποιώ ότι το Excel έχει απίστευτες δυνατότητες που δεν τις είχα σχεφτεί. Μάλλον θα πρέπει να κάνω ένα σεμινάριο για να εντρυφήσω περισσότερο …
    Σε ευχαριστώ και πάλι και κυρίως σε ευχαριστώ που με βοήθησες να ανοίξω τους ορίζοντές μου.
    Να είσαι πάντα καλά.

  129. Ο/Η vioannis λέει:

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

  130. Ο/Η vioannis λέει:

    (Τρίτη συνέχεια της συζήτησης με το Γιώργο)
    Η μικρή μάκρο που ακολουθεί, εμφανίζει ένα input box με το οποίο ζητάει να επιλέξεις ποιες στήλες θα κρατήσεις τελικά στο φύλλο ALL. Επιλέγεις τις στήλες, είτε ολόκληρες είτε από ένα κελί τους (αν δεν είναι συνεχόμενες με το Ctrl πατημένο) και η μάκρο από τις στήλες Β έως G κρατά μόνο αυτές που διάλεξες. Την στήλη Α θα την κρατήσει οπωσδήποτε, στις δε υπόλοιπες στήλες του φύλλου δεν επιδρά. Όταν ανοίγει το input box προτείνει να κρατήσεις όλο τον πίνακα. Αν συμφωνείς πατάς στο input box ΟΚ ή άκυρο. Γράφεις και αυτή τη μάκρο στο ίδιο module με τις προηγούμενες και στην πρώτη ρουτίνα MakeSheetAll, κάτω από την εντολή Call DeleteDuplicateRows, προσθέτεις την:

    Call KeepsSelectedColumns
    
    Sub KeepsSelectedColumns()
    Dim inptRng As Range
    Dim clmnRng As Range
    Dim intrsct As Range
    Dim i As Integer
    Dim prm As String
    prm = "Να παραμείνουν οι στήλες"
    On Error GoTo myend
    Set inptRng = Application.InputBox(prompt:=prm, Default:="A1:G1", Type:=8)
    On Error GoTo 0
    Set clmnRng = inptRng.EntireColumn
    For i = 7 To 2 Step -1
    Set intrsct = Intersect(clmnRng, Cells(1, i))
    If intrsct Is Nothing Then Cells(1, i).EntireColumn.Delete
    Next
    myend:
    End Sub
    

    Αν θέλεις χαρακτηρίζεις και αυτή τη μάκρο σαν private

  131. Ο/Η GEORGE λέει:

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

  132. Ο/Η vioannis λέει:

    Ναι Γιώργο, αυτός είναι ένας πολύ σημαντικός παράγοντας. Όταν γράφεις κώδικα για ήδη στημένο βιβλίο, η περιγραφή πρέπει να είναι πολύ αναλυτική. Η καλή περιγραφή κάνει τη μισή δουλειά. Στην vba υπάρχουν πολλά πράγματα που δεν τα έχω δοκιμάσει στην πράξη, δεν δόθηκε η ευκαιρία, και αρκετά που αγνοώ. Σκέψου ότι ένα εγχειρίδιο της vba θέλει περισσότερες από 1000 σελίδες για τα βασικά. Η ενσωματωμένη βοήθεια στην vba του excel είναι καλή βοήθεια και πιο καλή το google. Από εκεί αντλείς έξυπνες ιδέες άλλων, και αυτό είναι πολλές φορές πιο χρήσιμο από αυτό που λέει το εγχειρίδιο. Όπως έχω ξαναπεί, ότι και να γράψεις είναι σίγουρο ότι κάποιος το έχει ξαναγράφει πιο καλά. Καλό μεσημέρι και σε σένα.

  133. Ο/Η apostolos λέει:

    ΑΓΑΠΗΤΕ ΓΙΑΝΝΗ , ΚΑΛΕ ΜΟΥ ΔΑΣΚΑΛΕ ΚΑΛΗΣΠΕΡΑ ΚΑΙ ΠΑΛΙ.
    ΜΙΑ ΕΡΩΤΗΣΗ Η ΟΠΟΙΑ ΘΑ ΒΟΗΘΗΣΕΙ ΟΛΟΥΣ ΜΑΣ. ΘΕΛΩ ΝΑ ΠΡΟΣΑΡΤΉΣΩ ΜΙΑ ΜΑΚΡΟ ΠΟΥ ΜΟΥ ΕΧΕΙΣ ΚΑΤΑΣΚΕΥΑΣΕΙ ΣΕ ΕΝΑ EXCELΦΥΛΛΟ. ΕΝΩ ΕΧΩ ΦΤΙΑΞΕΙ ΑΡΚΕΤΕΣ ΔΕΝ ΞΕΡΩ ΚΑΝ ΤΗΝ ΔΙΑΔΙΚΑΣΙΑ ΤΟΠΟΘΕΤΗΣΗΣ.!!!! ΠΡΟΦΑΝΩΣ ΣΤΟ BLOG ΣΙΓΟΥΡΑ ΚΑΠΟΙΟΣ ΘΑ ΤΟ ΕΧΕΙ ΡΩΤΗΣΕΙ ….ΚΑΙ ΘΑ ΕΧΕΙΣ ΑΠΑΝΤΗΣΕΙ. ΥΠΑΡΧΕΙ ΚΑΠΟΙΟΣ ΤΡΟΠΟΣ ΩΣΤΕ ΜΕ ΜΙΑ ΑΝΑΖΗΤΗΣΗ ΜΕΣΑ ΑΠΟ ΤΟ BLOG ΣΟΥ NA ΒΡΩ ΤΗΝ ΑΠΑΝΤΗΣΗ ΠΟΥ ΕΧΕΙΣ ΔΩΣΕΙ ?
    ΕΥΧΑΡΙΣΤΩ ΠΟΛΥ.

  134. Ο/Η vioannis λέει:

    Απόστολε, στη σελίδα αυτή των συζητήσεων, δες την απάντησή μου στη φίλη Γεωργία στις 20 Ιαν 2015

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

    Αγαπητέ Γιάννη, καλησπέρα και συγχαρητήρια για την δουλεία σου,θέλω να κάνω μια ερώτηση :
    έχω ένα απλό φύλλο excel και έχω καταχωρήσει τους πελάτες μου μέσα με τους κωδικούς πρόσβασης στο taxisnet (username & password) και κάθε φορά με copy paste μπαίνω στην σελίδα του υπουργείου (www.taxisnet.gr). Θα ήθελα να ξέρω αν μπορώ με μια μακροεντολή να συνδέομαι αυτόματα.
    Ευχαριστώ εκ τον προτέρων !!

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

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

  137. Ο/Η vioannis λέει:

    ΓΙΏΡΓΟ(με κεφαλαία), δεν νομίζω ότι μπορεί να γίνει αυτό (ή πιο καλά δεν το ξέρω). Επίσης νομίζω ότι υπάρχουν ειδικά προγράμματα που κρατούν με ασφάλεια κωδικούς και διευκολύνουν την εισαγωγή τους σε φόρμες.

  138. Ο/Η vioannis λέει:

    Γιώργο (με πεζά) (α) η έννοια ‘τελευταίο κελί φύλλου’ είναι σχετική. Δες την παρακάτω εικόνα:

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

    ActiveSheet.Range("E1").Formula = "=SUM(A1:A5)"
    

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

    Sub test()
    Dim avg As Long
    Dim kelia As Range
    Set kelia = Range("A1:C35")
    avg = Application.WorksheetFunction.Average(kelia)
    Range("A3").EntireRow.Delete
    MsgBox avg
    End Sub
    

    Η μεταβλητή avg επιστρέφει τη μέση τιμή της περιοχής A1:C35 χωρίς να επηρεάζεται από την διαγραφή της γραμμής 3.

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

    Καλημέρα

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

    Ελπίζω να έγινα κατανοητός και να μην σας κούρασα.

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

  140. Ο/Η vioannis λέει:

    Γιώργο, ο παρακάτω κώδικας ψάχνει στις 10 πρώτες στήλες (αυτό το αλλάζεις κατά τις ανάγκες σου) του Φύλλου1, εντοπίζει το τελευταίο προς τα κάτω κελί και επιστρέφει τον αριθμό γραμμής (LastLine) και στήλης (clmn) του κελιού. Στη συνέχεια χρησιμοποιεί τις συντεταγμένες του κελιού για να μεταφέρει την τιμή του κελιού στην ίδια θέση του Φύλλου2

    Sub test_b()
    Dim c As Integer
    Dim clmn As Integer
    Dim LastLine As Long
    Dim clmnLastLine As Long
    Worksheets("Φύλλο1").Activate
    For c = 1 To 10
    clmnLastLine = Cells(Rows.Count, c).End(xlUp).Row
    If clmnLastLine >= LastLine Then LastLine = clmnLastLine: clmn = c
    Next
    Worksheets("Φύλλο1").Cells(LastLine, clmn). _
        Copy Destination:=Worksheets("Φύλλο2").Cells(LastLine, clmn)
    End Sub
    
  141. Ο/Η Γιώργος λέει:

    Σε ευχαριστώ πολύ για τη βοηθεία σου. Το δούλεψα λίγο και έβγαλα αυτό που ήθελα.

  142. Ο/Η Vaggelis Balakas λέει:

    Καλησπερα ΑΓΑΠΗΤΕ κυριε Γιαννη…
    Να ρωτησω μηπως και γινεται κατι plz..!!
    Μπορουμε απο ενα κελι με ποσο πχ 2.333,00 ευρω να το γραψει καπο αλλου,εκει που θελουμε εμεις, ολογραφως στα Ελληνικα?

  143. Ο/Η vioannis λέει:

    Βαγγέλη διακρίνω μία χαλαρότητα, δεν με παρακολουθείς, το πιο δημοφιλές θέμα του ιστολογίου είναι: ‘Αριθμοί ολογράφως στο excel

  144. Ο/Η Vaggelis Balakas λέει:

    Ζητω ΣΥΓΓΝΩΜΗ οπως παντα σωστα τα λες…Δεν εκανα την αναλογη αναζητηση..!!

  145. Ο/Η Chronis λέει:

    Κ.Γιαννη Καλησπερα.
    Ζηταω και παλι την βοηθεια σας.
    Θελω να κανω ταξινομηση παιρνοντας δεδομενα απο καποιους πινακες.
    Η ταξινομηση θα ειναι ποσοστιαια θα ανανεωνεται συνεχως και θα ξεκιναει απο την ομαδα με το μεγαλυτερο ποσοστο και θα κατεβαινει.
    Σχετικα σας δειχνω καποια φωτογραφια..
    http://prntscr.com/6mlnl2
    Σας ευχαριστω πολυ.

  146. Ο/Η vioannis λέει:

    Χρόνη, ο μεσαίος πίνακας θα περιέχει ποιες ομάδες; Μόνο τις ομάδες του δεξιά (ο δεξιά έχει λιγότερες ομάδες από τον αριστερά), μόνο τις κοινές στους δύο πίνακες ή κάτι άλλο; Και ο μεσαίος πίνακας θέλεις και να ενημερώνεται και να ταξινομείται αυτόματα;

  147. Ο/Η Chronis λέει:

    Τις κοινες ομαδες των 2 πινακων.Επισης να ενημερωνεται και να ταξινομειται αυτοματα.

  148. Ο/Η vioannis λέει:

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

    Set aristera = Range("A2:B30").
    

    Εγώ υπέθεσα ότι είναι στην περιοχή A2:B30. Ο τίτλος ‘επιλεγμένες ομάδες’ δεν υπολογίζεται. Το ίδιο για τη δεξιά περιοχή, για δε τη κεντρική περιοχή ‘Ταξινόμηση’ θα ορίσεις μόνο το πρώτο αριστερά κελί

    Set kedro = Range("D2")
    

    Ο κώδικας;

    Sub Chronis()
    Dim aristera As Range, dexia As Range, kedro As Range
    Dim i As Integer, j As Integer, k As Integer
    Dim omada As String
    Dim pososto As Double
    
    Set aristera = Range("A2:B30")
    Set dexia = Range("G2:H20")
    Set kedro = Range("D2")
    
    Range(kedro, Cells(kedro.End(xlDown).Row, kedro.Column + 1)).ClearContents
    For i = 1 To dexia.Rows.Count
    If Not dexia.Item(1)(i).Value = "" And Not dexia.Item(2)(i) = 0 _
            Then omada = dexia.Item(1)(i).Value
    For j = 1 To aristera.Rows.Count
    If omada = aristera.Item(1)(j) And Not aristera.Item(2)(j) = 0 Then
    On Error Resume Next
    pososto = 100 / (aristera.Item(2)(j) * dexia.Item(2)(i))
    On Error GoTo 0
    k = k + 1
    kedro.Item(k, 1) = omada
    kedro.Item(k, 2) = pososto
    End If
    Next j
    Next i
    Range(kedro, kedro(k, 2)).Sort key1:=kedro(1, 2), order1:=xlDescending, Header:=xlNo
    End Sub
    
  149. Ο/Η vioannis λέει:

    Χρόνη, αν δεν έχεις ξαναπεράσει κώδικα σε βιβλίο, δες στη σελίδα αυτή των συζητήσεων, την απάντησή μου στη φίλη Γεωργία στις 20 Ιαν 2015

  150. Ο/Η vioannis λέει:

    Σύντομες απαντήσεις
    Δίνω εδώ σύντομες απαντήσεις σε όσα μηνύματα έφτασαν στις ‘Συζητήσεις’ χωρίς να ανέβουν και να εμφανιστούν στη σελίδα, τον Απρίλιο, που απουσίαζα από το ιστολόγιο.
    – – Πρώτα να ευχαριστήσω τον Απόστολο την Σοφία και τον Άρη για τις πασχαλινές ευχές τους.
    – – Η Σοφία εκτός από τις ευχές της ρωτάει πως μπορεί να γνωρίζει την σειρά ταξινόμησης σε μία στήλη, χωρίς να την ταξινομήσει. Την απάντηση στο θέμα αυτό Σοφία, θα τη βρεις στο σημείωμα του ιστολογίου ‘Δυναμικές Ταξινομήσεις’.
    – – Ο Chronis διαβεβαιώνει πως ο κώδικας που υπάρχει στην απάντηση μου στις 29/3 δούλεψε χωρίς προβλήματα.
    – – Ο Thomas έχει μία στήλη με ιεραρχημένες εγγραφές, ιεράρχηση που έχει δημιουργηθεί με εσοχές και κενά. Ρωτάει αν υπάρχει τρόπος να μετρήσει τα κενά εμπρός από κάθε εγγραφή. Η απάντηση είναι ναι, με την απλή αυτή συνάρτηση φύλλου:

    =FIND(LEFT(TRIM(A1);1);A1;1)-1
    

    – – Ο Γιάννης ρωτάει ‘πως γίνεται σε μια συνάρτηση if, το true να απεικονιστεί με ένα σύμβολο όπως check, αντί για ok η κάτι άλλο;’ Γιάννη υπάρχουν διάφοροι τρόποι. Πρώτα ο απλός, γράφεις την συνάρτηση έτσι:

    =IF(A1=10;"✓";"✕")
    

    όπου το τσεκ και το Χ τα έγραψα στη συνάρτηση με απλή αντιγραφή – επικόλληση. Η ίδια συνάρτηση μπορεί να γραφτεί και έτσι:

    =IF(A1=10;UnicodeChar(10003);UnicodeChar(10005))
    

    Όπου η συνάρτηση Unicode Char είναι μία vba συνάρτηση χρήστη της οποίας τον κώδικα θα βρεις στο σημείωμα του ιστολογίου ‘Ανακαλύψτε τους χιλιάδες Unicode χαρακτήρες του excel’ και 10003 και 10005 είναι οι κωδικοί των παραπάνω χαρακτήρων. Πίνακα unicode χαρακτήρων και κωδικών θα βρεις εδώ :
    http://www.ssec.wisc.edu/~tomw/java/unicode.html
    Αν δουλεύεις σε excel 2013, δεν χρειάζεσαι την vba συνάρτηση UnicodeChar, γιατί στην έκδοση αυτή υπάρχει ενσωματωμένη συνάρτηση φύλλου η UNICHAR που κάνει ακριβώς την ίδια δουλειά:

    =IF(A1=10;UNICHAR(10003);UNICHAR(10005))
    

    – – Αρετή, μάλλον θα έχεις λύσει τώρα το πρόβλημά σου, αν κατάλαβα καλά την ερώτησή σου, θα λύσεις το πρόβλημά σου με τη συνάρτηση vlookup.
    – – Η φίλη ange ρωτάει : ‘Πότε υπάρχουν ενδείξεις ότι η rand() δουλεύει σωστά;’ Όταν λύνει αποτελεσματικά το πρόβλημα για το όποιο την καλέσαμε. Όταν δεν υπάρχουν ενδείξεις ότι οι παραγόμενοι αριθμοί δεν είναι τυχαίοι. Όταν παράγει αμερόληπτα αποτελέσματα. Γενικά, από την έκδοση 2003 και μετά που βελτιώθηκε ο αλγόριθμος της rand δεν έχουν ακουστεί παράπονα. Στις παλιότερες εκδόσεις υπήρχαν προβλήματα όταν παρήγαγε πολλούς αριθμούς. Γενικά εγώ την εμπιστεύομαι.
    – – Τέλος Costas Pip η απάντηση είναι αρνητική, ο ρόλος του ιστολογίου είναι να συζητά δημόσια και όχι ιδιωτικά.

  151. Ο/Η Dimitris λέει:

    Καλησπέρα και χρόνια πολλά έστω και καθυστερημένα. Καταρχήν τα συγχαρητήρια μου για το blog και την βοήθεια που δίνεις. Αν και χρήστης του Excel δεν έχω εμβαθύνει τόσο πολύ. Θα ήθελα να κάνω 2-3 ερωτήσεις αλλά θα ήθελα να ξεκινήσω με κάτι απλό και ισως χαζό.

    Παίρνω κάποια δεδομένα ( εξαγωγή συνήθως απο προγράμματα ) σε excel. Π.χ. μια κατάσταση πελατών που έχει πολλές στήλες με δεδομένα. Είτε δεν μπορεί να τυπωθεί σε Α4 είτε είναι πολύ μικρά τα γράμματα για να χωρέσουν στον εκτυπώσιμο χώρο της Α4. Πως μπορώ την κάθε σειρά να την δημιουργώ σε ένα άλλο φύλλο με 2η ή 3η σειρά για κάθε πελάτη;

  152. Ο/Η vioannis λέει:

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

  153. Ο/Η dimitris λέει:

    Καλημέρα,
    Το αρχείο του Excel δημιουργείται αυτόματα από άλλο πρόγραμμα. π.χ. μια εκτύπωση δεδομένων πελατών

    κωδικός – άνομα – επώνυμο – διεύθυνση – πόλη – τκ – αφμ ΔΟΥ τηλ1 τηλ2 εμπορικη κατηγορία και πιθανώς κάποιες άλλες στήλες. Ο πίνακας αυτός έχει πλάτος 1,5 φορά την Α4 landscape όσο και αν μικραίνουμε τα γράμματα. Και έχει δεδομένα κάθε φορά ας πούμε 500 γραμμές με τις ίδιες φυσικά στήλες.
    Μπορώ να έχω έτοιμο κάποιο φύλλο και να πηγαίνει αυτόματα τα δεδομένα στα κελιά δημιουργώντας αναγκαστικά 2 γραμμές ώστε να χωράνε σε Α4 όπως :

    ( α/α – Κωδικός ) ( όνομα – επώνυμο ) ( πόλη – διεύθυνση ) – ( αφμ – ΔΟΥ ) – ( Τηλ1/τηλ2 ) ….

    1. Παναγιώτης Αθηνα 99999999 2100000000
    01-001 Παπαδόπουλος παπάγου 45 καλιθέας 21011111111….

    2. Γιώργος Θεσσαλονίκη 888888888 23199999999
    01-002 Γεωργόπουλος Παπάφη 129 β’ Θεσ/νικης 23188888888 ….

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

    ευχαριστώ

  154. Ο/Η vioannis λέει:

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

  155. Ο/Η ATHOS λέει:

    Αγαπητέ Γιάννη καλησπέρα.
    Πρόσφατα ανακάλυψα το ιστολόγιό σου στο οποίο κάνεις πράγματι εξαιρετική δουλειά. Θέλω να σε ρωτήσω σε ένα Workbook που θα το ανεβάσω στο Google Drive υπάρχει δυνατότητα ένας ή δύο χρήστες να έχουν πρόσβαση σε συγκεκριμένα worksheets και εγώ σε όλα?
    Έχω δημιουργήσει κάποιο Workbook reporting με ένα πρώτο φύλλο όπου με Hyperlinks ο χρήστης οδηγείται στα φύλλα που θα εργασθεί και μετακινείται από το ένα στο άλλο. Δηλ. πατώντας σε συγκεκριμένο εικονίδιο να τον αφήνει μόνο σε σε κάποια φύλλα και όχι σε άλλα που δεν θα τα βλέπει καθόλου. Αν το λέω σωστά κάτι σαν δικαιώματα χρηστών.
    Σε ευχαριστώ πολύ εκ των προτέρων.

  156. Ο/Η Apostolos orfanidis λέει:

    Αγαπητε Γιάννη καλησπέρα .Μια μικρή βοήθεια …. Υπάρχει κάποια εύκολη λύση ώστε ενας αριθμός στο excel να μετατρέπεται σε bar code ( 128 τυπος) .ευχαριστω Πολυ για όλα . Αποστολος

  157. Ο/Η vioannis λέει:

    Δημήτρη, δες την λύση στο ερώτημά σου, στο σημερινό σημείωμα του ιστολογίου ‘Αναδίπλωση γραμμών πριν την εκτύπωση’.

  158. Ο/Η vioannis λέει:

    Atho, δεν γνωρίζω κανένα τρόπο, ώστε κάποια φύλλα ενός ανοιχτού βιβλίου, να μην είναι προσπελάσιμα σε κάποιους χρήστες. Κρυφά και εντελώς κρυφά φύλλα μπορείς να ορίσεις σε ένα βιβλίο (έχουμε συζητήσει για αυτά στο σχετικό σημείωμα του ιστολογίου) αλλά κάθε μέσος χρήστης μπορεί να τα μετατρέψει εύκολα σε φανερά. Αλώστε οι υπερσυνδέσεις προς κρυφά φύλλα δεν λειτουργούν καθόλου. Δεν νομίζω ότι υπάρχει διαδικασία να μπορούν να λειτουργούν κατ επιλογή. Ακόμα και αν γραφόταν μια vba διαδικασία που έκανε αυτό που λες, θα έτρεχε στο περιβάλλον του Google Drive; Από ότι γνωρίζω δεν τρέχει εκεί η vba. Εναλλακτικά μπορείς να δημιουργήσεις υπερσυνδέσεις, όχι σε φύλλα μέσα στο βιβλίο, αλλά σε άλλα βιβλία excel, τα οποία να είναι προσπελάσιμα με κωδικό. Επίσης δες αν σε καλύπτει η προστασία φύλλου, που επιτρέπει την πρόσβαση στο φύλλο αλλά όχι την τροποποίηση του. Αλλά και πάλι, τι από αυτά θα δουλεύουν στο GD, μόνο δοκιμές θα το δείξουν.

  159. Ο/Η vioannis λέει:

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

  160. Ο/Η skyath λέει:

    stazybo horn .καλησπέρα και σε ευχαριστώ για την αμεσότητα της απάντησης σου. κατάφερα απο το πρώτο site να εγκαταστήσω στα fonts μου στο excel to barcode 128. Mε απλή ισότητα έχω αποτέλεσμα. Την δευτερα θα κανω τσεκαρισμα με τις barcod….ιερες και θα επανελθω . ευχαριστω πολυ για ολα … Αποστολος

  161. Ο/Η ATHOS λέει:

    Αγαπητέ Γιάννη σε ευχαριστώ!
    Μου έδωσες ιδέα με υπερσύνδεση σε άλλο βιβλίο excel, και υποθέτω θα μπορώ να χρησιμοποιήσω ενοποιήσεις και από (4) βιβλία να τα προσθέτω σε ένα συγκεντρωτικό. Αναφέρομαι σε διαχείριση cash flow και θέλω τα επί μέρους cash flow να μαζεύονται σε ένα.
    Και πάλι ευχαριστώ!

  162. Ο/Η apostolos λέει:

    κοιτάζω το πολύ όμορφο !!!! ( UpdateBaseAndCleanForm ) λύνει πολλά προβλήματα.
    μια ερώτηση έχω και θα χρειαστώ λίγη βοήθεια . προσπάθησα αλλά δεν τα κατάφερα με την module. Στο excelφύλλο θα χρειαστώ 2 αντί για μια βάση δεδομένων . Η πρώτη βάση έχει να κάνει με την καταχώρηση πελατών προμηθευτών . Η δεύτερη βάση έχει να κάνει με την τιμολόγηση .
    Πως πρέπει να είναι το module ? η μήπως χρειάζεται δεύτερη module ? η λογική μου λέει δεύτερη module . Εαν ναι πως εισάγω μια δεύτερη module σε ένα φύλλο παρόμοια με την πρώτη ?
    όταν πάω να το κάνω μάλλον το κάνω λάθος και χάνεται η πρώτη !!!! ?????

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

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

    αποστολος

  163. Ο/Η vioannis λέει:

    Απόστολε δεν χρειάζεται δεύτερη module. Μπορείς να γράψεις ότι θες στο module1. Πάντως για να την εισάγεις στο περιβάλλον της vba επιλέγεις αριστερά το βιβλίο, και στο μενού Insert επιλέγεις module. Για αυτόματους διαδοχικούς αριθμούς παραστατικών δες στη σελίδα ‘Μικρά και ίσως χρήσιμα’, το μικρό (13) Δημιουργία μετρητή για παραστατικά.

  164. Ο/Η Γρηγόρης λέει:

    Γεια σας. Εχω τον εξής προβληματισμό:
    Σε ένα βιβλίο εργασίας έχω: στο φύλλο 1 (έστω όνομα φύλλου ΙΑΝΟΥΑΡΙΟΣ) μια στήλη (Α) με τα ειδη που πουλάει η επιχείρηση και στην Β στήλη τις πωλήσεις των αντίστοιχων ειδών. Στο φύλλο 2 (ΦΕΒΡΟΥΑΡΙΟΣ) έχω τα αντιστοιχα αυτού του μήνα κοκ.
    Στο τελευταίο φύλλο τα θέλω συγκεντρωτικά και έχω τα εξής :
    Στην στήλη Α τα είδη της επιχείρησης. Στην στήλη Β φέρνω τις πωλήσεις ΙΑΝΟΥΑΡΙΟΥ πατώντας πχ =ΙΑΝΟΥΑΡΙΟΣ!D5.
    Πως μπορώ να φέρω στην στήλη C τις αντίστοιχες πωλήσεις των ειδών ΦΕΒΡΟΥΑΡΙΟΥ χρησιμοποιώντας την δουλειά που έκανα στην προηγούμενη στήλη ?
    Ελπίζω να μην σας μπέρδεψα πολύ !!!

  165. Ο/Η Γιάννης Βα λέει:

    Κύριε Γιάννη σας χαιρετώ και σας εύχομαι τα καλύτερα.
    Μπαίνω στο θέμα: Σε έναν πίνακα (Α1:ΝΒ200), έχω, στα κελιά Α2 :Α200 μητρώα εργαζομένων και στα κελιά Β1:ΝΒ1 ημερομηνίες. Όλα τα υπόλοιπα κελιά είναι είτε κενά, είτε περιέχουν το «e», που υποδηλώνει αν ο εργαζόμενος εργάσθηκε. Το «e» συμπληρώνεται χειριστικά κάθε μέρα και αφορά την προηγούμενη. Τα κελιά των ημερομηνιών έχουν μορφοποίηση ημερομηνίας του excel, ενώ τα μητρώα και τα «e» έχουν μορφοποίηση κειμένου.
    Ζητάω, σε μία στήλη δεξιά του πίνακα μία συνάρτηση που να μου εμφανίζει για κάθε εργαζόμενο πόσα είναι τα τελευταία συνεχόμενα «e», δηλαδή πόσες ημέρες έχει εργασθεί συνεχόμενα χωρίς να πάρει ρεπό ή άδεια.
    Αναλυτικότερα:
    παράδειγμα 1: Ο εργαζόμενος 0712 εχθές 4/5/15 εργάσθηκε, όπως και τις προηγούμενες ημέρες 3/5/15, 2/1/15, 1/1/15, 30/4/15, όχι όμως στις 29/4/15 (ρεπό).
    Η συνάρτηση να δίνει: 5.
    παράδειγμα 2: Ο εργαζόμενος 0713 εχθές 4/5/15 δεν εργάσθηκε (ρεπό).
    Η συνάρτηση να δίνει: 0
    (Διευκρινιστικά αναφέρω ότι τα αποτελέσματα της συνάρτησης θα με βοηθήσουν ώστε να αποτραπεί το ενδεχόμενο κάποιος να εργασθεί για περισσότερες από 10 συνεχείς ημέρες.)
    Και κάτι τελευταίο: πώς μπορώ σε ένα πίνακα με δεδομένα να εισάγω για κάθε γραμμή του, άλλη μία κενή γραμμή από πάνω;
    Συγνώμη αν έγινα κουραστικός. Σας ευχαριστώ εκ των προτέρων.

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

    Γιάννη αυτό είναι. Τώρα το δοκιμάζω να δώ και την μορφοποίηση……
    Επίσης βρε παιδιά θα γελάσετε αλλά δεν μπορώ να κάνω τα μερικά αθροίσματα μετά από ταξινόμηση βάση κάποιας στήλης. Έμεινα πολλά χρόνια στο excel 2003!

  167. Ο/Η vioannis λέει:

    Γρηγόρη, δεν με μπέρδεψες, ξέρω τι ζητάς, αλλά δεν έχω ευθεία απάντηση ώστε να φτιάχνεις τους συνδέσμους για τα άλλα φύλλα από τους συνδέσμους του πρώτου φύλλου και να διατηρούνται οι σύνδεσμοι. Έχω όμως άλλες λύσεις:
    α) Να φτιάξεις τους συνδέσμους με την συνάρτηση INDIRECT. Δες το παράδειγμα στη Λύση1 στο βιβλίο Grigoris-examle
    β) Να φτιάξεις μια αναφορά προς όλα τα στοιχεία με τη βοήθεια της CHOOSE. Δες τη Λύση2
    γ)Να σχηματίσεις τον συνολικό πίνακα με το εργαλείο ‘Συνολική Εικόνα’ στο μενού ‘Δεδομένα’ .Στη σχετική σελίδα του Grigoris-examle κάνε κλικ στο κουμπί συνολική εικόνα και δες πως είναι συμπληρωμένο το πλαίσιο . Οπωσδήποτε τσεκάρισε την σύνδεση με το αρχείο προέλευσης.
    δ) )Να σχηματίσεις τον συνολικό πίνακα με ένα pivot από πολλαπλές περιοχές συνάθροισης. Ακολούθησε τα βήματα 1,2α,2β έως και 3 όπως τα περιγράφω στο θέμα του ιστολογίου ‘Συγκέντρωση διάσπαρτων πινάκων σε μία βάση

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

    Ή, αν είναι πιο σύντομο (12 είναι οι μήνες όλοι κι όλοι), αντίγραψε τη στήλη του ένα μήνα στις επόμενες στήλες, και με επιλεγμένη καθεμιά από τις 11 στήλες, κάνε εύρεση κι αντικατάσταση του ‘ΙΑΝΟΥΑΡΙΟΣ’! με ‘ΦΕΒΡΟΥΑΡΙΟΣ’!, κλπ.
    Αν έχω καταλάβει καλά…

  169. Ο/Η vioannis λέει:

    Ναι stasybε, έχεις δίκιο, λειτουργεί!!

  170. Ο/Η vioannis λέει:

    Γιάννη. Πρώτα εισάγεις το όνομα:

    stili = SUMPRODUCT((Φύλλο1!$B$1:$NB$1=(TODAY()-1))*COLUMN(Φύλλο1!$B$1:$NB$1))
    

    Αυτή η συνάρτηση-όνομα επιστρέφει τον αριθμό της στήλης που αντιστοιχεί στην χθεσινή ημερομηνία. Το Φύλλο1 θα το αλλάξεις με το δικό σου.
    Μετά, αν υποθέσουμε ότι τη συνάρτηση θα τη γράψεις στη στήλη ΝΝ, με επιλεγμένο το κελί ΝΝ2 (πρόσεξέ το αυτό) και εισάγεις το όνομα

    grammi	=OFFSET(!$B2;0;0;1;stili-1)
    

    Αυτή η συνάρτηση-όνομα επιστρέφει κάθε γραμμή από τη στήλη Β έως την χθεσινή
    Τώρα στο κελί ΝΝ2 εισάγεις με Ctrl+Shift+Enter την συνάρτηση (είναι συνάρτηση πίνακας ενός κελιού):

    =IF(OFFSET(A2;0;stili-1;1;1)=0;0;MAX((grammi="e")*COLUMN(grammi))-MAX((grammi="")*COLUMN(grammi)))
    

    Και τον αντιγράφεις κάτω- κάτω στη στήλη ΝΝ.
    Το άλλο με την παρεμβολή κενών γραμμών γίνεται ως εξής: Ας πούμε ότι ο πινάκας είναι ο D5:M30. Έξω από τον πίνακα στα κελιά Ν5:Ν30 δημιουργείς μία συνεχή αρίθμηση 1,2,3..26. Την ιδία αρίθμηση 1-26 γράφεις και στα κελιά Ν31:Ν56. Επιλέγεις όλη την περιοχή D5:N56 και κάνεις αύξουσα ταξινόμηση ως προς τη στήλη Ν. Διάγραψε τη στήλη Ν

  171. Ο/Η Γιάννης Βα λέει:

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

  172. Ο/Η Γρηγόρης λέει:

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

  173. Ο/Η vioannis λέει:

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

  174. Ο/Η vioannis λέει:

    Γιάννη ανεβάζω το βιβλίο που έστησα για να δουλέψω, για να το δεις πως δουλεύει. Δες μήπως δεν έχεις εισάγει σωστά το όνομα grammi . Με επιλεγμένο κελί της 2ης γραμμής πρέπει να δείχνει : =OFFSET(!$B2;0;0;1;stili-1), με επιλεγμένο κελί της 3ης γραμμής να δείχνει =OFFSET(!$B3;0;0;1;stili-1) κλπ Το βιβλίο είναι το ioannis_example.xlsx

  175. Ο/Η Γιάννης Βα λέει:

    Εντάξει κ. Γιάννη. Το λάθος μου ήταν στην εισαγωγή της συνάρτησης την οποία εισήγαγα σαν συνάρτηση πίνακα πολλών κελιών. Συγνώμη για την ταλαιπωρία. Σας ευχαριστώ και πάλι, να’στε πάντα καλά.

  176. Ο/Η vioannis λέει:

    Γρηγόρη, το excel έχει έναν δικό του τρόπο να κρατά αντίγραφα. Στο μενού ‘Αποθήκευση ως’ επιλέγεις ‘Εργαλεία’, στη συνέχεια ‘Γενικές Επιλογές’ , τσεκάρεις το κουτί ‘Να δημιουργείται πάντα αντίγραφο ασφαλείας’ και ολοκληρώνεις την αποθήκευση. Μια και γίνει αυτή η ρύθμιση, κάθε φορά που θα κάνεις αποθήκευση του βιβλίου, το excel αποθηκεύει το βιβλίο και στον ίδιο φάκελο, με όνομα ‘Αντίγραφο του Βιβλίο1.xlk’ αποθηκεύει την μορφή που είχε το αρχείο στην προηγούμενης αποθήκευσής του. Έτσι στον ίδιο φάκελο έχεις τις δύο τελευταίες μορφές (αποθηκεύσεις) του βιβλίου. Η ρύθμιση αυτή δεν είναι γενική, δεν γίνεται σε όλα τα βιβλία excel, αλλά σε όσα έχεις κάνει τη ρύθμιση. Αυτή είναι μία καλή λύση, γίνεται αυτόματα, απλά αν το αρχείο είναι μεγάλο, καθυστέρει ο χρόνος αποθήκευσης μια και κάνει διπλή δουλειά. Αυτός ο τρόπος σε προστατεύει αν κάνεις αποθήκευση ενός βιβλίου σε λάθος στιγμή. Όχι όμως αν κάνεις δύο διαδοχικές αποθηκεύσεις στο λάθος ή το κατεστραμμένο βιβλίο.
    Δες και έναν εναλλακτικό τρόπο: Ένα κουμπί, που έχεις τοποθετήσει στη ‘Γραμμή εργαλείων γρήγορης πρόσβασης’ (ή όπου αλλού θέλεις, ανάλογα με την έκδοση excel που έχεις) καλεί μια μακροεντολή την οποία έχεις αποθηκεύσει στο βιβλίο προσωπικών μακροεντολών (personal). Η μάκρο κάνει το εξής: Ας υποθέσουμε ότι έχεις ανοιχτό και δουλεύεις με το Βιβλίο1. Πατάς το κουμπί και δημιουργεί σε ένα φάκελο που έχεις προκαθορίσει εσύ, σε οποιοδήποτε δίσκο του συστήματός σου, ένα αντίγραφο του Βιβλίου1, με όνομα Βιβλίο1(ηημμεε_ωωλλδδ) ενώ παραμένει ανοιχτό το Βιβλίο1. Καθώς δουλεύεις μπορείς να αποθηκεύσεις όσα και όποια στιγμιότυπα του αρχείου σου θέλεις. Όπως καταλαβαίνεις στο όνομα του αντιγράφου εισάγονται ακόμα και τα δευτερόλεπτα (δδ) για να μην υπάρχουν προβλήματα επικάλυψης. Βέβαια η μέθοδος δεν είναι αυτόματη, καλείται χειριστικά αλλά είναι απλή και σίγουρη.
    Ο κώδικας για την μακροεντολή (να γραφτεί στο personal βιβλίο):

    Sub mySaveCopyAs()
    Dim mypath As String, mytime As String, myname As String, ext As String
    ext = "." & Split(ActiveWorkbook.Name, ".")(UBound(Split(ActiveWorkbook.Name, ".")))
    mypath = "C:\myDocuments \user\Folder"   'Εδώ γράφεις την πλήρη διαδρομή του φακέλου
    'αποθήκευσης των αντιγράφων (μέσα σε εισαγωγικά και χωρίς \ στο τέλος
    mytime = "(" & Format(Date, "ddmmyy") & "_" & Format(Time, "hhmmss") & ")"
    myname = Replace(ActiveWorkbook.Name, ext, "")
    If myname = Replace(ext, ".", "") Then
    MsgBox "Το αρχείο είναι νέο και δεν έχει γίνει η αρχική αποθήκευσή του." & vbLf & _
    "Η δημιουργία & αποθήκευση αντιγράφου δεν ολοκληρώθηκε."
    GoTo telos
    End If
    ActiveWorkbook.SaveCopyAs mypath & "\" & myname & mytime & ext
    MsgBox "OK"
    telos:
    End Sub
    

    Σημειώνω ότι μάκρο τρέχει σε βιβλίο στο οποίο έχει γίνει η αρχική αποθήκευση. Όχι σε βιβλίο που μόλις έχεις ανοίξει. Ο λόγος είναι ο εξής: Όταν ανοίγεις ένα νέο βιβλίο και δεν το έχεις ακόμα αποθηκεύσει, το όνομά του είναι Βιβλίο1, σκέτο, χωρίς extension (.xls ή .xlsx ή xlsm ή xla κλπ). Το excel δεν μπορεί να ξέρει σε ποια μορφή από τις πολλές θα επιλέξει ο χρήστης να το αποθηκεύσει, άρα δεν μπορεί να ξέρει και ποια μορφή αρχείου θα έχουν τα αντίγραφα.Για το άλλο θέμα, πως δηλαδή να ξέρεις ότι το αρχείο που αποθηκεύεις είναι ΟΚ και όχι με τυχόν προβλήματα, δεν νομίζω ότι υπάρχει εύκολη απάντηση. Ελπίζω τα παραπάνω να βοηθήσουν.

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

    Γρηγόρη, δεν γράφεις τι λειτουργικό έχεις. Σε 7 για παράδειγμα, και με ενεργοποιημένη την επαναφορά, έχεις έναν τύπο versioning στα αρχεία σου.
    π.χ., δες http://zabkat.com/blog/undelete-file-from-restore-point.htm

  178. Ο/Η apostolos λέει:

    προς stazybo horn.
    εχω κανει αρκετες προσπαθειες με τα barcode. το εκτυπώνω σε χαρτι α4 αλλα η ( μπαρκοντιερα δεν το διαβαζει).η μπαρκοντιερα σιγουρα δουλευει γιατι σκαναρει καθημερινά barcode 128 εκατοντάδες φορες.δεν βρισκω απαντηση στο γιατι δεν δουλευει. η επομενη ενεργεια ειναι να μιλησω με την symbol. μολις εχω νεα θα σου γραψω. εαν κάτι σκεφτείς παραπάνω καλοδεχουμενο.
    ευχαριστω πολυ για ολα.

  179. Ο/Η pantelis λέει:

    Κύριε Γιάννη καλησπέρα από την Λευκωσία της Κύπρου.Πρόσφατα ανακάλυψα το site σου στο οποίο κάνεις πράγματι εξαιρετική δουλειά.
    θα ήθελα την βοήθεια σου σε κάτι.
    έχουμε φτιάξει ένα φύλλο στο excel που σε διάφορα πεδία ενημερώνουμε τα στοιχειά του πελάτη καθώς και κάποιες πρόσφορες που έχουμε ανά τακτά διαστήματα.
    καλούμε τον πελάτη με μια vlookup και γράφουμε σε κάποιο σημείο την προσφορά μηνός Ιουνίου
    που είναι 20% στα κουτιά π.χ
    υπάρχει κάποιος τρόπος ίσως με κάποια μακροεντολη την ώρα που τυπώνουμε την προσφορά αυτή για να σταλει ταχυδρομικά να μπορεί με κάποιο τρόπο να σταλεί αυτόματα ένα email στον παραλήπτη πελάτη με αυτήν την προσφορά ,
    σε όλους τους πελάτες υπάρχει το email τους .
    το φύλλο του excel είναι ετσι ( office 2007 )
    κωδικός πελάτη – πελάτης- vat- email-προσφορά μηνός

    Ευχαριστώ πολύ για τον χρόνο σου Παντελής.

  180. Ο/Η vioannis λέει:

    Παντελή, Γίνεται. Δες τον κώδικα που προτείνει η Microsoft για αυτόματη αποστολή μέσω Outlook:
    https://support.microsoft.com/en-us/kb/816644
    Βέβαια θα χρειαστεί προσαρμογή, όπως φέρνεις με την vlookup το όνομα θα φέρνεις και το email του πελάτη και το αντίστοιχο κελί θα το αντιστοιχίσεις στο

    .Item.To = "E-Mail_Address_Here"
    πχ
    .Item.To = Range("D5").Value  
    

    Επίσης εδώ:
    http://www.rondebruin.nl/win/section1.htm
    θα βρεις πολύ ενδιαφέρουσες λύσεις, όπως να δημιουργείς και να στέλνεις σε μορφή pdf

  181. Ο/Η pantelis λέει:

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

  182. Ο/Η vioannis λέει:

    Όποτε θέλεις Παντελή, επικοινωνείς.

  183. Ο/Η apostolos λέει:

    ΑΓΑΠΗΤΕ ΓΙΑΝΝΗ .ΚΑΛΗΣΠΕΡΑ ΚΑΙ ΠΑΛΙ ΚΑΙ ΑΚΟΜΑ ΜΙΑ ΜΙΚΡΗ ΒΟΗΘΕΙΑ
    Η ΠΑΡΑΚΑΤΩ ΜΑΚΡΟ ΜΟΥ ΔΗΜΙΟΥΡΓΕΙ ΕΝΑ ΜΙΚΡΟ ΠΡΟΒΛΗΜΑ.
    2-3 ΚΕΛΙΑ ΤΑ ΕΧΩ ΚΛΕΙΔΩΣΕΙ ΩΣΤΕ Ο ΧΡΗΣΤΗΣ ΝΑ ΜΗΝ ΕΧΕΙ ΠΡΟΣΒΑΣΗ ΣΤΟ ΠΕΡΙΕΧΟΜΕΝΟ ΤΟΥΣ ΟΠΩΣ Η ΗΜΕΡΟΜΗΝΙΑ ΚΑΙ Ο ΑΡΙΘΜΟΣ ΤΙΜΟΛΟΓΙΟΥ.
    ΟΤΑΝ ΛΟΙΠΟΝ ΠΑΤΗΣΩ PRINT TA ΚΕΛΙΑ ΠΑΡΑΜΕΝΟΥΝ ΣΤΑΘΕΡΑ ΚΑΙ ΔΕΝ ΑΛΛΑΖΟΥΝ .ΔΕΝ ΓΙΝΕΤΑΙ ΣΤΗΝ ΟΥΣΙΑ ΚΑΘΑΡΙΣΜΟΣ ΤΗΣ ΦΟΡΜΑΣ
    ΜΙΑ ΙΔΕΑ ΓΙΑ ΑΥΤΟ ΣΕ ΠΑΡΑΚΑΛΩ ….

    Sub test()
    Worksheets(«ΤΙΜΟΛΟΓΙΟ»).Activate
    ActiveSheet.PrintOut
    Call UpdateBaseAndCleanForm
    Call meter
    End Sub

  184. Ο/Η apostolos λέει:

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

    ΑΠΟΣΤΟΛΟΣ

  185. Ο/Η vioannis λέει:

    Απόστολε πιθανότατα η γραμμή του κώδικα
    cleanData.ClearContents
    βρίσκει τα κλειδωμένα κελιά και δεν εκτελείται.
    Δες για το ίδιο θέμα, τι πρότεινα εδώ

    Ενημέρωση βάσης από φόρμα


    Αν η προστασία είναι με password γράψε:
    formaSheet.Unprotect Password:=»xxxxx»
    και
    formaSheet.Protect Password:=»xxxxx»

  186. Ο/Η apostolos λέει:

    ΚΥΡΙΕ ΓΙΑΝΝΗ ΕΥΧΑΡΙΣΤΩ ΠΟΛΥ. ΤΟ ΕΨΑΞΑ ΚΑΙ ΤΟ ΒΡΗΚΑ. ΣΕ ΔΥΟ ΔΙΑΦΟΡΕΤΙΚΑ ΣΗΜΕΙΑ ΤΟΥ ΚΩΔΙΚΑ ΤΟ PROTECT KAI TO UNPROTECT KAI ΛΕΙΤΟΥΡΓΗΣΕ.
    ΠΑΝΤΑ ΑΝΕΚΤΙΜΗΤΗ Η ΒΟΗΘΕΙΑ ΣΑΣ, ΕΥΧΑΡΙΣΤΩ ΚΑΙ ΠΑΛΙ
    ΑΠΟΣΤΟΛΟΣ

  187. Ο/Η andreas dak λέει:

    καλησπέρα θα ήθελα να ρωτήσω σχετικά με την συνάρτηση του excel =WorkingDays(start_date;end_date;extra_holidays) στα office 2013 δεν βρίσκω τέτοια συνάρτηση που μπορώ να την βρω και εάν προκύπτει για μια παλιά συνάρτηση υπάρχει κάτι ίδιο σε νεότερες συναρτήσεις Ανδρεας

  188. Ο/Η vioannis λέει:

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

  189. Ο/Η Xristos-Ria Ser λέει:

    κ. Γιάννη καλημερα
    Παρακολουθησα με πολυ μεγαλο ενδιαφερον τις λυσεις που δινετε μεσα απο απλές ( για εσας) ρουτινες του Excel μου εκανε εντυπωση και μου φανηκε παρα πολυ χρησιμη η ρουτινα που αναφερεται στο » το Excel αγαπα τις λεξεις» ,Θα ηθελα αν μπορουσατε να τη νσυμπληρωσετε με ενα -δυο επιπελον στοιχεια.
    Συγκεκριμενα εχω γραψει δυο ιστορικα βιβλια απο 500 σελιδες το καθενα που εκει υπαρχει μια αφθονια κυριων ονοματων – ονοματα ανθρωπων και τοποθεσιων- ολα ξεκινουν με αρχικο γραμμα κεφαλαιο, Θα ηθελα αν στην πιο πανω ρουτινα μπορειτε να ενσωματωσετε τις εξεις πληροφοριες
    1) Να βρισκει ολα τα ονοματα που ξεκινουν με κεφαλαιο γραμμα και 2) την σελιδα του βιβλιου (απο pdf ή απο word) που αναφερεται το καθε ονομα
    Σκοπος μου ειναι η κατασκευη ενος ευρετηριου κυριων ονοματων
    Αν μπορει να γινει κατι τετοιο θα απαλλασσομουν απο μια επισφαλη , κουραστικη χειροκινητη και χρονοβορα εργασια
    Θελω να σας πληροφορησω οτι δεν εχω ασχοληθει με τον προγραμματισμο και οτι διαθετω το excel 2007
    Πιστευοντας σε σας, περιμενω και την λυση του προβληματος μου
    Σας ευχαριστω

  190. Ο/Η vioannis λέει:

    Χρίστο. Να γίνει καταγραφή της σελίδας απ όπου προέρχεται η λέξη, δεν είναι εφικτό. Αν δεν κάνω λάθος αυτή η δυνατότητα υπάρχει μέσα στο word.
    Για να πάρεις χωριστά τις λέξεις με που αρχίζουν με κεφαλαίο κάνε τα παρακάτω:
    Α)Άνοιξε το αρχείο lexicographer07 και πάτα ALT+F11, θα βρεθείς στο περιβάλλον της vba
    Β) Κοίτα δεξιά να βρεις τον κώδικα της μακροεντολής Sub Lexicographer()
    Γ) Λίγο πιο κάτω από το μέσο του κειμένου της μάκρο θα βρεις την γραμμή κώδικα:
    lexiko.CompareMode = TextCompare
    Διάγραψε αυτή την γραμμή, ή βαλε μια απόστροφο εμπρός της να γίνει πράσινη.
    Δ) Πάτα ALT+Q να φύγεις από την vba και αποθήκευσε το βιβλίο (ίσως με άλλο όνομα)
    Αν τρέξεις το πρόγραμμα από αυτό το βιβλίο, τα κεφαλαία γράμματα θα θεωρούνται διαφορετικά από τα πεζά, σε όλες τις γλώσσες και αλφαβήτους που έχουν αυτή τη διάκριση.
    Μόλις φτιάξεις τον πίνακα με τις λέξεις και τις συχνότητες τότε στο κελί C1 γράψε τον τύπο
    =CODE(A1)=CODE(UPPER(A1))
    και αντίγραψέ τον έως το τέλος του πίνακα.
    Η συνάρτηση αυτή για όσες λέξεις αρχίζουν από κεφαλαίο γράμμα επιστρέφει TRUE και για όσες με πεζό FALSE. Τέλος επιλέγεις και τις 3 στήλες ΑΒC μαζί και ταξινομείς ως προς την στήλη C για να έρθουν όλα τα TRUE μαζί. Φυσικά θα πρέπει χειριστικά να ξεχωρίσεις τα ονόματα από τυχόν άλλες λέξεις που αρχίζουν από κεφαλαίο

  191. Ο/Η Νικόλας λέει:

    Κύριε Γιάννη γεια σας και πάλι.
    Αυτή τη φορά θα ήθελα να σας απασχολήσω με κάτι που έχω βρει απαντήσεις στο ίντερνετ, αλλά δεν μπορώ να τις εφαρμόσω.
    Έχω μία περιοχή κελιών όπου έχω 6 στήλες και αρκετές σειρές. Ενώ ξέρω πως μπορώ να εντοπίσω μία σειρά (και τα αντίστοιχα κελιά που με ενδιαφέρουν) όταν σε κάποια γραμμή ισχύει το κριτήριό μου, δεν μπορώ να επιστρέψω δεδομένα από πολλές σειρές στον πίνακά μου.
    Συγκεκριμένα:
    Στη στήλη Α, έχω ονόματα, στη στήλη Β ποσά, στη στήλη C ΠΑΝΤΑ τον αριθμό 1 ή 2 και στη στήλη D ημερομηνίες. Αυτό που θέλω, είναι όταν στη στήλη D υπάρχει η σημερινή ημερομηνία, τότε να μου εμφανίζει τα αντίστοιχα πεδία από τις γραμμές που έχουν τον αριθμό 1 στη στήλη C.
    Κατάφερα να βρω πόσες φορές εμφανίζεται το η ημερομηνία. Έβαλα το =TODAY() στο κελί F2 και χρησιμοποίησα την SMALL με Ctrl-Shift-Enter.
    =SMALL(IF($D$2:$D$5=$F$2;ROW($A$2:$A$5));ROW(1:1))
    Όταν προσπαθώ να βάλω και δεύτερη if μέσα της, μου λέει ότι έχω βάλει πολλά ορίσματα στην row.
    =SMALL((IF($D$2:$D$5=$F$2;ROW($A$2:$A$5)));(IF($C$2:$C$5=$F$3;ROW($A$2:$A$5)));ROW(1:1)))
    Έτσι δοκίμασα να την γράψω, αλλά δεν…
    και μετά πρέπει κάπως να προσαρμόσω την Small μέσα στην index (νομίζω)….

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

    Ευχαριστώ για όλα,

  192. Ο/Η vioannis λέει:

    Νικόλα, “….τότε να μου εμφανίζει τα αντίστοιχα πεδία από τις γραμμές που έχουν τον αριθμό 1…”
    Όλα τα πεδία; Και οι 6 στήλες Α-F; Και όλες οι εγγραφές(γραμμές) που έχουν στη στήλη C=1; Και φυσικά η υπονοείς ότι η ‘σημερινή’ ημερομηνία δεν υπάρχει πάντα στη στήλη D. Έτσι είναι;

  193. Ο/Η Νικόλας λέει:

    Ναι, το «η» μου ξέφυγε όπως πληκτρολογούσα και δεν το είδα… Δεν θα υπάρχει πάντα η σημερινή ημερομηνία. Και όταν θα υπάρχει, σε συνδυασμό με το «1» της C, θα βρίσκεται μόνο σε 5-6 γραμμές και όχι παραπάνω.
    Για αυτό προσπάθησα να βάλω και 2η if μέσα, επειδή θέλω και τα δύο κριτήρια να ισχύουν. Και η ημερομηνία αλλά και ο άσσος της C.
    Θέλω να εμφανίζονται 2 κελιά από κάθε γραμμή. Το κελί Α (όνομα) και το κελί (Β) ποσό. Λογικά δεν γίνεται να εμφανίζονται στο ίδιο κελί, αλλά μάλλον σε 5-6 διαδοχικά (προς τα κάτω) κελιά. Δηλαδή να τραβήξω (αν γίνεται) την συνάρτηση από το κελί G2 ας πούμε, μέχρι το G7 και εκεί να βγαίνουν τα αποτελέσματα. το G2 να γίνεται «Γιώργος : 52€» πχ, το G3 «Τάσος : 46€» κτλ…

  194. Ο/Η vioannis λέει:

    Νικόλα, οι τεχνικές φίλτρου με συναρτήσεις δεν είναι εύκολες. Εδώ μάλιστα που πρέπει να συνδυάσουμε δύο στήλες γίνονται τερατώδεις. Ότι πρέπει για να τρομάξουμε τους φίλους του ιστολογίου που δεν είναι εξοικειωμένοι με μεγάλους τύπους.
    Λοιπόν στους παρακάτω τύπους
    Η βάση σου είναι Α1:F100
    I1 το κελί του πρώτου κριτηρίου δηλαδή εδώ γράφεις το 1
    J1 το κελί του δεύτερου κριτηρίου δηλαδή της σημερινής ή όποιας θέλεις ημερομηνίας
    Ο παρακάτω Ctrl+Shift+Enter τύπος θα σου επιστρέψει το πρώτο όνομα

    =IF(ISERROR(INDEX($A$1:$F$100;SMALL(IF($C$1:$C$100&"-"&$D$1:$D$100=$I$1&"-"&$J$1;ROW($A$1:$A$100));ROW(1:1));2));"";INDEX($A$1:$F$100;SMALL(IF($C$1:$C$100&"-"&$D$1:$D$100=$I$1&"-"&$J$1;ROW($A$1:$A$100));ROW(1:1));1))
    

    Και στο διπλανό δεξιά κελί ο ίδιος Ctrl+Shift+Enter τύπος, αλλάζοντας το τελευταίο 1 σε 2 δηλαδή ο:

    =IF(ISERROR(INDEX($A$1:$F$100;SMALL(IF($C$1:$C$100&"-"&$D$1:$D$100=$I$1&"-"&$J$1;ROW($A$1:$A$100));ROW(1:1));2));"";INDEX($A$1:$F$100;SMALL(IF($C$1:$C$100&"-"&$D$1:$D$100=$I$1&"-"&$J$1;ROW($A$1:$A$100));ROW(1:1));2))
    

    θα επιστρέψει το αντίστοιχο ποσό.
    Τους αντιγράφει προς τα κάτω, για να πάρεις και τα υπόλοιπα ονόματα-ποσά για τα οποία η τιμή στη στήλη C είναι ίση με την τιμή στο κελί Ι1 και η ημερομηνία στη στήλη D είναι ίση με την ημερομηνία στο κελί J1

  195. Ο/Η vioannis λέει:

    Νικόλα, αν δουλεύεις σε excel 2007 ή νεώτερο οι τύποι μαζεύονται με την βοήθεια της IFERROR

    =IFERROR(INDEX($A$1:$F$100;SMALL(IF($C$1:$C$100&"-"&$D$1:$D$100=$I$1&"-"&$J$1;ROW($A$1:$A$100));ROW(1:1));1);"")
    

    και

    =IFERROR(INDEX($A$1:$F$100;SMALL(IF($C$1:$C$100&"-"&$D$1:$D$100=$I$1&"-"&$J$1;ROW($A$1:$A$100));ROW(1:1));2);"")
    

    Πάντα Ctrl+Shift+Enter

  196. Ο/Η Νικόλας λέει:

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

    Και πάλι ευχαριστώ,

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

    Γιάννη Καλημέρα! Μετά από πολύ καιρό να μαι κι εγώ πάλι αναζητώντας τις πολύτιμες συμβουλές σου. Λοιπόν εδώ και αρκετό καιρό αντιμετωπίζω ένα πρόβλημα με την βοήθεια του excel 2007. Κάθε φορά που ανατρέχω στην βοήθεια του excel 2007 μου πετάει το εξής μήνυμα: «microsoft office help viewer: Το πρόγραμμα προβολής βοήθειας αντιμετώπισε ένα μη αναμενόμενο πρόβλημα και δεν είναι δυνατό να συνεχίσει».Δεν μπορώ να κάνω χρήση της βοήθειας με τίποτα, έχω δοκιμάσει σχεδόν τα πάντα, απεγκατάσταση και ξανά εγκατάσταση, χρήση των διαγνωστικών, χρήση του recovery, αλλά τίποτα έχω απογοητευτεί. Υπάρχει λύση; Ευχαριστώ εκ των προτέρων.

  198. Ο/Η vioannis λέει:

    Μάριε, τι μπορεί να συμβαίνει, δεν ξέρω. Εδώ
    https://www.microsoft.com/el-gr/download/details.aspx?id=17555
    θα βρεις μια ενημερωμένη έκδοση για τη Βοήθεια του Excel 2007 στα Ελληνικά. Ίσως κατεβάζοντας από εδώ, λυθεί το πρόβλημα.

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

    Νικόλα, δεν σου κάνει χειροκίνητα ή με μακροεντολή -ακόμη και μέσω καταγραφής- μια ακολουθία απλών ενεργειών;
    α. φιλτράρισμα στις στήλες Β, D
    β. φιλτραρισμένη αντιγραφή των περιοχών που θες
    γ. επικόλληση εκεί που επιθυμείς
    δ. απενεργοποίηση φιλτραρίσματος
    Μπορείς να έχεις κι από πριν μια επιπλέον στήλη στα δεδομένα σου, με φόρμουλα που ενώνει σε όλες τις γραμμές το όνομα, το «: «, το ποσό (ως κείμενο με το φορμάρισμα ευρώ), και τα β, γ να το κάνεις απευθείας σε αυτήν.

    Όσο για τον υπολογισμό που δεν κατάφερνες με τα δύο if, αν κατάλαβα καλά, γίνεται πολύ εύκολα με την countifs:
    =COUNTIFS(D:D;"="&TODAY();C:C;1)

  200. Ο/Η Νικόλας λέει:

    Ναι, η αλήθεια είναι πως δεν την δοκίμασα την countifs, αν και πάλι θα κόλλαγα λίγο με την index.

    Νομίζω πως στέκουν αυτά που λες με το φιλτράρισμα, απλά θα έπρεπε να γίνεται χειροκίνητα πράγμα που δεν θα με ένοιαζε αν χρησιμοποιούσα το βιβλίο μόνο εγώ. Οπότε περισσότερο για λόγους ευκολίας το ζήτησα. Τώρα αρκεί να ανοίξω το φύλλο μου και βλέπω απευθείας τι έχω για σήμερα…
    Και με μακροεντολή το σκέφτηκα, αλλά δεν προσπάθησα. Όχι επειδή δεν τις προτιμώ, αλλά κυρίως επειδή θα πρέπει να πατάει ο κάθε χρήστης κάποιο κουμπί και δεν το θέλω. Άσε που μου φάνηκε λίγο δύσκολο να την συντάξω στο μυαλό μου. Αλλά αυτό που είπες με τα φιλτραρίσματα, θα το δοκιμάσω να το περάσω με μακροεντολή! Έτσι φαντάζομαι θα μπορώ να έχω όσα κριτήρια θέλω χωρίς να χρειάζεται κατεβατό από συναρτήσεις.
    Αυτή που μου έδωσε ο κύριος Γιάννης πάντως, δουλεύει άψογα!! Ευχαριστώ και εκείνον και εσένα που μου έδωσες την ιδέα με τα φιλτραρίσματα!! Θα το παλέψω

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

    Ή δεν έχω καταλάβει κάτι, ή πνίγεστε με πολύπλοκες συναρτήσεις.
    Αν είναι να αντιγράψεις τις φόρμουλες του Γιάννη σε ολόκληρη στήλη στα δεδομένα σου, γιατί δεν βάζεις απευθείας σ’ αυτήν την καινούργια στήλη έναν τύπο σαν αυτόν:
    =IF(AND(D2=TODAY();C2=1);A2&": "&TEXT(B2;"#.##0,00 €");"")
    Και βάλε άμα θες κι ένα φίλτρο από πάνω, αν δεν πέφτει το μάτι αμέσως.

    Τις μακροεντολές στους χρήστες, δίνε τις χωρίς κουμπί, μόνο με συνδυασμό πλήκτρων ;-)
    Την index δεν την χρειάζεσαι για μετρήσεις με την countifs πόσες πληρωμές έχεις.

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

    Συγγνώμη, κιόλας, αν ανακατεύομαι…

  203. Ο/Η vioannis λέει:

    Καλέ φίλε Stazybe, αυτό το τελευταίο σχόλιο κανονικά έπρεπε να το ‘λογοκρίνω’ . Φυσικά και καλά κάνεις και παρεμβαίνεις. Λύσεις και μάλιστα καλές προτείνεις!

  204. Ο/Η dimitris λέει:

    Γιάννη καλημέρα,
    Θα ήθελα την βοήθεια σου αν είναι δυνατόν για έναν πίνακα που έχει όμως 4 στοιχεία καταχώρησης και όχι 2 ( κάθετα – οριζόντια του excel )

    Ο πίνακας έχει ως εξής
    Έχω 4 δεδομένα. 1. Την ημερομηνία/ημέρα 2. Τον χώρο 3. Το όνομα του υπαλλήλου 4. τις ώρες που δούλεψε. Το πρόγραμμα είναι εβδομαδιαίο. Κάποιος υπάλληλος μπορεί όλη την εβδομάδα να εργαστεί σε ένα χώρο, αλλά κάποιος άλλος σε διαφορετικούς χώρους. Δηλαδή ο εργαζ.1 μπορεί να εργαστεί την Δευτέρα 6.00 – 14.00 στον χώρο 1, την τρίτη στο χώρο 2 με ώρες 22:00 – 10:00.
    Μπορεί να εργαστεί και 4 ώρες και 8 ώρες και 12 ώρες. Εγώ θέλω ουσιαστικά να παίρνω στο τέλος της εβδομάδας πόσες ώρες έκανε.

    Δεν ξέρω αν σου έδωσα να καταλάβεις. Επίσης πως μπορώ στο μήνυμα να βάλω ένα συνημμένο ( π.χ. ένα αρχείο excel ¨η μια φωτογραφία ) ;

    Δημήτρης

  205. Ο/Η andreas dak λέει:

    ΓΙΑΝΝΗ καλησπέρα θα ήθελα να ρωτήσω πως μπορώ να φτιάξω στο εξελ πρόγραμμα με της άδειες που περνούμε στην εργασία μας π.χ τα ονόματα είναι 4 οι περίοδοι από τέλη Ιουνίου έως μέσα Σεπτεμβρίου,ήμερες άδειας που πήρε ο καθένας μας έτη 2010,11,12,13,14,15 και για μελλοντικά έτη. Ευχαριστώ Ανδρέας

  206. Ο/Η vioannis λέει:

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

    Οι στήλες Α-Ε θα ενημερώνονται χειριστικά και οι στήλες F και G από συναρτήσεις
    H συνάρτηση

     
    =MOD(E5-D5;1)
    

    υπολογίζει το χρόνο εργασίας ακόμα και αν το ωράριο ξεπεράσει τα μεσάνυχτα και μπει στην επόμενη μέρα, και η:

     
    =WEEKNUM(A5;2)
    

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

    Και στο κελί F1 βλέπεις το σύνολο. Το άθροισμα των φιλτραρισμένων δεδομένων το δίνει η συνάρτηση:

     
    =SUBTOTAL(9;$F$5:$F$2000)
    

    Αν η βάση ξεπερνάει τις 2000 γραμμές, αυξάνεις στη συνάρτηση τον αριθμό 2000. Απαραίτητα το κελί F1 πρέπει να το μορφοποίησης με μορφή :

     
    [ω]:λλ  
    

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

  207. Ο/Η vioannis λέει:

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

  208. Ο/Η Konstantina λέει:

    Καλησπέρα Γιάννη και από εμένα.
    θα ήθελα τη βοήθειά σου. Έχω έναν πίνακα όπου καταχωρώ : στην μία στήλη τις Υποδιευθύνσεις, στην άλλη θέμα συζήτησης, στην άλλη ημερομηνία συζήτησης, κλπ κλπ. και θέλω να βγάλω κάποια στατιστικά. Δηλαδή, σε ένα άλλο sheet, να έρχεται με συνάρτηση η πληροφορία πόσες συζητήσεις έγιναν από την ομάδα χ για το θέμα χ1, τον μήνα y. Να υπάρχουν δηλαδή όλοι οι μήνες σε στήλες. Σκεπτόμουν να βάλω μια στήλη όπου θα αντιστοιχεί ένας μοναδικός κώδικας σε κάθε θέμα.

    Σ’ ευχαριστώ.
    Κ.

  209. Ο/Η vioannis λέει:

    Κωνσταντίνα, αυτό που ζητάς γίνεται:
    Α) Αν δουλεύεις σε excel 2007 και νεώτερο με τη συνάρτηση COUNTIFS. Για περιγραφή και παραδείγματα δες εδώ, εδώ και εδώ και σε πολλές άλλες πηγές στο δίκτυο
    Β) Σε όλες τις εκδόσεις του excel με την συνάρτηση SUMPRODUCT όπως αναλυτικά έχω περιγράψει στο σημείωμα του ιστολογίου ‘Χρήση της συνάρτησης SUMPRODUCT για άθροιση υπό όρους
    Γ) Πιο άνετα και πιο γρήγορα, χωρίς να παιδεύεσαι με συναρτήσεις, τα συγκεντρωτικά αποτελέσματα που περιγράφεις μπορείς να τα πάρεις με ‘Συγκεντρωτικό Πίνακα’ (Pivot)
    Σωστά σκέπτεσαι να εισάγεις μοναδικούς κωδικούς για τα θέματα.

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

    Xristos-Ria Ser,

    κάτι μπορείς να κάνεις γι’ αυτό που θες στο Word (το δοκίμασα στο 2013). Δυστυχώς, δεν έχω χρόνο αυτήν την εποχή να το βελτιώσω, όμως είναι εύκολη διαδικασία αφενός, κι αφετέρου βλέπει κι ο Γιάννης, κι ίσως μπορέσει να το πιάσει. Θα πρέπει να δώσω πολύ τηλεγραφικά τα βήματα:

    1. Find (with wildcards)
    [!.\!\;:^13] <[Α-Ω][Α-ω]{1;}>
    Replace
    Highlight
     
    2. Find (with wildcards)
    [!.\!\;:^13] + Highlight
    (αναζητούμε το regular expression (μαζί με το κενό/space στο τέλος του, και μαζί με το format Highlight.)
     
    Replace
    Not Highlight
     
    3. Find
    Highlight
    Find in Main Document
     
    4. Copy-Paste (selected highlighted text) στο excel
    Ακύρωση highlight σε όλο το κείμενο.
     
    5.  Filter unique records & sort
     
    6. Paste (text only σε νέο word doc
    Διόρθωση, συμπλήρωση λίστας
    save (π.χ. mylist.docx).
     
    7. Στο τέλος του αρχικού αρχείου
    References [tab], Insert Index
    Index [tab], Automark, Δείξε το αρχείο mylist.docx
    Θα μπουν τα σωστά fields για το index μέσα στο κείμενο, και θα τους βλέπουμε (κουμπάκι ¶ στο κύριο tab).
     
    8. Ξανά στο τέλος του αρχικού αρχείου
    References [tab], Insert Index
    Index [tab], OK
    

    Έτοιμος!

    Φυσικά, αν έχουμε τη λίστα των λέξεων, ξεκινάμε από το βήμα 7.

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

    Γι’ αυτό στο (6) έχει μεγάλη σημασία η επεξεργασία με το χέρι.

  211. Ο/Η vioannis λέει:

    Stazybε το μετέφερα και στο αρχικό σχόλιό σου. Τώρα είναι ένταξη, ε;

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

    Ναι, απλώς έγινε πολύ φαρδύ.

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

    Γιάννη γειά σου! Έχω μία στήλη με αριθμούς και ψάχνω να βρώ π.χ. πόσες φορές εμφανίζεται το έυρος τιμών 19. Έχω βρεί την εντολή count και την countif αλλα δείχνει πως να την εφαρμόζεις για μία τιμή μόνο π.χ. το κελί μου να έχει την τιμή 11, δεν έχω βρεί πουθενά την λύση στο πρόβλημα μου ελπίζω να έχεις λίγο χρόνο για μένα!
    Ευχαριστώ πολύ εκ των προτέρων.
    Νικολαιδη Μαρια

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

    Κάποιο λάθος πρέπει να υπήρξε συντακτικό εννοώ ψάχνω πόσες φορές οι τιμές μου είναι μεταξύ του 11 και του 19 (μεγαλυτερες απο 11 και μικρότερες απο 19)

  215. Ο/Η vioannis λέει:

    Μαρία, με έναν από τους παρακάτω τύπους

    =COUNTIFS(A1:A100;"<19";A1:A100;">11")
    

    ή

    =SUMPRODUCT((A1:A100<19)*(A1:A100>11))
    

    Ο πρώτος μόνο για excel 2007-2010-2013
    O δεύτερος για όλα τα excel
    Στον πρώτο πρόσεχε που ανοίγουν και κλείνουν τα εισαγωγικά.
    Με τον δεύτερο μπορείς να λύσεις και πιο σύνθετα προβλήματα. Η λογική που κρύβεται πίσω από αυτόν τον τύπο έχει περιγραφτεί στο σημείωμα του ιστολογίου ‘Χρήση της συνάρτησης SUMPRODUCT για άθροιση υπό όρους’.

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

    Σας ευχαριστώ παρα πολύ!!!! Με εκπλήξατε που μου απαντήσατε τόσο γρήγορα!! Ευχαριστώ και πάλι, δοκίμασα με τον πρώτο τρόπο και δουλευει μια χαρα!!

  217. Ο/Η Xristos-Ria Ser λέει:

    Αγαπητέ κ, Γιαννη
    Σε ευχαριστω για την απαντηση που μου εδωσες οσον αφορα τον lexicographer07, Με την εντολη =CODE(A1)=CODE(UPPER(A1)) καταφερα να απομονωσω τις πληροφοριες με κεφαλαια γραμματα, κατοπιν τις ταξινομησα αλφαβητικα και τελος με την εντολη find μεσα απο το pdf αρχειο καταφερα να βρισκω το καθε ονομα που υπαρχει και να καταγραφω την σελιδα, Λιγο βασανιστικο αλλα εχει καποια αποδοση, Δυστυχως η απαλλοιφη της ομαδας εντολων lexiko.CompareMode = TextCompare δεν οδηγησε πουθενα γιατι η ρουτινα του lexicographer07 δεν λειτουργουσε καθολου.
    Παντως θα κανω καποια δουλιά . Ολα αυτα σας τα αναφερω μηπως και σας ερθει καμμια καλυτερη ιδεα ή βοηθησω καποιον αλλον φιλο
    Σας ευχαριστω για αλλη μια φορα

  218. Ο/Η vioannis λέει:

    Χρήστο, Η λειτουργία της συνάρτησης =CODE(A1)=CODE(UPPER(A1)) έχει αξία μετά το τρέξιμο της μάκρο lexicographer, αφού από αυτή έχει απαλειφτεί η γραμμή κώδικα lexiko.CompareMode = TextCompare, αλλιώς έχεις χάσει λέξεις.
    Λοιπόν α) η γραμμή lexiko.CompareMode = TextCompare είναι μόνο μία, αποκλειστικά μία και όχι ομάδα εντολών, αν διέγραψες και άλλες γραμμές, λογικό η μάκρο να μην δουλεύει. β) Αν δεν την διαγράψεις, η μάκρο δουλεύει ως εξής: Αν βρει τις λέξεις Αθήνα και αθήνα, με αυτή τη σειρά στο κείμενο, κρατά την 1η και όχι τη 2η. Αν τις βρει με τη σειρά αθήνα και Αθήνα πάλι κρατά την 1η και όχι την 2η, άρα στην περίπτωση αυτή χάνεις μία λέξη που αρχίζει με κεφαλαίο. Αν όμως διαγράφεις τη γραμμή αυτή του κώδικα, θα κρατήσει και τις δύο λέξεις. γ) Υπάρχει και η λύση που έστειλε ο φίλος Stazybο Hοrn (δες πιο πάνω) για σένα, λύση στο word.

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

    Xristos-Ria Ser,

    Βρήκα -έκλεψα- λίγο χρόνο και βελτίωσα τη διαδικασία. Το παρακάτω το ανέβασα κι εδώ.

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

    Πάμε…

    1. Find (with wildcards)
    <[!0-9α-ωάέήίϊΐόύώ]*>
    Replace
    More, Format, Highlight
     
    2. Find (with wildcards)
    [.\!\;:\)] <[Α-ΩΆΈΉΊΌΎΏ]*>
    Replace
    More, Format, Not Highlight
     
    3. Find (with wildcards)
    ^13<[Α-ΩΆΈΉΊΌΎΏ]*>
    Replace
    More, Format, Not Highlight
     
    4. Find (with wildcards)
    [Α-ΩΆΈΉΊΌΎΏ][Α-ωάέήίϊΐόύϋΰώ]{1;} [Α-ΩΆΈΉΊΌΎΏ][Α-ωάέήίϊΐόύϋΰώ]{1;}
    Replace
    More, Format, Highlight
     
    5. Find (with wildcards)
    [Α-ΩΆΈΉΊΌΎΏ][Α-ωάέήίϊΐόύϋΰώ]{1;} [Α-ΩΆΈΉΊΌΎΏ][Α-ωάέήίϊΐόύϋΰώ]{1;} [Α-ΩΆΈΉΊΌΎΏ][Α-ωάέήίϊΐόύϋΰώ]{1;}
    Replace
    More, Format, Highlight
     
    6. Find
    More, Format, Highlight
    Find in Main Document
    Θα επιλεγεί όλο το κείμενο που είναι highlighted, οι όροι δηλαδή που θέλουμε, με μερικά σκουπίδια και κάποιες ελλείψεις.
     
    7. Copy-Paste (selected highlighted text) στο excel
    Ακύρωση highlight σε όλο το κείμενο στο Word.
     
    8. Στο Excel, Advanced Filter, Unique Records & Sort
     
    9. Copy-Paste (text only) από το excel σε νέο αρχείο word
    Διόρθωση, συμπλήρωση, καθάρισμα λίστας
    save (π.χ. mylist.docx).
     
    10. ΠΡΟΣΟΧΗ, στο τέλος του αρχικού αρχείου, σε νέα σελίδα με CTRL-ENTER
    References (Αναφορές) [tab], Insert Index (Εισαγωγή Ευρετηρίου)
    Index (Ευρετήριο) [tab], Automark (Αυτόματη Σήμανση), Δείξε το αρχείο mylist.docx
    Θα μπουν τα σωστά fields για το index μέσα στο κείμενο, και θα τους βλέπουμε.
    ΠΡΟΣΟΧΗ τώρα. Κρύβουμε με το κουμπάκι ¶ στο κύριο tab, τους κωδικούς, αλλιώς αλλάζει η χαλάει η σελιδοποίηση (προφανές μπαγκ του Γουόρντ).
     
    11. Ξανά στο τέλος του αρχικού αρχείου
    (Αναφορές) [tab], Insert Index (Εισαγωγή Ευρετηρίου)
    Index (Ευρετήριο), OK
    
    

    Έτοιμος!

    Φυσικά, αν έχουμε τη λίστα των λέξεων, ξεκινάμε από το βήμα 9.

    Με τα βήματα 1-6 θα χάσουμε πολύ λίγες περιπτώσεις, ανάμεσά τους, σειρές κυρίων λέξεων που περιλαμβάνουν και αρχικά γράμματα (με ή χωρίς τελείες), καθώς και αρκτικόλεξα με ενδιάμεσες τελείες. Γι’ αυτό είναι απαραίτητη και λίγη δουλειά με το χέρι στο βήμα 9.

  220. Ο/Η Xristos-Ria Ser λέει:

    Αγαπητέ Stazybο Hοrn σε ευχαριστω που ασχοληθηκες με το προβλημα μου και με ενθουσιαζει το γεγονος οτι σας προκαλεσα και εσας εναν προβληματισμο, Πιστευω οτι το ειδατε σαν μια ιδομορφη προκληση μακρια απο την αριθμομανια του excel.
    Εγω προχωρω την εργασια του index με τον δικο μου τροπο
    Δεν εχω γνωσεις προγραμματισμου και γιαυτο ο τροπος που μου προτεινεις ειναι αδυνατο να τον καταλαβω και πολυ περισσοτερο να τον εφαρμοσω
    Εχω μια ακομη δυσκολια οτι το αρχικο αρχειο word που εφτιαξα τα βιβλια εχει καταστραφει (δεν ξερω για ποιον λογο) αλλα εχω διατηρησει αρκετα αντιγραφα της τελικης εκδοσης σε pdf
    Οταν προσπαθησα να μετατρεψω το pdf σε word με το AbbyyFinereader 11 το κειμενο που προκυψε περιεχει πολλα «ορθογραφικα» λαθη πραγμα που το καθιστα αδυνατο να γινει copy-paste στο excel , Ετσι ολη η δουλια γινεται μεσα απο copy-paste του pdf αχειου
    Αν τελος μου εδινες τις σκεψεις σου σε καποια παρομοιας μορφη ρουτινας – οπως το lexicographer07 και για αρχεια pdf – θα το δοκιμαζα
    Παντως σας ευχαριστω πολυ μονο και μονο επειδη αφιερωσατε λιγο απο τον πολυτιμο χρονο σας για εμενα

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

    Όσα πρότεινα να κάνεις, είναι εύρεση κι αντικατάσταση στο word, συμπληρώνοντας κουτάκια. Το πιο δύσκολο, άντε να είναι το custom filtering στο excel… Τυχαίνει να συναντώ δημιουργούς που έχουν χάσει κάποιο αρχείο της δουλειάς τους -αλλά πολύ σπάνια. Κι από δύο βιβλία, από 500 σελίδες;

  222. Ο/Η beba λέει:

    Καλησπέρα σας

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

    Δεν ξέρω αν σας μπέρδεψα….αλλά έχω προσπαθησει με διάφορες συναρτήσεις και δεν έχω κάποιο αποτέλεσμα.
    Αν μπορειτε να με βοηθήσετε.

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

  223. Ο/Η vioannis λέει:

    Beba, έτσι που τα λες, στο νέο φύλλο θα υπάρχει χώρος για ένα μόνο όνομα. Γίνε πιο αναλυτική, θα γράψεις, παράδειγμα, την ημερομηνία στο κελί Α1 και τα περισσότερα από ένα ονόματα θα εμφανιστούν σε ποια κελιά; Δες την απάντηση που έδωσα στις 19/10/2014 στην Marylou στη σελίδα About και κατέβασε από εκεί το excel βιβλίο FilterLivingbyYear.xls. Κάτι τέτοιο ζητάς; Επίσης δες τα σημειώματα του ιστολογίου Γρήγορο φιλτράρισμα μιας λίστας και Φιλτράρισμα λίστας και δημιουργία φύλλων για όλες τις τιμές πεδίου.

  224. Ο/Η beba λέει:

    Σας ευχαριστώ παρα πολυ για την γρήγορη απάντηση.
    Θα προσπαθησω να γίνω πιο ακριβής σε μια καρτέλα του excel με όνομα Μαϊος εχω τις εξής στήλες α/α, όνομα, ημερομηνια παραλαβής, κόστος, και deadline ημερομηνια. όλα μπαινουν χειροκίνητα. Θέλω σε μια άλλη καρτελα που θα έχει σε στήλες όλες τις ημερομηνίες του μηνα πχ μαϊο να βρίσκει τις αντιστοιχες deadline ημερομηνίες και να μου λέει τα αντίστοιχα ονόματα.
    Απλα θέλω να γίνεται (δεν ξερω αν γίνεται) ταυτόχρονα. π.χ
    πάω στην πρώτη καρτελα και γραφω ενα όνομα μια δουλεια, κόστος και ημερομηνία deadline και θέλω να πηγαίνω στην άλλη καρτέλα και να έχει αυτοματα συμπληρωθεί στην ημερομηνία deadline τα αντιστοιχα ονοματα που μπορεί να είναι και πολλα στην ίδια ημερομηνία.

    Ελπίζω να ήμουν πιο κατανοητή

    Και πάλι σας ευχαριστω πάρα πολύ για τον χρόνο σας.

  225. Ο/Η vioannis λέει:

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

  226. Ο/Η beba λέει:

    Ειλικρινα δεν έχω λόγια για την βοήθεια σας.
    Μπραβο σας για αυτό που κάνετε.
    Σας ευχαριστωωωωωωωω πάρα πολύ.

  227. Ο/Η ΝΙΚΟΛΟΥΤΣΟΥ ΜΑΡΙΑ λέει:

    Καλημέρα!
    Θα ήθελα τη βοήθεια σας, σας παρακαλώ.
    Σ’ ένα φύλλο excel έχω καταγράψει τα δεδομένα μιας έρευνας ως εξής:
    Στον οριζόντιο άξονα, 10 προτάσεις θέσεις κατά αύξοντα αριθμό(1-10) και στον κάθετο άξονα τα ονόματα των συναδέλφων που τις επέλεξαν. Δίπλα σε κάθε συνάδελφο, όρισα τη δική του σειρά προτίμησης: π.χ. ο Α.Μ, επέλεξε την πρόταση 1 ως 10η επιλογή, τη 2 ως 7η κ.ο.κ.
    Αρχικά θα ήθελα να μου πείτε αν είναι σωστή η διάταξη των δεδομένων και αφετέρου τι πρέπει να κάνω για να βρω πόσοι επέλεξαν ως πρώτη την πρώτη ερώτηση, πόσοι τη δεύτερη κ.ο.κ. Τέλος, θέλω να βρω την πρόταση που συγκεντρώνει το μεγαλύτερο ποσοστό προτίμησης.
    Σας ευχαριστώ εκ των προτέρων.

  228. Ο/Η vioannis λέει:

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

  229. Ο/Η ΝΙΚΟΛΟΥΤΣΟΥ ΜΑΡΙΑ λέει:

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

  230. Ο/Η vioannis λέει:

    Κάτω αριστερά δεν υπάρχουν οι καρτέλες των φύλλων; Φύλλο1/Φύλλο2

  231. Ο/Η vioannis λέει:

    Μαρία, δες αυτό το θέμα: Where are my worksheet tabs?

  232. Ο/Η Ανδρέας Φεραδούρος λέει:

    Κύριε Βαρλάμη καλησπέρα,
    επικοινωνώ ξανά μαζί σας για το ακόλουθο θέμα: είχατε απαντήσει στην ερώτηση μου (21/02/15) με τριπλή (!!!) επιλογή για μαζική δημιουργία αντιγράφων, η οποία δουλεύει έξοχα και σας ευχαριστώ ξανά. Σας την θυμίζω παρακάτω:

    Sub makro3()
    On Error Resume Next
    Dim d As Integer
    Dim myMonth As Integer
    Dim myDays As Integer
    Dim myYear As Integer
    Dim keli As Range
    
    Set keli = Range("A1")
    
    myMonth = VBA.Month(keli.Value)
    myYear = VBA.Year(keli.Value)
    myDays = VBA.DateSerial(myYear, 1 + myMonth, 1) - VBA.DateSerial(myYear, myMonth, 1)
    myYear = VBA.Year(keli.Value)
    For d = 2 To myDays
    ActiveSheet.Copy After:=ActiveSheet
    ActiveSheet.Name = Format(DateSerial(myYear, myMonth, d), "ddmmmyy")
    Next
    On Error GoTo 0
    End Sub
    

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

  233. Ο/Η ATHOS λέει:

    Αγαπητέ Γιάννη καλησπέρα.
    Έχω ένα πίνακα με 12 στήλες (κάθε στήλη μήνας) στην επικεφαλίδα.
    Πως θα μπορούσα βάζοντας πχ τον ΙΑΝΟΥΆΡΙΟ στην επικεφαλίδα της πρώτης στήλης να μου επιστρέφει στην δεύτερη στήλη τον ΦΕΒΡΟΥΆΡΙΟ στην επόμενη τον ΜΆΡΤΙΟ κοκ.
    Και βέβαια σε κάθε αλλαγή της πρώτης να αλλάζουν όλες οι επικεφαλίδες.
    Μήπως έχεις δώσει κάποια τέτοια λύση πιο παλιά?
    Ευχαριστώ.

  234. Ο/Η vioannis λέει:

    Ανδρέα, Η παρακάτω τροποποίηση του κώδικα σε κάθε φύλλο που δημιουργεί, φτιάχνει σύνδεσμο του κελιού G1, με το κελί G30 του αμέσως προηγουμένου φύλλου. Υποθέτω ότι στο κελί G30 του κάθε φύλλου υπάρχει το τελικό άθροισμα της ημέρας που αθροίζει τη στήλη G1:G29, και αυτό το άθροισμα μεταφέρεται στο G1 του επομένου φύλλου, ώστε να συμμετέχει στο άθροισμα της νέας ημέρας. Αν αλλάξεις κάποια τιμή στη στήλη G2:G29 κάποιας ημέρας, όλες οι επόμενες ημέρες του μήνα θα ενημερωθούν. Με άλλα λόγια G30 είναι το ’προς μεταφορά’ ποσό και G1 το ‘από μεταφορά’ .

    Sub makro3()
    On Error Resume Next
    Dim d As Integer
    Dim myMonth As Integer
    Dim myDays As Integer
    Dim myYear As Integer
    Dim keli As Range
    Dim prsh As String
    Dim eposh As String
    Set keli = Range("A1")
    myMonth = VBA.Month(keli.Value)
    myYear = VBA.Year(keli.Value)
    myDays = VBA.DateSerial(myYear, 1 + myMonth, 1) - VBA.DateSerial(myYear, myMonth, 1)
    myYear = VBA.Year(keli.Value)
    For d = 2 To myDays
    prsh = ActiveSheet.Name
    ActiveSheet.Copy After:=ActiveSheet
    ActiveSheet.Name = Format(DateSerial(myYear, myMonth, d), "ddmmmyy")
    eposh = ActiveSheet.Name
    Worksheets(prsh).Range("G30").Copy
    Worksheets(eposh).Range("G1").Select
    ActiveSheet.Paste Link:=True
    Next
    On Error GoTo 0
    End Sub
    
  235. Ο/Η vioannis λέει:

    ATHOS, γράψε στο πρώτο κελί Α1 την ημερομηνία 1/1/2015 και στα επόμενα κελιά τις συναρτήσεις:

    =DATE(YEAR(A1);MONTH(A1)+1;1)
    =DATE(YEAR(A1);MONTH(A1)+2;1)
    =DATE(YEAR(A1);MONTH(A1)+3;1)
    κλπ
    

    Μετά επίλεξε όλη τα κελιά και μορφοποίησε σε μία μορφή που σε βολεύει, όπως: μμμ-εε που θα σου δώσει Ιαν-15, Φεβ-15 κλπ ΄
    Δες και το σημείωμα του ιστολογίου εδώ

  236. Ο/Η ΜΑΡΙΑ λέει:

    Καλημέρα!
    Τελικά το ότι δεν έβλεπα τα άλλα φύλλα του βιβλίου που μου στείλατε, ήταν θέμα υπολογιστή. Όταν το άνοιξα σε παλαιότερο υπολογιστή με παλαιότερο λογισμικό, μου έβγαλε όλα τα φύλλα. Η απορία μου είναι πλέον η εξής: Τη συνάρτηση την αντιγράφω στο φύλλο 1 πιο κάτω και δεξιά ή σε άλλο φύλλο; Μήπως πρέπει στο φύλλο 2 να γράψω το δεύτερο μικρό πινακάκι και μέσα εκεί να περάσω τα αποτελέσματα της συνάρτησης; Ή τα βρίσκω πρώτα και μετά φτιάχνω το δεύτερο πινακάκι στο φύλλο 2;
    Σας ευχαριστώ.

  237. Ο/Η ATHOS λέει:

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

  238. Ο/Η Vasso λέει:

    Καλησπέρα, αντιμετωπίζω ένα πρόβλημα με την εκτύπωση του Excell. Έχω ένα αρχείο, το οποίο το έχω διαμορφώσει ώστε να εκτυπώνεται σε μία σελίδα ή δύο, ανάλογα με το μέγεθος. Το πρόβλημα που αντιμετωπίζω, είναι ότι κατά το άνοιγμα εκτύπωσης του αρχείου-ενώ σε προηγούμενες προβολές και διαμορφώσεις λειτουργούσε σωστά- κάποια στιγμή (δεν γνωρίζω τι αλλαγές έχουν γίνει) χάνει τις ρυθμίσεις εκτύπωσης και από 1 ή 2 σελίδες, ξαφνικά οι σελίδες γίνονται 19.912….κάθε κελί και σελίδα. Αυτό συμβαίνει με ένα εκτυπωτή συνήθως. Αν δώσω εκτύπωση σε άλλον εκτυπωτή, θα έχει τις ρυθμίσεις που του έχω βάλει αρχικά ή που θέλω εκείνη τη στιγμή. Τι μπορεί να επηρεάζει τις ρυθμίσεις στον συγκεκριμένο εκτυπωτή; Επίσης να σημειώσω ότι από εκείνη τη στιγμή που γίνεται αυτή η «απορύθμιση», όποιο αρχείο Excell κι αν ανοίξω χάνει τις ρυθμίσεις τις αρχικές. Πώς μπορώ να το διορθώσω; Ευχαριστώ εκ τω προτέρων

  239. Ο/Η vioannis λέει:

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

  240. Ο/Η vioannis λέει:

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

  241. Ο/Η Vassi λέει:

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

  242. Ο/Η vioannis λέει:

    Vasso, πες στον συντηρητή του συστήματός σου να συμβουλευτεί και αυτή εδώ την σελίδα:
    http://answers.microsoft.com/en-us/office/forum/office_2007-excel/removing-page-breaks-from-every-cell/b507f2a7-2f0d-4447-a080-6625aa780d47

  243. Ο/Η Ανδρέας Φεραδούρος λέει:

    Κύριε Βαρλάμη καλημέρα,
    ως συνήθως οι συμβουλές και υποδείξεις σας ήταν ακριβέστατες. Σας ευχαριστώ πολύ. Μια τελευταία παρατήρηση: ενώ στο κελί «Α1» γράφω την ημερομηνία (π.χ. 10/06/2015), η μακροεντολή δημιουργεί από 02 Ιουνίου. Κάνω κάτι λάθος?
    Ευχαριστώ ξανά για τον χρόνο σας.
    Με εξαιρετική εκτίμηση,
    Ανδρέας Φεραδούρος

  244. Ο/Η Vasso λέει:

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

  245. Ο/Η vioannis λέει:

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

    For d = 2 To myDays
    

    άλλαξε τη σε:

    For d = VBA.Day(keli.Value) To myDays
    

    για να ξεκινάνε τα φύλλα από τη ημερομηνία του κελιού Α1 ή σε:

    For d = VBA.Day(keli.Value)+1 To myDays
    

    για να ξεκινάνε από την επομένη.

  246. Ο/Η Ανδρέας Φεραδούρος λέει:

    Κύριε Βαρλάμη ευχαριστώ πολύ!
    Καλή συνέχεια.
    Ανδρέας Φεραδούρος

  247. Ο/Η ΝΙΚΟΛΟΥΤΣΟΥ ΜΑΡΙΑ λέει:

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

  248. Ο/Η Νικος Παππας λέει:

    Καλησπερα Γιωργο!
    Εχω καποιους αριθμους σε καποια κελια π.χ 37, 38 ,36 κ.τ.λ τα επιλεγω και δημιουργω ενα γραφημα! Μπορω στο γραφημα να εμφανιζω το πληθος για καθε αριθμο π.χ το 37 υπαρχει 3 φορες, 38 υπαρχει 15 φορες κ.τ.λ σ ευχαριστω εκ των προτερων!

  249. Ο/Η vioannis λέει:

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

  250. Ο/Η Eleni λέει:

    Καλησπερα φιλε μου, θα ηθελα να με βοηθησεις αν μπορεις
    Θελω μια συναρτηση που να περνει το κελι Β και να εμφανιζει το κελι Α Οριζοντια
    Στα επομενα κελια όπως είναι στο παραδειγμα.
     
    Θελω να γινεται αυτοματα γιατι η εγραφες είναι πολλες.
    Σε ευχαριστω εκ το προτερων

    To Example Image ειναι το παρακατω Link
    https://drive.google.com/open?id=0B-AwMLEkP5IQV1NMUl9nM0JkNGM&authuser=0

  251. Ο/Η vioannis λέει:

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

  252. Ο/Η Eleni λέει:

    ΣΑΣ ΞΑΝΑΣΤΕΛΝΩ ΤΟ LINK ΟΣΟ ΓΙΑ ΤΗΝ ΠΕΡΙΓΡΑΦΗ, ΘΑ ΠΡΕΠΕΙ ΝΑ ΔΕΙΤΕ ΚΑΙ ΤΗΝ ΕΙΚΟΝΑ ΠΡΩΤΑ, ΕΥΧΑΡΙΣΤΩ ΠΟΛΥ, ΓΙΑ ΤΗΝ ΑΜΕΣΗ ΑΠΑΝΤΗΣΗ ΣΑΣ.

    https://drive.google.com/file/d/0B-AwMLEkP5IQV1NMUl9nM0JkNGM/view?usp=sharing

  253. Ο/Η vioannis λέει:

    Δηλαδή, όσο οι τιμές στην (ταξινομημένη;) στήλη Β είναι ίδιες, δεξιά της πρώτης τιμής της ομάδας των ίδιων Β, να γίνει αντιμετάθεση των αντίστοιχων τιμών της στήλης Α. Σωστά τα λέω; Αν τα λέω σωστά, και οι εγγραφές είναι πάρα πολλές, χρειάζεται μακροεντολή για να γίνει αυτή η εργασία. Με συνάρτηση δεν γίνεται. Αν είναι λίγες οι χρωματιστές ομάδες θα γίνει χειριστικά με αντιγραφή, ειδική επικόλληση, αντιμετάθεση.

  254. Ο/Η Eleni λέει:

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

  255. Ο/Η ATHOS λέει:

    Αγαπητέ Γιάννη καλησπέρα.
    Έχω ένα θέμα που με παιδεύει και θέλω την βοήθειά σου.
    Έχω ένα πίνακα μηνιαίων πωλήσεων με διάκριση ανά περιοχή δηλ. ΑθΗΝΑ ,ΘΕΣ/ΝΙΚΗ, ΠΑΤΡΑ κλπ για 12 μήνες.
    ΠΕΡΙΟΧΗ Ιαν-2015 Φεβ-2015 Μαρ-2015 Απρ-2015
    ΑΘΗΝΑ 50.000,00 25.000,00 32.000,00 15.000,00
    ΘΕΣ/ΝΙΚΗ 20.000,00 5.000,00 15.000,00 8.000,00
    Θέλω αν γίνεται να μεταφέρω με κάποιες συνθήκες σε άλλο φύλλο Cashflow (με κολώνες 12 μηνών) τις πληρωμές.
    Οι συνθήκες που θα είναι σε άλλο φύλλο θα είναι της μορφής πχ ΑΘΗΝΑ: πληρώνει το 10% μετρητοίς ,το 50% σε 60 ημέρες και το υπόλοιπο 40% σε 90 ημέρες. Απλά θα καταχωρούνται με ελεύθερη επιλογή οι ημέρες πίστωσης και τα ποσοστά.
    Μπορώ με κάποιες συναρτήσεις ή μακροεντολή, με αυτές τις όποιες συνθήκες, να δημιουργούνται οι χρηματοροές στο φύλλο Cashflow ?
    Ελπίζω να έγινα κατανοητός.

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

  256. Ο/Η vioannis λέει:

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

  257. Ο/Η Eleni λέει:

    Φυσικα και θα το ηθελα αλλα δε εβρισκα το τροπο να σας το ζητησω .
    χιλια ευχαριστω

  258. Ο/Η vioannis λέει:

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

    Sub test()
    Dim rngC As Range
    Dim rngCaddr As String
    Dim rngAaddr As String
    Dim pl As Integer
    Dim i As Integer
    Dim j As Long
    Dim maxRow As Long
    
    maxRow = 2000
    
    For j = 1 To maxRow
    If Cells(j, 2) <> Cells(j + 1, 2) Then
    Cells(j + 1, 1).Copy Destination:=Cells(j + 1, 3)
    End If
    Next
    Cells(1, 1).Copy Destination:=Cells(1, 3)
    Range("C1:C" & maxRow).Select
    Set rngC = Selection.SpecialCells(xlCellTypeBlanks)
    pl = rngC.Areas.Count
    For i = 1 To pl
    rngCaddr = rngC.Areas(i).Address
    rngAaddr = Replace(rngCaddr, "C", "A")
    Range(rngAaddr).Select
    Selection.Copy
    rngC.Areas(i).Item(0, 2).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Transpose:=True
    Next
    Application.CutCopyMode = False
    End Sub
    
  259. Ο/Η ΕΛΕΝΗ λέει:

    Δουλεψε τελεια.!!!!Δεν εχω λογια κυριε Γιαννη να ειστε παντα καλα ειχα 243000 εγγραφες και δεν θα τελειωνα
    ποτε μια μια , τι να πω δεν ξερω υπαρχουν ακομα ανθρωποι που βοηθανε
    χιλια ευχαριστω!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

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

    Αγαπητέ Γιάννη, καλησπέρα.
    Συγχαρητήρια για μια ακόμη φορά για την πολύ καλή σου σελίδα και για το έργο γενικότερα που επιτελείς στα υπολογιστικά φύλλα.
    Θα ήθελα αν είναι εύκολο να με βοηθήσεις σε κάτι. Θέλω να δημιουργήσω ένα φύλλο με βαθμολογίες μαθητών, όπου κάθε μαθητής μέσα από φόρμα που θα συμπληρώνει –με το ονοματεπώνυμο ή τον αριθμό μητρώου του – να έχει πρόσβαση μόνο στα δικά του στοιχεία –να μη βλέπει τη βαθμολογία των άλλων. Θα μπορούσα να το παραλληλίσω με ένα παραμετρικό ερώτημα σε μια βάση δεδομένων της Access, το οποίο μέσα από μια φόρμα, ζητάει κάποια στοιχεία και εμφανίζει τα αποτελέσματα της συγκεκριμένης εγγραφής , με βάση τα δεδομένα που του πληκτρολογήσαμε.
    Φαντάζομαι ότι για να κάνουμε κάποια τέτοια διαδικασία στο Excel θα πρέπει να σχεδιάσουμε κάποια φόρμα και να παραμετροποιήσουμε κώδικα της VBA. Έχεις καμιά ιδέα για το πώς γίνεται αυτό;
    Κάθε βοήθεια ευπρόσδεκτη!!

    Ευχαριστώ!!!

  261. Ο/Η vioannis λέει:

    Δημήτρη, η vba μπορεί σε ένα πίνακα να εκτελεί φιλτράρισμα, να κατασκευάζει pivot, και γενικά να συλλέγει επιλεκτικά στοιχεία, ζητώντας από τον χρήστη ένα password, και να επιτρέπει στον χρήστη να έχει πρόσβαση μόνο στα στοιχεία που επιτρέπει το συγκεκριμένο password. Ίσως η γραφή αυτού του κώδικα να είναι επίπονη, αλλά γενικά είναι εφικτή. Εκείνο που κατά τη γνώμη μου δεν είναι εφικτό, είναι να είναι και να παραμένει κρυφός και ο κώδικας (που θα περιέχει τα passwords) και ο πίνακας των συνολικών δεδομένων. Ακόμα και αν η συνολική εργασία μπορεί να γίνει ένα κλειδωμένο πρόσθετο, ακόμα και αν οι πρόσφατες εκδόσεις του excel έχουν βελτιωμένη ασφάλεια, θα υποκύψει στα βοηθήματα (σπαστήρια) που κυκλοφορούν. Θα στοιχημάτιζα ότι σε ένα σχολικό περιβάλλον θα άντεχε λίγες ημέρες.

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

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

  263. Ο/Η Νικόλας λέει:

    Κύριε Γιάννη καλησπέρα και καλό καλοκαίρι εύχομαι.
    Έχω φτιάξει μία userform μέσω vba η οποία κάνει διάφορες καταχωρήσεις. Σε ένα πεδίο της, βάζω την ημερομηνία που θέλω και την αντιγράφει στο κελί που έχω επιλέξει. Το θέμα μου είναι πως είναι σύντομη ημερομηνία τύπου «ηη/μμ/εε». Όταν όμως γίνεται η καταχώρηση, το excel μου την μετατρέπει σε «μμ/ηη/έτος». Δηλαδή έτσι την διαβάζει κατευθείαν (δεν νομίζω να κάνει μετατροπή).
    Υπάρχει επιλογή ώστε να γράφω: 7/4/15 και να μου το βγάζει: 7/4/2015 ?
    Τώρα μου το βγάζει: 4/7/2015.
    Όταν γράψω «22/4/15», δεν το βγάζει «22/4/2015», αλλά «22/4/15» και δίπλα το θαυμαστικό με ρωτάει αν θέλω να το κάνει «20ΧΧ» ή «19ΧΧ». Γενικά με μπερδεύει λίγο.

    Ο κώδικας του σημείου είναι: Sheets(«Φύλλο2»).Range(«A2»).Value = txtBox1.Value
    Δοκίμασα αντί για «.Value» το «.Text», αλλά δεν άλλαξε κάτι.
    Γενικότερα, υπάρχει κάποιος συγκεκριμένος τρόπος να περνάμε ημερομηνίες (στην Ελληνική μορφή);

    Ελπίζω να καταλάβατε τι θέλω να πω…

  264. Ο/Η vioannis λέει:

    Νικόλα, άλλαξε την γραμμή κώδικα που έστειλες με την

    Sheets("Φύλλο2").Range("A2").Value = DateSerial(Year(txtBox1.Value), Month(txtBox1.Value), Day(txtBox1.Value))
    

    Δες αν οι ημερομηνίες στα setting του υπολογιστή έχουν ρυθμιστεί σε μία μορφή : ημέρα-μήνας- έτος
    Δώσε στο κελί Α2 που υποδέχεται την ημερομηνία, μορφοποίηση ημερομηνίας που να ξεκινά με [$-408]
    Παράδειγμα:
    [$-408] ηη/μμ/εεεε
    Και πες μου

  265. Ο/Η Τάκης λέει:

    Κύριε Γιάννη καλησπέρα.
    Έστω ότι στα κελιά A1:A10 υπάρχουν συνδυασμοί αριθμών από το 0 έως το 5, που αν προστεθούν όλες οι τιμές των κελιών το άθροισμα είναι πάντα το 5. π.χ. α) 0,0,1,2,0,1,0,1,0,0 ή β) 0,3,0,2,0,0,0,0,0,0 ή γ) 1,2,0,0,0,0,2,0,0,0 κ.λ.π. Αυτό που θα ήθελα να σας ρωτήσω είναι το εξής: Υπάρχει τρόπος μέσω συνάρτησης φύλλου στο κελί A11 να παίρνω ένα αλφαριθμητικό του τύπου
    «2111» για το παράδειγμα (α) ή «32» για το παράδειγμα (β) ή «221» για το παράδειγμα (γ) κ.λ.π.;
    Θα ήθελα δηλαδή οι αριθμοί των κελιών A1 έως A10 να εμφανίζονται μαζί στο κελί A11, αλλά χωρίς τα μηδενικά, και κατά φθίνουσα σειρά.

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

  266. Ο/Η Angelos λέει:

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

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

    Ευχαριστώ

  267. Ο/Η vioannis λέει:

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

    B1: =TRIM(SUBSTITUTE(SUBSTITUTE(A1;",";"");"0";""))
    C1: =IFERROR(LARGE(--MID(B1;ROW(INDIRECT("1:"&LEN(B1)));1);1);"")
    D1: =IFERROR(LARGE(--MID(B1;ROW(INDIRECT("1:"&LEN(B1)));1);2);"")
    E1: =IFERROR(LARGE(--MID(B1;ROW(INDIRECT("1:"&LEN(B1)));1);3);"")
    F1: =IFERROR(LARGE(--MID(B1;ROW(INDIRECT("1:"&LEN(B1)));1);4);"")
    G1: =IFERROR(LARGE(--MID(B1;ROW(INDIRECT("1:"&LEN(B1)));1);5);"")
    H1: =--TRIM(CONCATENATE(C1;D1;E1;F1;G1))

    Οι 5 συναρτήσεις IFERROR είναι Ctrl+Shift+Enter συναρτήσεις (ενός κελιού)και εισάγονται όπως έχουμε πει εδώ. Μετά την εισαγωγή τους θα δείχνουν έτσι:

    C1: {=IFERROR(LARGE(--MID(B1;ROW(INDIRECT("1:"&LEN(B1)));1);1);"")}
    D1: {=IFERROR(LARGE(--MID(B1;ROW(INDIRECT("1:"&LEN(B1)));1);2);"")}
    E1: {=IFERROR(LARGE(--MID(B1;ROW(INDIRECT("1:"&LEN(B1)));1);3);"")}
    F1: {=IFERROR(LARGE(--MID(B1;ROW(INDIRECT("1:"&LEN(B1)));1);4);"")}
    G1: {=IFERROR(LARGE(--MID(B1;ROW(INDIRECT("1:"&LEN(B1)));1);5);"")}

    Μετά τους αντιγράφεις προς τα κάτω και στην τελευταία στήλη Η εμφανίζεται αυτό που ζητάς σε μορφή αριθμού. Αν το τελικό αποτέλεσμα το θέλεις σε μορφή κειμένου, βγάλε το διπλό μείον μπροστά από τον τελευταίο τύπο. Υπέθεσα ότι το μέγιστο πλήθος μη μηδενικών αριθμών είναι 5, αφού το άθροισμα των αριθμών είναι 5, άρα η ποιο πολυπληθής περίπτωση είναι 11111. Δες το παράδειγμα σε δράση στο βιβλίο takisexample

  268. Ο/Η vioannis λέει:

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

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

    Νομίζω οι περιπτώσεις του αποτελέσματος είναι περιορισμένες (5, 41, 32, 311, 221, 2111, 11111) κι ένα σύνθετο IF μπορεί να τις πιάσει όλες:

    =IF(MAX(A1:A10)=5;5;IF(MAX(A1:A10)=4;41;IF(MAX(A1:A10)=3;IF(LARGE(A1:A10;2)=2;32;311);IF(MAX(A1:A10)=2;IF(COUNTIF(A1:A10;2)=2;221;2111);11111))))
  270. Ο/Η Τάκης λέει:

    Κύριε Γιάννη ζητώ συγνώμη. Δεν σου εξήγησα εγώ σωστά. Το κάθε κελί στην περιοχή A1:J1 και (όχι A1:A10) περιέχει έναν μόνο αριθμό, από 0 έως 5 π.χ A1=0, B1=0, C1=1,D1=0, E1=0, F1=2, G1=0, H1=1, I1=0, J1=1 και στο κελί K1 πρέπει να υπάρχει το αποτέλεσμα της συνάρτησης 2111

  271. Ο/Η vioannis λέει:

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

  272. Ο/Η Τάκης λέει:

    Έχεις δίκιο Stazybο Hοrn, πράγματι λειτουργεί σωστά!!! Ευχαριστώ πολύ.

  273. Ο/Η Μαρία Νίκου λέει:

    Κύριε Γιάννη καλησπέρα,
    Συγχαρητήρια για την καταπληκτική δουλειά – βοήθεια που μας δίνεις.
    Έχω 2 αρχεία με εγγραφές (όνομα, επώνυμο, τηλέφωνο). Κάποιες εγγραφές-τηλέφωνα υπάρχουν και στα 2 αρχεία. Θέλω από τα 2 αυτά αρχεία να δημιουργήσω ένα 3ο αρχείο, το οποίο θα περιέχει μόνο τις εγγραφές με τα μη κοινά τηλέφωνα (δηλαδή εάν ένα τηλέφωνο υπάρχει και στα 2 αρχεία να μην υπάρχει στο 3ο αρχείο).
    π.χ.
    το αρχείο 1, περιέχει τις εγγραφές:
    ΕΠΩΝΥΜΟ ΟΝΟΜΑ ΤΗΛΕΦΩΝΟ
    Καρρά Πόπη 2310777777
    Καρράς Βασίλειος 2462088888
    Καρρά Παρασκευή 2462088888
    Καρράς Βασίλειος 2310222222

    και το αρχείο 2:
    ΕΠΩΝΥΜΟ ΟΝΟΜΑ ΤΗΛΕΦΩΝΟ
    Καρράς Βασίλειος 2462088888
    Καρρά Παρασκευή 2462088888
    Καρράς Γεώργιος 2310222222
    Καντούνης Δημήτριος 2310666666

    Το 3ο αρχείο θέλω να περιέχει τα μη κοινά τηλέφωνα, δηλαδή να περιέχει τις εγγραφές:
    Καρρά Πόπη 2310777777
    Καντούνης Δημήτριος 2310666666

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

  274. Ο/Η vioannis λέει:

    Μαρία, Με αντιγραφή – επικόλληση μετάφερε τα δύο αρχεία σε ένα νέο φύλλο, το ένα κάτω από το άλλο. Με βάση την περιγραφή σου όταν τελειώσεις θα έχεις: στήλη Α επώνυμα, στήλη Β ονόματα, στήλη C τηλέφωνα. Και ας πούμε ότι οι εγγραφές φτάνουν ως την γραμμή 2000. Στο άδειο κελί D1 γράψε τον τύπο:

    =COUNTIF($C$1:$C$2000;C1)
    

    και τον αντιγράφεις έως το κελί D2000. Η συνάρτηση αυτή επιστρέφει έναν αριθμό που δείχνει πόσες φορές υπάρχει το κάθε τηλέφωνο στη στήλη C. Για τα μοναδικά τηλέφωνα που σε ενδιαφέρουν επιστρέφει 1. Στη συνέχεια φιλτράρεις την στήλη D και επιλέγεις να εμφανιστούν μόνο οι τιμές 1. Αντιγράφεις τις εγγραφές που εμφανίζονται μετά το φίλτρο, και τις επικολλάς όπου θέλεις . Αντί για φιλτράρισμα μπορείς να κάνεις ταξινόμηση όλου του πίνακα Α1:D2000, ως προς τη στήλη D και οι μονάδες θα εμφανιστούν όλες μαζί.
    Βέβαια για να δουλέψει ο παραπάνω τύπος πρέπει τα τηλέφωνα να είναι γραμμένα με τον ίδιο τρόπο. Τα τηλέφωνα 210-123-4567 και το 210-1234567 για το ανθρώπινο μάτι είναι ίδια αλλά για τον υπολογιστή διαφορετικά. Αν έχεις τέτοιο πρόβλημα, πες το, ξεπερνιέται.
    Αν τώρα θέλεις να εντοπίσεις τις μοναδικές εγγραφές, όχι από το τηλέφωνο, αλλά από τον συνδυασμό επιθέτου-ονόματος, στο κελί D1 γράψε τον τύπο:

    =CONCATENATE(A1;B1)
    

    στο κελί Ε1 τον τύπο:

    =COUNTIF($D$1:$D$2000;D1)
    

    Τους τύπους αντιγράφεις ως τη γραμμή 2000 και συνεχίζεις όπως προηγούμενα.

  275. Ο/Η Angelos λέει:

    Ιωάννη, ευχαριστώ για την απάντηση
    Δυστυχώς, υπάρχει λόγος που θέλω να κάνω copy paste

  276. Ο/Η ATHOS λέει:

    Αγαπητέ Γιάννη καλημέρα.

    Έχεις κάποιο νέο για το ερώτημα μου?
    Μήπως είναι κάτι που δεν το έγραψα αναλυτικά και σε έχω μπερδέψει ?
    Και πάλι σε ευχαριστώ για την πολύ καλή δουλειά που κάνεις και μας βοηθάς με τις γνώσεις σου!

  277. Ο/Η Μαρία Νίκου λέει:

    Γιάννη, σε ευχαριστώ πολύ για την άμεση απάντησή σου.
    Με την μορφοποίηση – ομοιομορφία των αριθμών τηλεφώνων είμαι οκ, το γνωρίζω.
    Τα αρχεία που πρέπει να επεξεργαστώ είναι πολύ μεγάλα.
    Γνωρίζεις μήπως μπορώ να έχω το ίδιο αποτέλεσμα και με την vlookup χωρίς να αντιγράψω το περιεχόμενο του ενός αρχείου μέσα στο άλλο;;
    Και πάλι σε ευχαριστώ, να είσαι καλά!

  278. Ο/Η vioannis λέει:

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

  279. Ο/Η vioannis λέει:

    Μαρία ναι, αν οι πίνακες είναι σε διαφορετικά βιβλία (βιβλίο1 και βιβλίο2), τότε η συνάρτηση

    =VLOOKUP(C1;[Βιβλίο1.xlsx]Φύλλο1!$A$1:$C$2000;3;FALSE)
    

    Θα επιστρέφει #Δ/Υ αν το τηλέφωνο στο κελί C1 του βιβλίου 2 δεν υπάρχει στο βιβλίο1.
    (Τα δύο βιβλία πρέπει να είναι ανοιχτά και τα δύο)

  280. Ο/Η ATHOS λέει:

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

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

  281. Ο/Η Μαρία Νίκου λέει:

    Γιάννη σε ευχαριστώ πολύ!!!!!

  282. Ο/Η Νικόλας λέει:

    Καλησπέρα,
    Κύριε Γιάννη η μορφή «DateSerial(Year(),Month(),Day())» που μου υποδείξατε για την εισαγωγή ημερομηνίας μέσω vba, δουλεύει ΑΨΟΓΑ!
    Με γλιτώσατε από συνεχείς διορθώσεις!
    Να είστε πάντα καλά!

  283. Ο/Η Sofia λέει:

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

  284. Ο/Η vioannis λέει:

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

    Μήνας:
    =MONTH(A1)
    Δίμηνο:
    =INT(0,95*MONTH(A1)/2)+1
    Τρίμηνο:
    =INT(0,95*MONTH(A1)/3)+1
    Τετράμηνο:
    =INT(0,95*MONTH(A1)/4)+1
    Εξάμηνο:
    =INT(0,95*MONTH(A1)/6)+1
    

    Πιθανά, τα κελιά που θα εισαχθούν οι παραπάνω τύποι, να μορφοποιηθούν αυτόματα με μορφή ημερομηνίας. Άλλαξε τη μορφή των κελιών σε ‘Γενική’ ή μία μορφή αριθμού.
    . . . . . . .
    Οι δύο επόμενες συναρτήσεις θα επιστρέψουν την πρώτη και την τελευταία ημέρα του μήνα της ημερομηνίας Α1:

    =DATE(YEAR(A1);MONTH(A1);1)
    =DATE(YEAR(A1);MONTH(A1)+1;1)-1
    

    Οι δύο επόμενες συναρτήσεις θα επιστρέψουν την πρώτη και την τελευταία ημέρα του δίμηνου της ημερομηνίας Α1:

    =DATE(YEAR(A1);MONTH(A1)-MOD(MONTH(A1)+1;2);1)
    =DATE(YEAR(A1);2+MONTH(A1)-MOD(MONTH(A1)+1;2);1)-1
    

    Οι δύο επόμενες συναρτήσεις θα επιστρέψουν την πρώτη και την τελευταία ημέρα του τρίμηνου της ημερομηνίας Α1:

    =DATE(YEAR(A1);MONTH(A1)-MOD(MONTH(A1)+2;3);1)
    =DATE(YEAR(A1);3+MONTH(A1)-MOD(MONTH(A1)+2;3);1)-1
    

    Οι δύο επόμενες συναρτήσεις θα επιστρέψουν την πρώτη και την τελευταία ημέρα του τετράμηνου της ημερομηνίας Α1:

    =DATE(YEAR(A1);MONTH(A1)-MOD(MONTH(A1)+3;4);1)
    =DATE(YEAR(A1);4+MONTH(A1)-MOD(MONTH(A1)+3;4);1)-1
    

    Τέλος, οι δύο επόμενες συναρτήσεις θα επιστρέψουν την πρώτη και την τελευταία ημέρα του εξάμηνου της ημερομηνίας Α1:

    =DATE(YEAR(A1);MONTH(A1)-MOD(MONTH(A1)+5;6);1)
    =DATE(YEAR(A1);6+MONTH(A1)-MOD(MONTH(A1)+5;6);1)-1
    
  285. Ο/Η chris tziav λέει:

    Κύριε Βαρλάμη καλημέρα,
    Σας συγχαίρω για την πολύ καλή δουλεία που κάνετε και για το πάρα πολύ χρήσιμο ιστολόγιο. Θεωρώ ότι όλοι οι χρήστες σας είμαστε ευγνώμονες. Αντιμετωπίζω το εξής πρόβλημα: Έχω 2 φύλλα εργασίας. Στο fillo1,στην στήλη Α υπάρχουν ονόματα τεχνιτών και στην στήλη Β τύποι εργασίας που διεκπεραίωσαν κατά την εργασία τους. Στο 2ο φύλλο (fillo2) εργασίας η στήλη Α2-Α50 περιέχει όλα τα ονόματα των τεχνιτών και τα κελιά Β1 έως H1 περιέχουν το τύπο εργασίας. Το ζητούμενο είναι ένας τύπος στα B2 έως H50 o οποίος κάνει αναζήτηση στο fillo1 στην στήλη Β την εργασία fillo2! Β2..C2..D2..κ.ο.κ και καταμετρά αυτές που στην στήλη fillo1! Α υπάρχει η τιμή fillo2! Α2..Α3..Α4 κ.ο.κ. Συγχωρέστε με για το μακροσκελές κείμενο, ελπίζω να έγινα κατανοητός, ανεβάζω και ένα φύλλο εργασίας για να σας διευκολύνω (https://drive.google.com/file/d/0BzdjXLY0TodxTWp2ekNjaEM5TDA/view?usp=sharing το ζητούμενο είναι η συμπλήρωση των αριθμών fillo2! B2-H31 με την κόκκινη γραμματοσειρά).

  286. Ο/Η vioannis λέει:

    Chris, μην ανησυχείς, με σαφήνεια είναι το ερώτημά σου. Λοιπόν, στο κελί Β2 του fiilo2 γράψε τον τύπο:

    =SUMPRODUCT((fillo1!$A$1:$A$50=$A2)*(fillo1!$B$1:$B$50=B$1))
    

    Και αντίγραψέ τον προς τα δεξιά και προς τα κάτω, σε όλον τον πίνακα Β2:Η31
    Ο τύπος αυτός φυσικά σε κάποια κελιά, (όπου ο χ τεχνίτης δεν έκανε την ψ εργασία) θα επιστρέψει μηδέν. Αν δεν θέλεις να εμφανίζονται τα μηδενικά αυτά στον πίνακα, αντί για τον παραπάνω τύπο χρησιμοποίησε τον:

    =IF(SUMPRODUCT((fillo1!$A$1:$A$50=$A2)*(fillo1!$B$1:$B$50=B$1))>0;SUMPRODUCT((fillo1!$A$1:$A$50=$A2)*(fillo1!$B$1:$B$50=B$1));"")
    

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

    0;-0;;@
    

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

    texnites =OFFSET(fillo1!$A$1;0;0;COUNTA(fillo1!$A:$A);1)
    ergasia =OFFSET(fillo1!$B$1;0;0;COUNTA(fillo1!$B:$B);1)
    

    και οι δύο παραπάνω τύποι θα γίνουν:

    =SUMPRODUCT((texnites=$A2)*(ergasia=B$1))
    

    και

    =IF(SUMPRODUCT((texnites=$A2)*(ergasia=B$1))>0;SUMPRODUCT((texnites=$A2)*(ergasia=B$1));"")
    

    Σημειώνω ότι οι παραπάνω τύποι είναι συμβατοί με όλες τις εκδόσεις excel. Η λογική πίσω από αυτές τις συναρτήσεις έχει αναλυθεί στο σημείωμα του ιστολογίου ‘Χρήση της συνάρτησης SUMPRODUCT για άθροιση υπό όρους’. Ίσως πλάτειασα λίγο στην απάντησή μου, αλλά μάλλον όχι με άχρηστες πληροφορίες.

  287. Ο/Η chris tziav λέει:

    Σας ευχαριστώ πολύ. Το άρθρο για την sumproduct πολύ χρήσιμο και τιμήθηκε δεόντως!

  288. Ο/Η vioannis λέει:

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

  289. Ο/Η Νίκος λέει:

    Καλημέρα κύριε Γιάννη, θα χρειαστώ μια μικρή βοήθεια σχετικά με τον παρακάτω κώδικα:

    Sub RandomTeams()
        Dim x, y(1 To 10), i As Long
        x = [d5:d24]
        Randomize
        With CreateObject("System.Collections.SortedList")
            For i = 1 To UBound(x, 1)
                .Item(Rnd) = x(i, 1)
            Next
            For i = 0 To 9
                x(i + 1, 1) = .GetByIndex(i)
            Next
            For i = 10 To .Count - 1
                y(i - 9) = .GetByIndex(i)
            Next
            [d30].Resize(10) = x
            [h30].Resize(10) = Application.Transpose(y)
        End With
    End Sub
    

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

    Run-time Error ‘-2146232576 (80131700)’:
    Automation error

    Πατάω Debug και μου κιτρινίζει την σειρά του κώδικα:
    With CreateObject(«System.Collections.SortedList»)

    Μπορείτε να μου εξηγήσετε τι λάθος κάνω;
    Ευχαριστώ πολύ.

  290. Ο/Η vioannis λέει:

    Νίκο, Η κλάση SortedList δεν είναι μέλος της vba, αλλά μέλος της βιβλιοθήκης .NET Framework. Μπορεί να κληθεί από την vba, αλλά μερικές λειτουργίες εξαρτώνται από ποια έκδοση .NET Framework είναι εγκατεστημένη στον υπολογιστή. Δες σχετικές υποδείξεις και βοήθεια της Microsoft:
    https://www.microsoft.com/el-GR/download/details.aspx?id=10624

    http://windows.microsoft.com/en-us/windows-8/net-framework-windows-8

    https://www.microsoft.com/en-us/download/confirmation.aspx?id=1639

    Σχετικά με την SortedList Class, εδώ:
    https://msdn.microsoft.com/en-us/library/system.collections.sortedlist(v=vs.110).aspx

  291. Ο/Η Νίκος λέει:

    Σας ευχαριστώ παρά πολύ κ. Γιαννη για την τόσο διευκρινιστική και αμεση απάντηση, να είστε καλά.

  292. Ο/Η Αντώνης λέει:

    Καλέ μου φίλε. Δεν σε έχω ρωτήσει τίποτα μέχρι τώρα, αλλά η βοήθειά σου είναι ανεκτίμητη. Σε ευχαριστώ πολύ.

  293. Ο/Η vioannis λέει:

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

Τα σχόλια είναι απενεργοποιημένα.