En spennende endring skjedde med XLOOKUP-funksjonen i Office Insiders-oppdateringen som kom 1. november 2019. Mange Insiders vil motta denne oppdateringen når de kommer til jobb mandag 4. november 2019.
Hvis du har brukt den nye XLOOKUP-funksjonen, og hvis du har brukt Match_Mode-argumentet til å lete etter verdien som er bare større eller bare mindre, vil dine eksisterende XLOOKUP-funksjoner bryte.
Den nye endringen til XLOOKUP: If_Not_Found-argumentet, som opprinnelig ble lagt til som et valgfritt sjette argument, er flyttet til å være det fjerde argumentet.
Tenk på følgende formel, som tidligere ba om neste større kamp:
=XLOOKUP(A2,H2:H99,J2:J99,1)
Når du åpner en arbeidsbok med en formel som denne, brytes ikke formelen umiddelbart. Excels intelligente beregning beregner ikke formelen på nytt før du redigerer formelen, eller før du redigerer et av tallene i H2: H99 eller J2: J99.
Når du har redigert oppslagstabellen, beregner Excel imidlertid alle XLOOKUP-funksjonene som brukte tabellen. Før endringen ba du om en omtrentlig kamp som returnerte den neste større verdien. Etter endringen ber du om et nøyaktig samsvar (fordi den opprinnelige formelen ikke har et femte argument), og ved et uhell angir du at hvis et eksakt samsvar ikke blir funnet, vil du sette inn en 1 som resultatet i stedet.
"Det er virkelig et snikende spill med whack-a-mole," sa Bill Jelen, utgiver av.com. Du trykker på F2 for å se på en formel, og formelen slutter å fungere. Andre formler i regnearket kan se ut til å fortsette å fungere, men de er en tikkende tidsbombe som venter på å bli feil når en beregning utløses. "
For å se endringen som skjer, se fra 0:35 til 0:55 andre merke i denne videoen:
Se på video
Når du registrerer deg for Office Insiders-programmet, står det i avsnitt 7c i vilkårene at "Vi kan frigjøre tjenestene eller deres funksjoner i en forhåndsvisning eller betaversjon, som kanskje ikke fungerer riktig eller på samme måte som den endelige versjonen kan fungere . "
Excel-teamet anbefaler at du må justere XLOOKUP-formler som brukte de valgfrie argumentene. Hvis du har brukt XLOOKUP ofte, vil følgende kode undersøke en arbeidsbok og identifisere mulige problemformler.
Grunnleggende versjon
Følgende kode ser etter formelcellene som begynner med =XLOOKUP
og inneholder mer enn 2 kommaer.
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-versjon
Følgende kode bruker Regex for å finne flere XLOOKUP-funksjoner som brukes i samme formel, eller som brukes med andre funksjoner, kan inneholde flere kommaer.
* Du må legge til Microsoft VBScript Regular Expressions-referanse i Visual Basic for å bruke denne koden (Verktøy> Referanser i 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