Find missing numbers

strooman

Active Member
Joined
Oct 29, 2013
Messages
329
Office Version
  1. 2016
Platform
  1. Windows
I have a range of numbers from, let's say, 1 to 10000. But there are numbers missing. What would be a solution to find the missing numbers and put them in a column?
 

Excel Facts

What is =ROMAN(40) in Excel?
The Roman numeral for 40 is XL. Bill "MrExcel" Jelen's 40th book was called MrExcel XL.
I have a range of numbers from, let's say, 1 to 10000. But there are numbers missing. What would be a solution to find the missing numbers and put them in a column?

A small sample would be very helpful...

We have say in A2:A5...

3
5
3
6

what would be the output if the numbers must come from 1 to 10?
 
Upvote 0
Let's say your range is in column A.

Code:
Dim Flag as Boolean

For i = 1 to 10000
         Flag = False

         For j = 1 to ActiveSheet.UsedRange.Rows.Count
                 If Range("A" & j).Value = i Then
                        Flag = True
                        Exit For
                 End if
         Next
       
         If Flag = False
             Range("B1").End(xldown).Offset(1,0).Value = i
         End If
Next

You must make sure there is something in B2 for this to work.
 
Upvote 0
May be this :
A B
1 Missing
218
3210
4311
5413
6514
75
86
97
109
1112
1215

<tbody>
</tbody>


Formula in B2:
=IFERROR(SMALL(IF(ISNA(MATCH(ROW(INDIRECT("$"&MIN($A$2:$A$12)&":"&"$"&MAX($A$2:$A$12))),$A$2:$A$12,0))*1=1,ROW(INDIRECT("$"&MIN($A$2:$A$12)&":"&"$"&MAX($A$2:$A$12)))),ROW()-ROW($B$1)),"")

Confirm with Ctrl + Shift + Enter
This formula assume Number 1 and 10000 not missing ....
 
Last edited:
Upvote 0
I also have 2 options ...

