Forum Discussion

Katescott's avatar
Katescott
Copper Contributor
Mar 27, 2023
Solved

Missing numbers in a column of repeating numbers

I am trying to determine missing numbers in a range for multiple values. I have tried multiple ways to drill down to the missing numbers 1-50. The numbers in Column A, B, C are relative, I tried concatenate to create a unique ID but then it isn't telling me the numbers missing in the last column. I am trying to get the missing values I can get the first portion of the sequence to tell me which numbers are missing between 1-50 but I can't get the the rest even when I rewrite the formula. Any help would be appreciated. Below is an example of the data I am working with. 

Column1Column2Column to find missing number
XYZ202
XYZ513
XYZ806
XYZ1027
XYZ1109
XYZ12110
XYZ14113
XYZ21018
ABC26622
ABC27824
ABC28025
ABC29026
ABC31028
ABC35032
ABC36133
NOP624
NOP705
NOP806
NOP1027
NOP1109
NOP12110
NOP13111
NOP14012
NOP14113
  • Katescott Now it is more clear, you can use the following formula:

     

    =LET(A, A1:A9, B,B1:B9, check,SEQUENCE(3), ux,UNIQUE(A),
     missing,MAP(ux, LAMBDA(x, TEXTJOIN(",",,FILTER(check, 
     ISNA(XMATCH(check,FILTER(B,A=x))),"")))),
     FILTER(HSTACK(ux,missing),missing<>""))

     

    In this sample, we assume the missing values we want to check are in the range of 1-3. Here is the sample output. It returns the rows from the first column with missing values. If more than one is missing, it returns a list separated by a comma. Here is the output, you can adjust to your need in your real situation, adjusting the names: A, B, and check. The last FILTER call is to just show the column row values with missing values only.

    Here is the output:

    You can also use COUNTIFS as follows:

     

    =LET(A,A1:A9, B,B1:B9, ux,UNIQUE(A), seq,SEQUENCE(,3), 
     cnts,COUNTIFS(A,ux,B,seq), missing,BYROW(cnts,LAMBDA(x,
     TEXTJOIN(",",,FILTER(seq,x=0,"")))), 
     FILTER(HSTACK(ux,missing),missing<>""))

     

    In both cases you can use MAP or BYROW I just changed it for illustrative purposes. For this case, seq has to be a column-wise array.

     

    If you want the result the other way around, i.e. for each number the missing letters, adapting for example the COUNTIFS approach and considering a numeric range or 1-5:

     

    =LET(A,A1:A9, B,B1:B9, ux,UNIQUE(A), seq,SEQUENCE(,5),
     cnts,COUNTIFS(A,ux,B,seq), missing, TOCOL(BYCOL(cnts,LAMBDA(x,
     TEXTJOIN(",",,FILTER(ux,x=0,""))))),
     FILTER(HSTACK(TOCOL(seq),missing),missing<>""))

     

    Now we use BYCOL and transpose the information using TOCOL.

     

    I hope it helps,

     

  • davidleal's avatar
    davidleal
    Iron Contributor
    You mentioned that you have numbers in column A, but I don't see them. I am struggling to understand what are the input and the expected output from your sample. Thanks
    • Katescott's avatar
      Katescott
      Copper Contributor
      I don't have numbers in column A. Column A is a name, column B is the location, and column C is the conversion 1-50 that matches to Column B. Does that make sense?
      • davidleal's avatar
        davidleal
        Iron Contributor
        Understood that in column A there are no numbers. So columns A, and B are input even the column A is not used for finding the missing numbers, correct? then you need to find the missing number from the sequence 1-50 numbers in Column B, so what is Column C, the result? What is the logic of that result? Please spend some time providing more clarity to your problem. We would need to know: the input, expected output, and the logic to obtain the expected output in a clear example. Thanks

Resources