Home » List Numbers After Last Eight

List Numbers After Last Eight

Provide a formula to list all numbers greater than 8 after last 8 in A2:A20. First 8 appears in row 7 and last 8 appears in row 13. Hence, you will need to find numbers > 8 after row 13.

📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 23
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of List Numbers After Last Eight with Power Query

Power Query solution 1 for List Numbers After Last Eight, proposed by Aditya Kumar Darak 🇮🇳:
let
  Source   = Excel.CurrentWorkbook(){[Name = "data"]}[Content], 
  Position = List.PositionOf(Source[Number], 8, Occurrence.Last), 
  Skipped  = Table.Skip(Source, Position), 
  Result   = Table.SelectRows(Skipped, each [Number] > 8)
in
  Result
Power Query solution 2 for List Numbers After Last Eight, proposed by Luan Rodrigues:
let
  Fonte = Excel.CurrentWorkbook(){[Name = "Tabela7"]}[Content], 
  Result = Table.SelectRows(
    Table.AddIndexColumn(
      Table.AddColumn(Fonte, "Lista", each List.PositionOf(Fonte[Number], 8, Occurrence.Last)), 
      "Indice", 
      0, 
      1, 
      Int64.Type
    ), 
    each [Indice] > [Lista] and [Number] > 8
  )[[Number]]
in
  Result
Power Query solution 3 for List Numbers After Last Eight, proposed by Brian Julius:
let
  Source = Table.RenameColumns(
    Table.AddIndexColumn(
      Table.TransformColumnTypes(EightsRaw, {"Number", Int64.Type}), 
      "Index", 
      1, 
      1
    ), 
    {"Number", "ExpectedAnswer"}
  ), 
  Max8 = Table.AddColumn(Source, "Position", each if [ExpectedAnswer] = 8 then [Index] else null), 
  Cleanup = Table.SelectRows(
    Table.SelectColumns(Table.Skip(Max8, List.Max(Max8[Position])), "ExpectedAnswer"), 
    each [ExpectedAnswer] > 8
  )
in
  Cleanup
Power Query solution 4 for List Numbers After Last Eight, proposed by Brian Julius:
                    
                  
Power Query solution 5 for List Numbers After Last Eight, proposed by Matthias Friedmann:
let
  Source           = Excel.CurrentWorkbook(){[Name = "greater8"]}[Content], 
  RowsAfterLast8   = Table.LastN(Source, List.PositionOf(List.Reverse(Source[Number]), 8)), 
  #"Filtered Rows" = Table.SelectRows(RowsAfterLast8, each [Number] > 8)
in
  #"Filtered Rows"
Power Query solution 6 for List Numbers After Last Eight, proposed by Matthias Friedmann:
List.Reverse vs. Occurrence.Last, odd that I care about it.
Power Query solution 7 for List Numbers After Last Eight, proposed by Venkata Rajesh:
let
  Source = Data, 
  Output = List.Select(
    List.Skip(Source[Number], List.PositionOf(Source[Number], 8, Occurrence.Last)), 
    each _ > 8
  )
in
  Output
Power Query solution 8 for List Numbers After Last Eight, proposed by Mahmoud Bani Asadi:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  RemovedTopRows = Table.Skip(
    Source, 
    List.Last(List.PositionOf(Source[Number], 8, Occurrence.All)) + 1
  ), 
  FilteredRows = Table.SelectRows(RemovedTopRows, each [Number] > 8)
in
  FilteredRows
Power Query solution 9 for List Numbers After Last Eight, proposed by Sergei Baklan:
let
 Source = Excel.CurrentWorkbook(){[Name="range"]}[Content],
 #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),

 tbl = #"Promoted Headers",
 empty = Table.FromValue( "no such numbers", [DefaultColumnName = "Oops..."] ),
 magicNumber = 8,

 Answer = 
 if Table.RowCount ( Table.SelectRows(tbl, each [Number] = magicNumber) ) = 0 or
 Table.Last( tbl )[Number] = magicNumber
 then empty
 else Table.LastN(
 Table.SelectRows( tbl,
 each [Number] >= magicNumber ),
 each [Number] > magicNumber )
in
 Answer

--------------------------
--- Simplified variant----
let
 Source = Excel.CurrentWorkbook(){[Name="range"]}[Content],
 #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),

 Answer = Table.LastN(
 Table.SelectRows(
 #"Promoted Headers",
 each [Number] >= 8),
 each [Number] > 8 )
in
 Answer


                    
                  
          
