Σελ. 1 από 2 12 ΤελευταίαΤελευταία
Εμφάνιση 1-15 από 16
  1. #1
    Εγγραφή
    01-11-2019
    Ηλικία
    59
    Μηνύματα
    19
    Downloads
    0
    Uploads
    0
    ISP
    HOL
    Γνωρίζει κάποιος, πώς πρέπει να γράψω στο Excel δύο συναρτήσεις που να κάνουν τα εξής;

    1. Η μία να αποδίδει μία πρόταση ενός άλλου κελιού, έχοντας όμως αφαιρέσει τα σημεία στίξης.

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

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

    Ευχαριστώ!
    Τελευταία επεξεργασία από το μέλος Nikrom : 19-11-19 στις 11:16.

  2. #2
    Το avatar του μέλους AndreasN
    AndreasN Guest
    Γίνεται με πολλές ένθετες SUBSTITUDE. Στην πρώτη περίπτωση αντικαθιστώντας τα σημεία στίξης με κενά, στην δεύτερη, αντικαθιστώντας τα τονισμένα γράμματα με άτονα.

  3. #3
    Εγγραφή
    06-07-2005
    Περιοχή
    Νέα Υόρκη
    Ηλικία
    49
    Μηνύματα
    11.652
    Downloads
    6
    Uploads
    2
    Τύπος
    Cable
    Ταχύτητα
    300 Mbps down/10 Mbps up
    ISP
    Spectrum
    Δεν αναφέρεις σε ποια γλώσσα, αλλά οι περισσότερες διαχειρίζονται τα strings περίπου σαν arrays, οπότε δεν έχεις λόγο να τη χωρίσεις πρώτα.

  4. #4
    Εγγραφή
    01-11-2019
    Ηλικία
    59
    Μηνύματα
    19
    Downloads
    0
    Uploads
    0
    ISP
    HOL
    Ευχαριστώ για τις απαντήσεις. Συγνώμη, ξέχασα να πω ότι τη θέλω για το Excel. Οπότε αν δεν κάνω λάθος, είναι Βίζουαλ Μπέισικ.

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

    Πώς θα έγραφα τρεις τέτοιες ένθετες, ώστε να καταλάβω πώς να φτιάξω περισσότερες;

  5. #5
    Το avatar του μέλους AndreasN
    AndreasN Guest
    Π.χ. ο τύπος =SUBSTITUTE(A1;"ά";"α") θα αντικαταστήσει το ά με το α. Ο τύπος =SUBSTITUTE(SUBSTITUTE(A1;"ά";"α");"έ";"ε"), στην πρόταση που θα προκύψει χωρίς το ά, θα αντικαταστήσει το έ με το ε κ.ο.κ.

    Επειδή η SUBSTITUTE κάνει διάκριση πεζών-κεφαλαίων, χρειαζόμαστε 7 SUBSTITUDE για τα πεζά, συν άλλες 7 για τα κεφαλαία, συν 2 για τις περιπτώσεις ΐ και ΰ, που θα αντικαθίστανται με το ϊ και ϋ αντιστοίχως, συνολικά 16 (στο παράδειγμα έχουμε 2, διότι 2 είναι τα γράμματα). Ένα μακρινάρι δηλαδή με την μια SUBSTITUDE ένθετη μέσα στην άλλη.

    Το ανάλογο θα γίνει με τα σημεία στίξης, μόνο που θα τα αντικαθιστάς με κενά, δηλαδή "".

  6. #6
    Εγγραφή
    01-11-2019
    Ηλικία
    59
    Μηνύματα
    19
    Downloads
    0
    Uploads
    0
    ISP
    HOL
    Ευχαριστώ πολύ φίλε μου ΑνδρέαΝ. Τα κατάλαβα!
    Θα το βάλω άμεσα σε εφαρμογή στο Μποτ μου.

    Τελικά αυτό το φόρουμ αξίζει πολύ!

  7. #7
    Εγγραφή
    13-11-2011
    Περιοχή
    Χολαργός
    Ηλικία
    37
    Μηνύματα
    1.446
    Downloads
    1
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    24000 / 4500
    ISP
    Wind
    DSLAM
    Wind - ΧΟΛΑΡΓΟΣ
    Path Level
    Interleaved
    Παράθεση Αρχικό μήνυμα από Nikrom Εμφάνιση μηνυμάτων
    Ευχαριστώ για τις απαντήσεις. Συγνώμη, ξέχασα να πω ότι τη θέλω για το Excel. Οπότε αν δεν κάνω λάθος, είναι Βίζουαλ Μπέισικ.

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

    Πώς θα έγραφα τρεις τέτοιες ένθετες, ώστε να καταλάβω πώς να φτιάξω περισσότερες;
    Δεν είναι Visual Basic, είναι Visual Basic for Applications (VBA) η οποία διαφέρει από την Visual Basic. Ναι μεν έχουν ίδια σύνταξη αλλά δεν έχουν ίδιες λειτουργίες.

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

    Κώδικας:
        Dim str1 As String
        str1 = "αΆ/ε\\έιίΪ,ΐυΎϋΰ.οΟΩω"
        
        str1 = Replace(str1, "α", "α", , , vbTextCompare)
        str1 = Replace(str1, "ά", "α", , , vbTextCompare)
        str1 = Replace(str1, "ι", "ι", , , vbTextCompare)
        str1 = Replace(str1, "ί", "ι", , , vbTextCompare)
        str1 = Replace(str1, "ϊ", "ι", , , vbTextCompare)
        str1 = Replace(str1, "ΐ", "ι", , , vbTextCompare)
        str1 = Replace(str1, "η", "η", , , vbTextCompare)
        str1 = Replace(str1, "ή", "η", , , vbTextCompare)
        str1 = Replace(str1, "υ", "υ", , , vbTextCompare)
        str1 = Replace(str1, "ύ", "υ", , , vbTextCompare)
        str1 = Replace(str1, "ο", "ο", , , vbTextCompare)
        str1 = Replace(str1, "ό", "ο", , , vbTextCompare)
        str1 = Replace(str1, "ω", "ω", , , vbTextCompare)
        str1 = Replace(str1, "ώ", "ω", , , vbTextCompare)
        str1 = Replace(str1, ".", "", , , vbTextCompare)
        str1 = Replace(str1, ",", "", , , vbTextCompare)
        str1 = Replace(str1, ":", "", , , vbTextCompare)
        str1 = Replace(str1, ";", "", , , vbTextCompare)
        str1 = Replace(str1, "\\", "", , , vbTextCompare)
        str1 = Replace(str1, "/", "", , , vbTextCompare)
        
        Debug.Print (str1)
    Αν και αυτό δουλεύει δεν είναι η καλύτερη, υπολογιστικά, λύση γιατί για κάθε αντικατάσταση διαβάζει όλο το text κάθε φορά.

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

    Κώδικας:
    Function NormalizeString(str) As String
        Dim ret As String
        Remove = Array(".", ",", ":", ";", "\", "/")
        
        For i = 1 To Len(str)
            c = Mid(str, i, 1)
            c = Replace(c, "α", "α", , , vbTextCompare)
            c = Replace(c, "ά", "α", , , vbTextCompare)
            c = Replace(c, "ε", "ε", , , vbTextCompare)
            c = Replace(c, "έ", "ε", , , vbTextCompare)
            c = Replace(c, "η", "η", , , vbTextCompare)
            c = Replace(c, "ή", "η", , , vbTextCompare)
            c = Replace(c, "ι", "ι", , , vbTextCompare)
            c = Replace(c, "ί", "ι", , , vbTextCompare)
            c = Replace(c, "ϊ", "ι", , , vbTextCompare)
            c = Replace(c, "ΐ", "ι", , , vbTextCompare)
            c = Replace(c, "ο", "ο", , , vbTextCompare)
            c = Replace(c, "ό", "ο", , , vbTextCompare)
            c = Replace(c, "υ", "υ", , , vbTextCompare)
            c = Replace(c, "ύ", "υ", , , vbTextCompare)
            c = Replace(c, "ϋ", "υ", , , vbTextCompare)
            c = Replace(c, "ΰ", "υ", , , vbTextCompare)
            c = Replace(c, "ω", "ω", , , vbTextCompare)
            c = Replace(c, "ώ", "ω", , , vbTextCompare)
            
            For Each r In Remove
                If c = r Then
                    c = ""
                    GoTo AfterRemove
                End If
            Next
    AfterRemove:
            
            ret = ret + c
        Next
        
        NormalizeString = ret
    End Function

  8. #8
    Εγγραφή
    01-11-2019
    Ηλικία
    59
    Μηνύματα
    19
    Downloads
    0
    Uploads
    0
    ISP
    HOL
    Ευχαριστώ κι εσένα MitsakoGR, αν και η συνάρτηση τού φίλου ΑνδρέαΜ δουλεύει πολύ καλά.

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

    Επειδή όμως θέλω να μαθαίνω, οφείλω να πω ότι ΔΕΝ ΞΕΡΩ πώς ή πού θα μπορούσα να γράψω τις δύο δικές σου συναρτήσεις, δεδομένου ότι δεν είμαι προγραμματιστής, και μόνο εμπειρικά και με τη βοήθεια φίλων έχω φτιάξει όσα έφτιαξα. Και οι δύο παραπάνω κώδικες, μοιάζουν περισσότερο με μακροεντολές παρά με συναρτήσεις κελιού. (π.χ. δεν βλέπω να έχει Sub). Πώς θα μπορούσα λοιπόν να τους χρησιμοποιήσω, δεδομένου ότι δεν ξέρω να προγραμματίζω πέραν συναρτήσεων κελιού και μακροεντολών;

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

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

  9. #9
    Εγγραφή
    13-11-2011
    Περιοχή
    Χολαργός
    Ηλικία
    37
    Μηνύματα
    1.446
    Downloads
    1
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    24000 / 4500
    ISP
    Wind
    DSLAM
    Wind - ΧΟΛΑΡΓΟΣ
    Path Level
    Interleaved
    Kατάλαβα ότι έψαχνες μακροεντολή, για αυτό σου έστειλα την μακροεντολη. Αν θέλεις να το κάνεις απευθείας σε κελί τότε αυτό που πρότεινε ο AndreasN μάλλον είναι το καλύτερο δυνατό.

  10. #10
    Εγγραφή
    01-11-2019
    Ηλικία
    59
    Μηνύματα
    19
    Downloads
    0
    Uploads
    0
    ISP
    HOL
    Ναι, αυτή τη φορά συνάρτηση κελιού έψαχνα. Παρόμοια μακροεντολή είχα άλλο είδος και χρησιμοποιούσα. Αλλά με παραξένεψε που δεν είχε "Sub" για μακροεντολή.

    Πάντως θα τη δοκιμάσω από περιέργεια.

  11. #11
    Εγγραφή
    13-11-2011
    Περιοχή
    Χολαργός
    Ηλικία
    37
    Μηνύματα
    1.446
    Downloads
    1
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    24000 / 4500
    ISP
    Wind
    DSLAM
    Wind - ΧΟΛΑΡΓΟΣ
    Path Level
    Interleaved
    Παράθεση Αρχικό μήνυμα από Nikrom Εμφάνιση μηνυμάτων
    Ναι, αυτή τη φορά συνάρτηση κελιού έψαχνα. Παρόμοια μακροεντολή είχα άλλο είδος και χρησιμοποιούσα. Αλλά με παραξένεψε που δεν είχε "Sub" για μακροεντολή.

    Πάντως θα τη δοκιμάσω από περιέργεια.
    Απλά το έγραψα χωρίς το Sub (την πρώτη). Αν θέλεις να την βάλεις να τρέξει θα πρέπει να την βάλεις σε Sub ή Function.

  12. #12
    Εγγραφή
    01-11-2019
    Ηλικία
    59
    Μηνύματα
    19
    Downloads
    0
    Uploads
    0
    ISP
    HOL
    Α, ωραία! Ευχαριστώ που μου έλυσες την απορία.

  13. #13
    Εγγραφή
    16-05-2008
    Μηνύματα
    324
    Downloads
    3
    Uploads
    0
    Τύπος
    ADSL2+
    Ταχύτητα
    16384/1024
    ISP
    Forthnet
    Router
    Thomson
    Path Level
    Interleaved
    αν μιλάμε για κείμενο μέσα σε καποιο κελί του excel, υπάρχει ένας πολύ πιο απλός τρόπος να έχεις το ίδιο κείμενο χωρίς τόνους, από το να γράψεις κώδικα.

    αν λοιπόν στο κελί A1 υπάρχει η φράση "Τονισμένη φράση", τότε στο B1 γράφεις =PROPER(UPPER(A1)) και το αποτέλεσμα που παίρνεις, είναι το "Τονισμενη Φραση"
    "

  14. #14
    Εγγραφή
    01-11-2019
    Ηλικία
    59
    Μηνύματα
    19
    Downloads
    0
    Uploads
    0
    ISP
    HOL
    Ευχαριστώ πολύ!
    Θα το δοκιμάσω!

  15. #15
    Το avatar του μέλους AndreasN
    AndreasN Guest
    Παράθεση Αρχικό μήνυμα από gavrinos Εμφάνιση μηνυμάτων
    αν μιλάμε για κείμενο μέσα σε καποιο κελί του excel, υπάρχει ένας πολύ πιο απλός τρόπος να έχεις το ίδιο κείμενο χωρίς τόνους, από το να γράψεις κώδικα.

    αν λοιπόν στο κελί A1 υπάρχει η φράση "Τονισμένη φράση", τότε στο B1 γράφεις =PROPER(UPPER(A1)) και το αποτέλεσμα που παίρνεις, είναι το "Τονισμενη Φραση"
    "
    Ο τύπος αυτός δεν καταργεί τα τονισμένα κεφαλαία. Αν το κελί γράφει " Άτονη φράση ", το αποτέλεσμα θα είναι " Άτονη Φραση ". Όσο για την κεφαλαιοποίηση του πρώτου γράμματος κάθε λέξης, δεν κατάλαβα να ζητήθηκε κάτι τέτοιο από τον ενδιαφερόμενο.

Σελ. 1 από 2 12 ΤελευταίαΤελευταία

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας