Περίπτωση ποινής στο Excel - Συμβουλές για το Excel

Ο Neethu έθεσε τη σημερινή ερώτηση σε ένα σχόλιο στο YouTube:

Μπορεί μια μακροεντολή να αλλάξει κείμενο σε Περίπτωση ποινής στο Excel;

Είναι παράξενο: Το Excel γνωρίζει ΑΝΩ, χαμηλότερο και σωστό, αλλά δεν υποστηρίζει τις άλλες περιπτώσεις που υποστηρίζονται από το Word: Sentence Case ή το TOGGLE CASE.

Η επιλεγμένη περίπτωση κειμένου μπορεί εύκολα να αλλάξει στο Microsoft Word χρησιμοποιώντας την εσωτερική λειτουργία που ονομάζεται Change Case.

Αλλαγή επιλογών εντολών περίπτωσης στο Microsoft Word.

Μπορείτε απλά να κάνετε κλικ:

  • "Περίπτωση ποινής" για κεφαλαιοποίηση του πρώτου γράμματος μιας πρότασης και αφήνοντας όλα τα άλλα γράμματα ως πεζά.
  • "πεζά" για να εξαιρέσετε κεφαλαία γράμματα από το κείμενό σας.
  • "UPPERCASE" για χρήση κεφαλαίων σε όλα τα γράμματα.
  • "Κεφαλαιοποιήστε κάθε λέξη" για να κεφαλαιοποιήσετε το πρώτο γράμμα κάθε λέξης και να αφήσετε τα άλλα γράμματα πεζά.
  • "TOGGLE cASE" για εναλλαγή μεταξύ δύο προβολών περιπτώσεων.

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

  1. LOWER() λειτουργία για τον αποκλεισμό κεφαλαίων γραμμάτων.
  2. UPPER() λειτουργία για κεφαλαιοποίηση όλων των γραμμάτων.
  3. PROPER() λειτουργία για κεφαλαιοποίηση του πρώτου γράμματος κάθε λέξης.

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

Επιλέξτε Εφαρμογή υπόθεσης με τύπους Excel.

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

  1. Πάρτε το πρώτο γράμμα του δεδομένου κειμένου χρησιμοποιώντας τη συνάρτηση LEFT () και μετατρέψτε το σε κεφαλαία χρησιμοποιώντας τη συνάρτηση UPPER ():

    =UPPER(LEFT(A1,1))

  2. Και πάρτε το υπόλοιπο κείμενο συνδυάζοντας τις λειτουργίες RIGHT () και LEN () και μετατρέψτε το σε πεζά χρησιμοποιώντας τη συνάρτηση LOWER ():

    =LOWER(RIGHT(A1,LEN(A1)-1))

  3. Τέλος, συνδυάστε αυτά τα δύο αποτελέσματα χρησιμοποιώντας τη συνάρτηση CONCAT ():

    =CONCAT(UPPER(LEFT(A1,1)),LOWER(RIGHT(A1,LEN(A1)-1)))

Αυτό θα μετατρέψει το κείμενο σε περίπτωση πρότασης. Μπορείτε επίσης να το δοκιμάσετε για όλο το κείμενο με κεφαλαία γράμματα που εμφανίζεται στο κελί A2.

Τι γίνεται αν υπάρχουν περισσότερες από μία προτάσεις σε ένα κελί που θέλετε να αλλάξετε σε Περίπτωση ποινής;

Πολλαπλές προτάσεις σε ένα κελί.

Μια επιλογή για να γίνει αυτό θα μπορούσε να είναι η χρήση του VBA για να γίνει αυτός ο μετασχηματισμός.

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

Function SENTENCECASE(txt As String) Dim resArr() As String Dim newArr1(), newArr2(), newArr3() As Variant ReDim resArr(0) resArr(0) = txt newArr1 = splitAndTransform(resArr(0), ".") If Not IsEmpty(newArr1) Then For Each par1 In newArr1 newArr2 = splitAndTransform(par1, "?") If Not IsEmpty(newArr2) Then For Each par2 In newArr2 newArr3 = splitAndTransform(par2, "!") If Not IsEmpty(newArr3) Then For Each par3 In newArr3 resArr(UBound(resArr)) = par3 ReDim Preserve resArr(UBound(resArr) + 1) Next par3 End If Next par2 End If Next par1 End If SENTENCECASE = Join(resArr, " ") End Function

SENTENCECASE()Η συνάρτηση χρησιμοποιεί μια συνάρτηση βοηθού που καλείται splitAndTransform()να χωρίσει προτάσεις και να μετατρέψει την υπόθεση από τον δεδομένο οριοθέτη. splitAndTransform()είναι μια επαναχρησιμοποιήσιμη συνάρτηση VBA σε αυτό το έργο, οπότε γράφεται ως ξεχωριστή συνάρτηση βοηθού.

Function splitAndTransform(text, delimiter) Dim tmpArr Dim newArr tmpArr = Split(text, delimiter) If UBound(tmpArr)>= 0 Then ReDim newArr(UBound(tmpArr)) For i = 0 To UBound(tmpArr) If tmpArr(i) "" Then newArr(i) = Trim(tmpArr(i)) newArr(i) = UCase(Left(newArr(i), 1)) & _ LCase(Right(newArr(i), Len(newArr(i)) - 1)) If Not isPuncMarked(newArr(i)) Then newArr(i) = newArr(i) & delimiter End If End If Next i Else ReDim newArr(0) End If splitAndTransform = newArr End Function

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

Function isPuncMarked(sentence) As Boolean Dim rightMost As String rightMost = Right(sentence, 1) If rightMost = "." Or _ rightMost = "?" Or _ rightMost = "!" Then isPuncMarked = True Else isPuncMarked = False End If End Function

Εδώ είναι το αποτέλεσμα.

Αποτέλεσμα SENTENCECASE UDF.

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

Sub doSentenceCase() Dim rng As Range Dim cll As Range Dim resArr() As String Dim newArr1(), newArr2(), newArr3() As Variant Set rng = Selection For Each cll In rng.Cells ReDim resArr(0) resArr(0) = cll.Value newArr1 = splitAndTransform(cll.Value, ".") If Not IsEmpty(newArr1) Then For Each par1 In newArr1 newArr2 = splitAndTransform(par1, "?") If Not IsEmpty(newArr2) Then For Each par2 In newArr2 newArr3 = splitAndTransform(par2, "!") If Not IsEmpty(newArr3) Then For Each par3 In newArr3 resArr(UBound(resArr)) = par3 ReDim Preserve resArr(UBound(resArr) + 1) Next par3 End If Next par2 End If Next par1 End If cll.Value = Join(resArr, " ") Next cll End Sub

ενδιαφέροντα άρθρα...