Power Query solution 10 for List Numbers After Last Eight, proposed by Sue Bayes:
let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Type = Table.TransformColumnTypes(Source,{{"Number", Int64.Type}}),
 Index = Table.AddIndexColumn(Type, "Index", 0, 1, Int64.Type),
 Grouped = Table.Group(Index, {"Number"}, {{"Row", each List.Max([Index]), type number}}),
 Filtered = Table.SelectRows(Grouped, each [Number] = 8)
in
 Filtered

let
 Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
 Type = Table.TransformColumnTypes(Source,{{"Number", Int64.Type}}),
 Index = Table.AddIndexColumn(Type, "Index", 0, 1, Int64.Type),
 Queries = Table.NestedJoin(Index, {"Index"}, #"Look Up Row", {"Row"}, "Look Up Row", JoinKind.LeftOuter),
 Expand = Table.ExpandTableColumn(Queries, "Look Up Row", {"Row"}, {"Row"}),
 Fill = Table.FillDown(Expand,{"Row"}),
 Filter = Table.SelectRows(Fill, each ([Row] = 11)),
 #"Filter>8" = Table.SelectRows(Filter, each [Number] > 8),
 Select = Table.SelectColumns(#"Filter>8",{"Number"})
in
 Select


                    
                  
          
Power Query solution 11 for List Numbers After Last Eight, proposed by Shubham Vashisht:
let
  IronMan = Data, 
  EndGame = Table.SelectRows(
    Table.RemoveFirstN(IronMan, List.PositionOf(IronMan[Number], 8, Occurrence.Last)), 
    each [Number] > 8
  )
in
  EndGame
Power Query solution 12 for List Numbers After Last Eight, proposed by Alexandru Badiu:
let
  Source = Datasource, 
  #"Added Index" = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type), 
  #"Grouped Rows" = Table.Group(
    #"Added Index", 
    {"Number"}, 
    {{"Count", each _, type table [Number = nullable number, Index = number]}}
  ), 
  #"Added Custom" = Table.AddColumn(
    #"Grouped Rows", 
    "Custom", 
    each Table.AddIndexColumn([Count], "IndexNb", 0)
  ), 
  #"Removed Other Columns" = Table.SelectColumns(#"Added Custom", {"Custom"}), 
  #"Expanded Custom" = Table.ExpandTableColumn(
    #"Removed Other Columns", 
    "Custom", 
    {"Number", "Index", "IndexNb"}, 
    {"Custom.Number", "Custom.Index", "Custom.IndexNb"}
  ), 
  #"Sorted Rows" = Table.Sort(#"Expanded Custom", {{"Custom.Index", Order.Ascending}}), 
  #"Added Conditional Column" = Table.AddColumn(
    #"Sorted Rows", 
    "Flag", 
    each if [Custom.Number] = 8 and [Custom.IndexNb] = 1 then [Custom.Index] else 0
  ), 
  #"Removed Top Rows" = Table.Skip(
    #"Added Conditional Column", 
    List.Max(#"Added Conditional Column"[Flag])
  ), 
  #"Removed Other Columns1" = Table.SelectColumns(#"Removed Top Rows", {"Custom.Number"}), 
  #"Filtered Rows" = Table.SelectRows(#"Removed Other Columns1", each [Custom.Number] > 8)
in
  #"Filtered Rows"
Power Query solution 13 for List Numbers After Last Eight, proposed by Pim Meesters:
let
  Bron = Excel.CurrentWorkbook(){[Name = "Tabel1"]}[Content], 
  TypeChange = Table.TransformColumnTypes(Bron, {{"Number", Int64.Type}}), 
  AddCol1 = Table.AddColumn(TypeChange, "Is8", each if [Number] = 8 then 1 else 0), 
  AddCol2 = Table.AddColumn(AddCol1, "Total8", each List.Sum(AddCol1[Is8])), 
  Index = Table.AddIndexColumn(AddCol2, "Index", 0, 1, Int64.Type), 
  Addcol3 = Table.AddColumn(Index, "RunningTotal", each List.Sum(List.FirstN(Index[Is8], [Index]))), 
  TypeChanged = Table.TransformColumnTypes(Addcol3, {{"RunningTotal", Int64.Type}}), 
  NulltoNull = Table.ReplaceValue(TypeChanged, null, 0, Replacer.ReplaceValue, {"RunningTotal"}), 
  CleanCols = Table.RemoveColumns(NulltoNull, {"Index", "Is8"}), 
  FilterCol = Table.AddColumn(
    CleanCols, 
    "FilterCol", 
    each if [RunningTotal] = [Total8] then "Keep" else "Remove"
  ), 
  Removerows = Table.SelectRows(FilterCol, each ([FilterCol] = "Keep")), 
  CleanTable = Table.RemoveColumns(Removerows, {"Total8", "RunningTotal", "FilterCol"}), 
  Greaterthan8 = Table.SelectRows(CleanTable, each [Number] > 8)