<table border='1' cellspacing='0' cellpadding='2' valign='middle' colspan='6' style='font-family:Arial; color:#000000; background-color:#FFFFFF; font-size:10px; font-weight:normal; font-style:normal; '><colgroup><col width='28pt'><col width='45,75pt'><col width='45,75pt'><col width='7,5pt'><col width='45,75pt'><col width='45,75pt'></colgroup><tr style='background-color:#cacaca'><td> </td><td align='middle'>A</td><td align='middle'>B</td><td align='middle'>C</td><td align='middle'>D</td><td align='middle'>E</td></tr><tr><td style='background-color:#cacaca' align='middle'>1</td><td align='right' style='font-family:Calibri; ' >3</td><td align='right' style='font-family:Calibri; ' >1</td><td align='middle' style='font-family:Calibri; ' > </td><td align='right' style='font-family:Calibri; ' >3</td><td align='middle' style='font-family:Calibri; ' >4</td></tr><tr><td style='background-color:#cacaca' align='middle'>2</td><td align='right' style='font-family:Calibri; ' >5</td><td align='right' style='font-family:Calibri; ' >2</td><td align='middle' style='font-family:Calibri; ' > </td><td align='right' style='font-family:Calibri; ' >5</td><td align='middle' style='font-family:Calibri; ' >7</td></tr><tr><td style='background-color:#cacaca' align='middle'>3</td><td align='right' style='font-family:Calibri; ' >3</td><td align='right' style='font-family:Calibri; ' >4</td><td align='middle' style='font-family:Calibri; ' > </td><td align='right' style='font-family:Calibri; ' >3</td><td align='middle' style='font-family:Calibri; ' >9</td></tr><tr><td style='background-color:#cacaca' align='middle'>4</td><td align='right' style='font-family:Calibri; ' >6</td><td align='right' style='font-family:Calibri; ' >7</td><td align='middle' style='font-family:Calibri; ' > </td><td align='right' style='font-family:Calibri; ' >6</td><td align='middle' style='font-family:Calibri; ' >12</td></tr><tr><td style='background-color:#cacaca' align='middle'>5</td><td align='right' style='font-family:Calibri; ' >8</td><td align='right' style='font-family:Calibri; ' >9</td><td align='middle' style='font-family:Calibri; ' > </td><td align='right' style='font-family:Calibri; ' >8</td><td align='middle' style='font-family:Calibri; ' >14</td></tr><tr><td style='background-color:#cacaca' align='middle'>6</td><td align='right' style='font-family:Calibri; ' >10</td><td align='right' style='font-family:Calibri; ' >12</td><td align='middle' style='font-family:Calibri; ' > </td><td align='right' style='font-family:Calibri; ' >10</td><td align='middle' style='font-family:Calibri; ' >15</td></tr><tr><td style='background-color:#cacaca' align='middle'>7</td><td align='right' style='font-family:Calibri; ' >11</td><td align='right' style='font-family:Calibri; ' >14</td><td align='middle' style='font-family:Calibri; ' > </td><td align='right' style='font-family:Calibri; ' >11</td><td align='middle' style='font-family:Calibri; ' >17</td></tr><tr><td style='background-color:#cacaca' align='middle'>8</td><td align='right' style='font-family:Calibri; ' >13</td><td align='right' style='font-family:Calibri; ' >15</td><td align='middle' style='font-family:Calibri; ' > </td><td align='right' style='font-family:Calibri; ' >13</td><td align='middle' style='font-family:Calibri; ' >18</td></tr><tr><td style='background-color:#cacaca' align='middle'>9</td><td align='right' style='font-family:Calibri; ' >16</td><td align='right' style='font-family:Calibri; ' >17</td><td align='middle' style='font-family:Calibri; ' > </td><td align='right' style='font-family:Calibri; ' >16</td><td align='middle' style='font-family:Calibri; ' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>10</td><td align='right' style='font-family:Calibri; ' >19</td><td align='right' style='font-family:Calibri; ' >18</td><td align='middle' style='font-family:Calibri; ' > </td><td align='right' style='font-family:Calibri; ' >19</td><td align='middle' style='font-family:Calibri; ' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>11</td><td align='right' style='font-family:Calibri; ' > </td><td align='right' style='font-family:Calibri; ' >20</td><td align='middle' style='font-family:Calibri; ' > </td><td align='middle' style='font-family:Calibri; ' > </td><td align='middle' style='font-family:Calibri; ' > </td></tr><tr><td style='background-color:#cacaca' align='middle'>12</td><td align='right' style='font-family:Calibri; ' > </td><td align='right' style='font-family:Calibri; ' > </td><td align='middle' style='font-family:Calibri; ' > </td><td align='middle' style='font-family:Calibri; ' > </td><td align='middle' style='font-family:Calibri; ' > </td></tr></table><br><table border='3' cellspacing='0' cellpadding='2' valign='middle' colspan='2' style='table-layout:auto; color:#000000; background-color:#FFFFFF; font-family:Arial; font-size:10px;'><colgroup><col width='40pt'><col></colgroup><tr style='background-color:#eeaaaa'><td>Cell</td><td>Formula</td></tr><tr><td>B1</td><td><Span style='color:#222222'>{=SMALL</Span><Span style='color:#0000DD'>(IF</Span><Span style='color:#222222'>(COUNTIF</Span><Span style='color:#0000DD'>(A:A,ROW</Span><Span style='color:#222222'>($1:$20)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'>=0,ROW</Span><Span style='color:#0000DD'>($1:$20)</Span><Span style='color:#222222'>)</Span><Span style='color:#0000DD'>,ROW</Span><Span style='color:#222222'>()</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'>}</Span></td></tr><tr><td>E1</td><td><Span style='color:#222222'>{=SMALL</Span><Span style='color:#0000DD'>(IF</Span><Span style='color:#222222'>(COUNTIF</Span><Span style='color:#0000DD'>(D<Span style='color:#0000DD'>:</Span>D,ROW</Span><Span style='color:#222222'>(INDIRECT</Span><Span style='color:#0000DD'>("1:"&MAX</Span><Span style='color:#222222'>(D<Span style='color:#222222'>:</Span>D)</Span><Span style='color:#0000DD'>-MIN</Span><Span style='color:#222222'>(D<Span style='color:#222222'>:</Span>D)</Span><Span style='color:#0000DD'>+1)</Span><Span style='color:#222222'>)</Span><Span style='color:#0000DD'>+MIN</Span><Span style='color:#222222'>(D<Span style='color:#222222'>:</Span>D)</Span><Span style='color:#0000DD'>-1)</Span><Span style='color:#222222'>=0,ROW</Span><Span style='color:#0000DD'>(INDIRECT</Span><Span style='color:#222222'>("1:"&MAX</Span><Span style='color:#0000DD'>(D<Span style='color:#0000DD'>:</Span>D)</Span><Span style='color:#222222'>-MIN</Span><Span style='color:#0000DD'>(D<Span style='color:#0000DD'>:</Span>D)</Span><Span style='color:#222222'>+1)</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'>+MIN</Span><Span style='color:#0000DD'>(D<Span style='color:#0000DD'>:</Span>D)</Span><Span style='color:#222222'>-1)</Span><Span style='color:#0000DD'>,ROW</Span><Span style='color:#222222'>()</Span><Span style='color:#0000DD'>)</Span><Span style='color:#222222'>}</Span></td></tr></table><table style='font-family:Arial; font-size:8pt; background-color:#FFFFFF'><tr><td style='font-weight:bold'>Array-Formula!</td></tr><tr><td><span>Ctrl+Shift + Enter </span><span style='text-decoration:underline'></span><span></span></td></tr><tr><td><span></span><span style='font-weight:bold; color:#FF0000'></span><span></span></td></tr></table>
 
Upvote 0
A small sample would be very helpful...

We have say in A2:A5...

Well, there are no duplicates and it is a series of consecutive numbers. So in this example from A1 to A23

id
3
4
5
6
8
9
10
17
20
22
23
25
26
27
30
31
32
35
37
38
39
46

Missing: 1,2,7,11,12,13,14,15,16,18,19,21,24,28,29,33,34,36,40,41,42,43.44.45

For the sake of clarity the list in column A is much longer. We take 10.000 as the max.
 
Upvote 0
I guess Other's solution are much better but I'm just want to learn so here is my solution:
B2 : =IFERROR(SMALL(IF(ISNA(MATCH(ROW(INDIRECT("$1:"&"$"&MAX(A:A))),A:A,0))*1=1,ROW(INDIRECT("$1:"&"$"&MAX(A:A)))),ROW()-ROW($B$1)),"")
 
Last edited:
Upvote 0
Just a small point, but a range reference generated via INDIRECT does not require any absolute references (i.e. $), since it will be in any case remain unchanged as the formula is copied to further cells.

Also, the use of the unqualified ROW() as the k parameter for SMALL is not a very rigorous choice. Much better is to use a construction involving ROWS, not ROW, e.g. ROWS($1:1). See here for details:

ROW vs ROWS for consecutive integer generation | EXCELXOR

Regards
 
Upvote 0
Assuming you do not need the list to be "live", and if you are up for a macro solution, then I think this should work (it has not been tested against 10,000 entries)...
Code:
Sub MissingNumbers()
  Dim X As Long, Max As Long, Given As Variant, Missing As Variant
  Given = Range("A1", Cells(Rows.Count, "A").End(xlUp))
  ReDim Missing(1 To Given(UBound(Given), 1))
  For X = 1 To UBound(Missing)
    Missing(X) = X
  Next
  For X = 1 To UBound(Given)
    Missing(Given(X, 1)) = ""
  Next
  Missing = Application.Transpose(Split(Application.Trim(Join(Missing))))
  Range("B1").Resize(UBound(Missing)) = Missing
End Sub
Note: The above code assumes the list you have in Column A starts at Row 1... if you really have a header with the text "id", I can modify the code to account for it.
 
Upvote 0

Forum statistics

Threads
1,214,551
Messages
6,120,161
Members
448,948
Latest member
spamiki

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top