ListLogic

Je wilt soms wel eens lijstjes vergelijken: Welke values komen in beide lijsten voor (AND) of welke values uit lijst1 staan er niet in lijst2 (NOT) of welke values komen alleen voor in lijst1 of alleen in lijst2 (XOR). Met UniqueValues kan je daarvoor een leuke CF maken, die supersnel werkt.

De onderstaand functie levert altijd de unieke waarden op, is niet hoofdletter-gevoelig en vult het resultaat NIET met een ¶ aan.

// ######################
// ## ListLogic function
// ## Format:
// ## ListLogic ( type ; ListA ; ListB )
// ## Parameters:
// ## Type: “NOT”,”AND” or “XOR”
// ## ListA: List of textvalues
// ## ListB: List of textvalues
// ## Data type returned:
// ## text (the first true values will be returned and the function is
// ## case-insensitive)
// ## Description:
// ## Compare 2 lists of values with each other with “NOT”,”AND” or “XOR”
// ## the result will show respectively:
// ## NOT: Values in the first list missing in the second
// ## AND: Values that are in both lists
// ## XOR: Values that are not in both lists
// ######################

Let ( [
result = Case (
type = “NOT” ;
Let ( [
listb = if ( isempty ( listb ) ; “tempvalue” ; listb ) ;
blist = UniqueValues ( listb & ¶ )
] ;
Substitute ( Case (
IsEmpty ( lista ) ; “” ;
UniqueValues ( List ( blist ; lista ) ) ) ;
[ blist ; “” ] )
) ;

type = “AND” ;
Let ( [
la2b = FilterValues ( lista ; listb ) ;
lb2a = FilterValues ( listb ; lista ) ;
result = UniqueValues (
Substitute (
List ( la2b ; lb2a ) ;
[ “¶¶” ; ¶ ] )
)
] ;
Left ( result ; Length ( result ) – 1 )
) ;

type = “XOR” ;
Let ( [
nota = ListLogic ( “NOT” ; lista ; listb ) ;
notb = ListLogic ( “NOT” ; listb ; lista )
] ;
Case (
lista = “” ; UniqueValues ( listb ) ;
listb = “” ; UniqueValues (
lista ) ;
List ( nota ; notb ) )
) ;

“ERROR: Incorrect function type. Choose from: NOT, AND & XOR” )

] ;
Substitute (
TrimAll (
Substitute ( result ;
[ ” ” ; “@$space$@” ] ;
[ ¶ ; ” ” ] ) ;
1 ; 1 ) ;
[ ” ” ; ¶ ] ; [ “@$space$@” ; ” ” ] )
)


Top