in
  Greaterthan8

Solving the challenge of List Numbers After Last Eight with Excel

Excel solution 1 for List Numbers After Last Eight, proposed by Rick Rothstein:
=LET(A,A2:A20,FILTER(A,(ROW(A)>MAX(IF(A=8,ROW(A))))*(A>8)))

EDIT NOTE: If it would be possible for the list to have no 8's in it, then I would assume nothing should be outputted. So, if that is allowed as a possibility, then this modification of my above formula should be used instead...
=LET(A,A2:A20,L,MAX(IF(A=8,ROW(A))),R,INDEX(A:A,L):A20,IF(COUNTIF(A,8),FILTER(R,R>8),""))
Excel solution 2 for List Numbers After Last Eight, proposed by John V.:
=LET(t,TAKE(A2:A20,-8),FILTER(t,t>8))
*** EDIT ► Reason: Misunderstood the challenge ◄ ***
=LET(r,A2:A20,FILTER(r,(ROW(r)>MAX(ROW(r)*(r=8)))*(r>8)))
Excel solution 3 for List Numbers After Last Eight, proposed by محمد حلمي:
=LET(a;A2:A20;FILTER(a;(ROW(a)>XMATCH(8;a;;-1)+1)*a>8))
Excel solution 4 for List Numbers After Last Eight, proposed by 🇰🇷 Taeyong Shin:
=TOCOL(TAKE(IFS(A2:A20>8,A2:A20),-8),2)
Excel solution 5 for List Numbers After Last Eight, proposed by Kris Jaganah:
=FILTER(INDIRECT("A"&MAX(IF(A2:A20=8,ROW(A2:A20),))):A20,INDIRECT("A"&MAX(IF(A2:A20=8,ROW(A2:A20),))):A20>8,0)
Excel solution 6 for List Numbers After Last Eight, proposed by Julian Poeltl:
=LET(N,A2:A20,E,DROP(N,XMATCH(8,N,,-1)),FILTER(E,E>8))
Excel solution 7 for List Numbers After Last Eight, proposed by Alejandro Campos:
=LET(
 r, A2:A20,
 f, ROW(r),
 u, XLOOKUP(8, r, r, , , -1),
 v, ROW(u),
 vf, f > v,
 cu, vf * r > 8,
 FILTER(r, cu)
)
Excel solution 8 for List Numbers After Last Eight, proposed by Aditya Kumar Darak 🇮🇳:
= LET(
 _calc,
 XLOOKUP(8, data, data, , 0, -1)
 : INDEX(data, ROWS(data)),
 FILTER(_calc, _calc > 8))
Excel solution 9 for List Numbers After Last Eight, proposed by Timothée BLIOT:
=LET(
array,SORTBY(A2:A20,SEQUENCE(ROWS(A2:A20)),-1),
position,MATCH(8,array,0),
section,DROP(array,position-ROWS(array)-1),
numbers,FILTER(section,section>8),
SORTBY(numbers,SEQUENCE(ROWS(numbers)),-1)
)
Excel solution 10 for List Numbers After Last Eight, proposed by Duy Tùng:
=LET(a,A1:A20,b,DROP(a,MAX((a=8)*ROW(a))),FILTER(b,b>8))
Excel solution 11 for List Numbers After Last Eight, proposed by Bhavya Gupta:
=LET(a,DROP(A2:A20,XMATCH(8,A2:A20,0,-1)),FILTER(a,a>8))
Excel solution 12 for List Numbers After Last Eight, proposed by Charles Roldan:
=DROP(REDUCE("",A2:A20,LAMBDA(a,b,IF(b=8,"",IF(b<8,a,VSTACK(a,b))))),1)
Excel solution 13 for List Numbers After Last Eight, proposed by Owen Price:
=FILTER(A14:A20,A14:A20>8)
Excel solution 14 for List Numbers After Last Eight, proposed by Jardiel Euflázio:
=LET(

a,A2:A20,
b,ROWS(a),
c,XMATCH(TRUE,(a=8),,-1)-b,
d,OFFSET(A20,,,c,),

FILTER(d,d>8)

)
Excel solution 15 for List Numbers After Last Eight, proposed by Jardiel Euflázio:
=LET(

a,A2:A20,
b,ROWS(a),
c,SEQUENCE(b),
d,(c>MAX((a=8)*c)),

FILTER(d*a,d*a>8)

)
Excel solution 16 for List Numbers After Last Eight, proposed by Jardiel Euflázio:
=LET(

a,A2:A20,
b,ROWS(a),
c,SEQUENCE(b),
d,MAX((a=8)*c),
e,TAKE(a,-(b-d)),

FILTER(e,e>8)

)
Excel solution 17 for List Numbers After Last Eight, proposed by Victor Momoh (MVP, MOS, R.Eng):
=LET(a,XLOOKUP(8,A2:A20,A2:A20,,,-1):A20,FILTER(a,a>8))
Excel solution 18 for List Numbers After Last Eight, proposed by Sergei Baklan:
=LET( a, data/(data>=8), TOCOL( DROP( a, XMATCH( 8, a, ,-1 ) ), 2 ) )
Excel solution 19 for List Numbers After Last Eight, proposed by Sergei Baklan:
=IFERROR( INDEX( A:A,
 AGGREGATE(15, 6, ROW(data) /
 (data>8) /
 ( ROW(data) > LOOKUP(2,1/(data=8),ROW(data)) ),
 ROW()-ROW($J$1)) ), "" )
