Στο excel, υπάρχουν στιγμές που θέλουμε να ανατρέψουμε πλήρως το κείμενο ή τη σειρά τους με κώδικα VBA. Μπορεί να υπάρχουν διάφορες απαιτήσεις, όπως εξαγωγή περιεχομένου αντίστροφης κυψέλης, σειρά αντίστροφης κυψέλης κ.ο.κ.
Σε αυτό το άρθρο, θα μάθουμε τα εξής:
- Πώς να αποκτήσετε αντίστροφο περιεχόμενο κυττάρων;
- Πώς να πάρετε όλες τις λέξεις με αντίστροφη σειρά από ένα κελί;
- Πώς να αντιστρέψετε τη σειρά στήλης;
- Πώς να λάβετε αντίστροφους αριθμούς μόνο από κείμενο;
- Πώς να αντιστρέψετε το περιεχόμενο κυττάρων του activecell;
Πώς να αποκτήσετε αντίστροφο περιεχόμενο κυττάρων;
Στο Excel υπάρχουν απαιτήσεις για αντιστροφή του κειμένου ή των αριθμών στα κελιά π.χ. "Αγγλικά" σε "hsilgne"
Ακολουθεί το στιγμιότυπο δεδομένων πριν από την έξοδο:
Ακολουθεί το στιγμιότυπο της απαίτησης εξόδου στη στήλη Β:
Για να λάβετε την παραπάνω έξοδο, πρέπει να ακολουθήσετε τα παρακάτω βήματα για να ξεκινήσετε τον επεξεργαστή VB
- Κάντε κλικ στην καρτέλα Προγραμματιστής
- Από την ομάδα κωδικών, επιλέξτε Visual Basic
- Αντιγράψτε τον παρακάτω κώδικα στην τυπική μονάδα
Λειτουργία CompleteReverse (rCell As Range, Optional IsText As Boolean) Dim i As Integer Dim StrNewTxt As String Dim strOld As String strOld = Trim (rCell) For i = 1 To Len (strOld) StrNewTxt = Mid (strOld, i, 1) & StrNewTxt Next i If IsText = False then CompleteReverse = CLng (StrNewTxt) Else CompleteReverse = StrNewTxt End If End End
- Στο κελί Β1 ο τύπος θα είναι
- = CompleteReverse (A1, TRUE)
Πώς να πάρετε όλες τις λέξεις με αντίστροφη σειρά από ένα κελί;
Θα έχουμε δύο κωδικούς για να βρούμε τη λύση. Για να λάβουμε όλες τις λέξεις σε πλήρη αντίστροφη σειρά, θα αντιγράψουμε και θα επικολλήσουμε τον ακόλουθο κώδικα στη μονάδα
Λειτουργία ReverseOrder1 (Rng As Range) Dim Val As Variant, Counter As Integer, R () As Variant Val = Split (Application.WorksheetFunction.Substitute (Rng.Value, "", ""), ",") ReDim R (LBound (Val) Προς UBound (Val)) Για Counter = LBound (Val) To UBound (Val) R (UBound (Val) - Counter) = Val (Counter) Next Counter ReverseOrder1 = Join (R, ",") End Function
- Στο κελί C1 ο τύπος θα είναι
- = ReverseOrder1 (A1)
Ας ρίξουμε μια ματιά στον δεύτερο κωδικό VBA:
Λειτουργία ReverseOrder2 (Rng As Range) As String Dim Counter As Long, R () As String, temp As String R = Split (Replace (Rng.Value2, "", ""), ",") For Counter = LBound (R ) Προς (UBound (R) - 1) \ 2 temp = R (UBound (R) - Counter) R (UBound (R) - Counter) = R (Counter) R (Counter) = temp Next Counter ReverseOrder2 = Join (R , ",") Λειτουργία λήξης
- Στο κελί D1 ο τύπος θα είναι
- = ReverseOrder2 (A1)
Πώς να αντιστρέψετε τη σειρά στήλης;
Σε περίπτωση που έχετε μια απαίτηση να αντιστρέψετε τη σειρά δεδομένων στήλης, θα πρέπει να ρίξετε μια πιο προσεκτική ματιά στον παρακάτω κώδικα:
Sub ReverseColumnOrder () Dim wBase As Worksheet, wResult As Worksheet, i As Long, x As Long Set wBase = Sheets ("Sheet1") Set wResult = Sheets ("Sheet2") Application.ScreenUpdating = False With wBase For i = .Range ("A1"). CurrentRegion.Rows.Count To 1 Step -1 x = x + 1 .Range ("A1"). CurrentRegion.Rows (i). Copy wResult.Range ("A" & x) Next i End Με Application.ScreenUpdating = True End Sub
Ο παραπάνω κώδικας θα ελέγξει τα δεδομένα στη στήλη Α στο φύλλο 1 και στη συνέχεια θα αντιστρέψει τη σειρά στο φύλλο 2. Ανατρέξτε στην παρακάτω εικόνα
Πώς να λάβετε αντίστροφους αριθμούς μόνο από κείμενο;
Παράδειγμα: "Excel (123) tip" είναι το περιεχόμενο του κελιού
Απαιτείται έξοδος: "excel (321) tip"
Στο excel, μπορεί να υπάρχουν πολλοί τρόποι για να έχετε την ίδια έξοδο και το ίδιο ισχύει για την εξεύρεση λύσης με VBA UDF. Για αυτό το παράδειγμα, θα δείξουμε 5 διαφορετικούς τρόπους.
Αντιγράψτε και επικολλήστε τους ακόλουθους κωδικούς στην τυπική μονάδα:
Λειτουργία ReverseNumber1 (v As Variant) As String Dim iSt As Integer, iEnd As Integer, sNum As String, sTemp As String iSt = InStr (v, "(") iEnd = InStr (v, ")") Εάν iSt = 0 Or iEnd = 0 Στη συνέχεια ReverseNumber1 = v: Έξοδος από τη λειτουργία sNum = Mid (v, iSt + 1, iEnd - iSt - 1) Για i = Len (sNum) έως 1 βήμα -1 sTemp = sTemp & Mid (sNum, i, 1) Επόμενο i ReverseNumber1 = Αριστερά (v, iSt) & sTemp & Mid (v, iEnd, 5 5) Λειτουργία λήξης ReverseNumber2 (s As String) As String Dim i &, t $, ln & t = s: ln = InStr (s , ")") - 1 Για i = InStr (s, "(") + 1 Προς InStr (s, ")") - 1 Mid (t, i, 1) = Mid (s, ln, 1) ln = ln - 1 Επόμενο ReverseNumber2 = t Λειτουργία λήξης ReverseNumber3 (c00) c01 = Split (Split (c00, ")") (0), "(") (1) ReverseNumber3 = Replace (c00, "(" & c01 & " ) "," ("& StrReverse (c01) &") ") Λειτουργία λήξης ReverseNumber4 (c00) ReverseNumber4 = Αριστερά (c00, InStr (c00," (")) & StrReverse (Mid (Αριστερά (c00, _ InStr ( c00, ")") - 1), InStr (c00, "(") + 1)) & Mid (c00, InStr (c00, ")")) Λειτουργία λήξης ReverseNumber5 (s As String ) Dim m As Object With CreateObject ("VBScript.Regexp") .Global = True .Pattern = "(\ D*) (\ d*)" Για κάθε m In. Εκτέλεση 0) & StrReverse (m.submatches (1)) Next End With Set m = Nothing End Function
- Στο κελί Β2, ο τύπος θα είναι
- = ReverseNumber1 (A2)
Μπορούμε να δοκιμάσουμε τους άλλους 4 κωδικούς με τον ακόλουθο τύπο:
1. = ReverseNumber2 (A2)
2. = ReverseNumber3 (A2)
3. = ReverseNumber4 (A2)
4. = ReverseNumber5 (A2)
Όλοι οι παραπάνω 5 κώδικες μακροεντολών θα παρέχουν την ίδια έξοδο. ωστόσο; μπορεί κανείς να υιοθετήσει τον κώδικα με τον οποίο είναι πιο άνετα.
Πώς να αντιστρέψετε το περιεχόμενο κυττάρων του activecell;
Σε περίπτωση που θέλετε μια μακροεντολή να τρέχει μόνο στο activecell και στη συνέχεια να αντιστρέψετε το περιεχόμενο. Αυτός ο κωδικός δεν θα εκτελεστεί σε κελί που περιέχει τύπο.
Θα χρησιμοποιήσουμε τον ακόλουθο κώδικα:
Sub Reverse_Cell_Contents () 'αυτή η μακροεντολή θα τρέξει μόνο σε activecell' --- Σχόλιο Εάν δεν ActiveCell.HasFormula Στη συνέχεια sRaw = ActiveCell.Text sNew = "" Για j = 1 προς Len (sRaw) sNew = Mid (sRaw, j, 1 ) + sNew Next j ActiveCell.Value = sNew End If End Sub
Εάν ο δρομέας βρίσκεται στο κελί A1, το οποίο περιέχει "exceltip", τότε η παραπάνω μακροεντολή θα το μετατρέψει σε "pitlecxe".
Συμπέρασμα: Μπορούμε να έχουμε τόσα πολλά UDF για μία λύση στο Microsoft Excel. Αυτό το UDF θα λειτουργήσει από την έκδοση 2003 έως το 2013.
Αν σας άρεσαν τα ιστολόγια μας, μοιραστείτε το με τους φίλους σας στο Facebook. Επίσης, μπορείτε να μας ακολουθήσετε στο Twitter και το Facebook.
Θα θέλαμε πολύ να σας ακούσουμε, ενημερώστε μας πώς μπορούμε να βελτιώσουμε, να συμπληρώσουμε ή να καινοτομήσουμε το έργο μας και να το κάνουμε καλύτερο για εσάς. Γράψτε μας στο ιστοσελίδα email