Μια συναρπαστική αλλαγή συνέβη στη συνάρτηση XLOOKUP στην ενημέρωση του Office Insiders που κυκλοφόρησε την 1η Νοεμβρίου 2019. Πολλοί Insiders θα λάβουν αυτήν την ενημέρωση καθώς φτάνουν να εργαστούν τη Δευτέρα 4 Νοεμβρίου 2019.
Εάν χρησιμοποιείτε τη νέα συνάρτηση XLOOKUP και εάν έχετε χρησιμοποιήσει το όρισμα Match_Mode για να αναζητήσετε την τιμή που είναι πολύ μεγαλύτερη ή απλώς μικρότερη, οι υπάρχουσες συναρτήσεις XLOOKUP σας πρόκειται να σπάσουν.
Η νέα αλλαγή στο XLOOKUP: το όρισμα If_Not_Found, το οποίο αρχικά προστέθηκε ως προαιρετικό έκτο όρισμα, μετακινήθηκε στο τέταρτο όρισμα
Εξετάστε τον ακόλουθο τύπο, ο οποίος προηγουμένως ζητούσε τον επόμενο μεγαλύτερο αγώνα:
=XLOOKUP(A2,H2:H99,J2:J99,1)
Όταν ανοίγετε ένα βιβλίο εργασίας με έναν τύπο όπως αυτό, ο τύπος δεν σπάει αμέσως. Ο έξυπνος υπολογισμός του Excel δεν επαναπροσδιορίζει τον τύπο έως ότου επεξεργαστείτε τον τύπο ή έως ότου επεξεργαστείτε έναν από τους αριθμούς σε H2: H99 ή J2: J99.
Ωστόσο, μόλις επεξεργαστείτε τον πίνακα αναζήτησης, τότε το Excel επανυπολογίζει όλες τις συναρτήσεις XLOOKUP που χρησιμοποίησαν τον πίνακα. Πριν από την αλλαγή, ζητούσατε μια Κατά προσέγγιση αντιστοίχιση που επέστρεψε την επόμενη μεγαλύτερη τιμή. Μετά την αλλαγή, ζητάτε ένα ακριβές ταίριασμα (επειδή ο αρχικός τύπος σας δεν έχει ένα πέμπτο όρισμα) και επίσης κατά λάθος προσδιορίζοντας ότι εάν δεν βρεθεί ακριβής αντιστοίχιση, τότε θέλετε να εισαγάγετε ένα 1 ως αποτέλεσμα.
"Είναι πραγματικά ένα ύπουλο παιχνίδι whack-a-mole", δήλωσε ο Bill Jelen, εκδότης του.com. Πατάτε το F2 για να δείτε έναν τύπο και ο τύπος σταματά να λειτουργεί. Άλλοι τύποι στο φύλλο εργασίας μπορεί να φαίνονται να συνεχίζουν να λειτουργούν, αλλά είναι μια ωρολογιακή βόμβα που περιμένει να γίνει λάθος όταν ενεργοποιείται ένας επανάληψη.
Για να δείτε την αλλαγή που συμβαίνει, παρακολουθήστε από το δευτερόλεπτο από 0:35 έως 0:55 σε αυτό το βίντεο:
Δες το βίντεο
Όταν εγγραφείτε στο πρόγραμμα Office Insiders, η παράγραφος 7γ των Όρων και Προϋποθέσεων αναφέρει ότι "Ενδέχεται να κυκλοφορήσουμε τις Υπηρεσίες ή τις δυνατότητές τους σε μια προεπισκόπηση ή σε έκδοση beta, η οποία ενδέχεται να μην λειτουργεί σωστά ή με τον ίδιο τρόπο που μπορεί να λειτουργεί η τελική έκδοση "
Η ομάδα του Excel συμβουλεύει ότι πρέπει να προσαρμόσετε τυχόν τύπους XLOOKUP που χρησιμοποιούν τα προαιρετικά ορίσματα. Εάν χρησιμοποιείτε συχνά το XLOOKUP, ο παρακάτω κώδικας θα εξετάσει ένα βιβλίο εργασίας και θα εντοπίσει πιθανούς τύπους προβλημάτων.
Βασική έκδοση
Ο κώδικας που ακολουθεί αναζητά τα κελιά τύπου που ξεκινούν =XLOOKUP
και περιέχουν περισσότερα από 2 κόμματα.
Sub findXLOOKUPs() Dim sht As Worksheet Dim cll As Range Dim foundCells As String Set sht = ActiveSheet For Each cll In sht.UsedRange If cll.HasFormula Then If InStr(cll.Formula, "=XLOOKUP") = 1 Then If UBound(Split(cll.Formula, ","))> 2 Then foundCells = foundCells & vbCrLf & cll.Address End If End If End If Next cll If foundCells = "" Then MsgBox sht.Name & " is not affected with XLOOKUP function structure update.", vbOKOnly + vbInformation, "No errors" Else MsgBox sht.Name & " is likely affected with XLOOKUP function structure update. Please check formulas in the following cells:" & foundCells, vbOKOnly + vbExclamation, "Error(s) found" End If End Sub
Έκδοση Regex
Ο ακόλουθος κώδικας χρησιμοποιεί το Regex για να βρει πολλές συναρτήσεις XLOOKUP που χρησιμοποιούνται στον ίδιο τύπο ή που χρησιμοποιείται με άλλες συναρτήσεις μπορεί να περιέχει επιπλέον κόμματα.
* Πρέπει να προσθέσετε το Microsoft VBScript Regular Expressions αναφοράς στη Visual Basic για να χρησιμοποιήσετε αυτόν τον κωδικό (Εργαλεία> Αναφορές σε VBA).
Sub advancedFindXLOOKUPs() Dim sht As Worksheet Dim cll As Range Dim rgx As RegExp Dim rMatches As Object Dim rMatch As Object Dim foundCells As String Set sht = ActiveSheet Set rgx = New RegExp With rgx .Pattern = "XLOOKUP(((^,))*,)(3,)(^,)*)" .MultiLine = False .IgnoreCase = True .Global = True End With For Each cll In sht.UsedRange If cll.HasFormula Then Set rMatches = rgx.Execute(cll.Formula) If rMatches.Count Then For Each rMatch In rMatches 'Debug.Print rMatch foundCells = foundCells & vbCrLf & cll.Address Next rMatch End If End If Next cll If foundCells = "" Then MsgBox sht.Name & " is not affected with XLOOKUP function structure update.", vbOKOnly + vbInformation, "No errors" Else MsgBox sht.Name & " is likely affected with XLOOKUP function structure update. Please check formulas in the following cells:" & foundCells, vbOKOnly + vbExclamation, "Error(s) found" End If End Sub