Excel solution &20 for List Numbers After Last Eight, proposed by Cary Ballard, DML:
=LET(
 a, A2:A20,
 f, DROP(a, XLOOKUP(TRUE, 8 = a, SEQUENCE(ROWS(a)), , , -1)),
 FILTER(f, f > 8)
)
Excel solution 21 for List Numbers After Last Eight, proposed by Artur Pilipczuk:
=LET(lst,","&TEXTJOIN(",",FALSE,A2:A20)&",",mlst,SUBSTITUTE(lst,",8,",",|,",LEN(lst)-LEN(SUBSTITUTE(lst,",8,",",,"))),short,MID(mlst,FIND("|",mlst)+2,LEN(mlst)),slist,TEXTSPLIT(short,,",",TRUE),FILTER(slist,NUMBERVALUE(slist)>8))
Excel solution 22 for List Numbers After Last Eight, proposed by Tyler N.:
=LET(Sp;OFFSET(XLOOKUP(8;A:A;A:A;;;-1);0;0;COUNTA(A:A)+1-ROW(XLOOKUP(8;A:A;A:A;;;-1));1);FILTER(Sp;Sp>8))
Excel solution 23 for List Numbers After Last Eight, proposed by Ibrahim Sadiq:
=LET(a,A2:A20,b,FILTER(IF(a>8,a,""),ROW(a)>ROW(XLOOKUP(8,a,a,,,-1))),FILTER(b,b<>""))
Excel solution 24 for List Numbers After Last Eight, proposed by Nazmul Islam Jobair:
=FILTER(A2:A20,(SEQUENCE(ROWS(A2:A20))>XMATCH(8,A2:A20,,-1))*A2:A20>8)
Excel solution 25 for List Numbers After Last Eight, proposed by Riley Johnson:
= LET(
 target_number, E2,
 data, $A$2:$A$20,

 last_occurrence, XMATCH( target_number, data, 0, -1 ),
 last_digits, DROP( data, last_occurrence ),
 FILTER( last_digits, last_digits > target_number, "" )
)
Excel solution 26 for List Numbers After Last Eight, proposed by Md niaz Islam:
=filter(A2:A20,((Row(A2:A20)-1)>8)*(A2:A20)>8))
Excel solution 27 for List Numbers After Last Eight, proposed by MASOTO LAZARUS KANYANE:
=IFERROR(SEARCH(D3,A2:A20),"")
E3=MAX(IF(D4#="",0,(ROW(D4#))))
F3=FILTER(INDIRECT(ADDRESS($E$3,1)&":"&ADDRESS(COUNTA(A1:A20),1)),INDIRECT(ADDRESS($E$3,1)&":"&ADDRESS(COUNTA(A1:A20),1))>$D$3)

Solving the challenge of List Numbers After Last Eight with Python in Excel

Python in Excel solution 1 for List Numbers After Last Eight, proposed by Alejandro Campos:
df = xl("A1:A20", headers=True)
last_8_index = df[df['Number'] == 8].last_valid_index()
filtered_df = df.iloc[last_8_index + 1:]
result_df = filtered_df[filtered_df['Number'] > 8].reset_index(drop=True)
result_df
                    
                  

Leave a Reply