{"id":31851,"date":"2025-09-10T11:35:28","date_gmt":"2025-09-10T16:35:28","guid":{"rendered":"https:\/\/breakingintowallstreet.com\/?post_type=biws_kb&#038;p=31851"},"modified":"2025-11-20T18:48:40","modified_gmt":"2025-11-20T23:48:40","slug":"excel-filter-function","status":"publish","type":"biws_kb","link":"https:\/\/breakingintowallstreet.com\/kb\/excel\/excel-filter-function\/","title":{"rendered":"Excel FILTER Function: Data, Financial Models, and the Multiverse"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_81 counter-flat ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Excel FILTER Function: Data, Financial Models, and the Multiverse<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/breakingintowallstreet.com\/kb\/excel\/excel-filter-function\/#Excel_FILTER_Function_with_Multiple_Criteria\">Excel FILTER Function with Multiple Criteria<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/breakingintowallstreet.com\/kb\/excel\/excel-filter-function\/#How_to_Use_the_FILTER_Function_in_Excel_for_Financial_Models\">How to Use the FILTER Function in Excel for Financial Models<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/breakingintowallstreet.com\/kb\/excel\/excel-filter-function\/#Combining_FILTER_with_IRR_or_XIRR\">Combining FILTER with IRR or XIRR<\/a><\/li><li class='ez-toc-page-1'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/breakingintowallstreet.com\/kb\/excel\/excel-filter-function\/#How_to_Make_This_PE_Fund_Summary_More_Dynamic_with_FILTER_and_XLOOKUP\">How to Make This PE Fund Summary More Dynamic with FILTER and XLOOKUP<\/a><\/li><\/ul><\/nav><\/div>\n\n<blockquote><p><strong>Excel FILTER Function Definition:<\/strong> The FILTER function in Excel, added in the 365 version and Excel 2021 and beyond, lets you extract multiple matching rows from a set of data based on one or more conditions; it updates the results dynamically as the data changes and creates a <strong>spill range<\/strong> you can reference in other formulas.<\/p><\/blockquote>\n<p>Microsoft has added dozens of features, functions, and formulas to Excel since ~2020, but the <strong>FILTER<\/strong> function is one of the top 5 most useful new additions.<\/p>\n<p>Other functions, such as <a href=\"https:\/\/breakingintowallstreet.com\/kb\/excel\/xlookup-in-excel-how-to-use-it-and-whether-or-not-its-a-game-changer\/\" target=\"_blank\" rel=\"noopener\">XLOOKUP<\/a> and <a href=\"https:\/\/breakingintowallstreet.com\/kb\/excel\/index-match-function-excel\/\" target=\"_blank\" rel=\"noopener\">INDEX\/MATCH<\/a>, exist mostly to find <strong>single values<\/strong> in ranges of data.<\/p>\n<p>But <strong>FILTER<\/strong> is about finding <strong>multiple matching records<\/strong> without modifying the original data.<\/p>\n<p>If XLOOKUP and INDEX\/MATCH are like Spider-Man, you can think of FILTER as the \u201cmultiverse\u201d version:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31852 size-large\" title=\"FILTER vs. XLOOKUP\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112733\/01-FILTER-vs-XLOOKUP-1024x747.jpg\" alt=\"FILTER vs. XLOOKUP\" width=\"1024\" height=\"747\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112733\/01-FILTER-vs-XLOOKUP-1024x747.jpg 1024w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112733\/01-FILTER-vs-XLOOKUP-300x219.jpg 300w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112733\/01-FILTER-vs-XLOOKUP-768x561.jpg 768w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112733\/01-FILTER-vs-XLOOKUP-1536x1121.jpg 1536w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112733\/01-FILTER-vs-XLOOKUP.jpg 1607w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>The basic parameters are as follows:<\/p>\n<p>=FILTER(Array, Include, [If Empty])<\/p>\n<p>You reference the \u201carray\u201d or range of data you want to filter, you specify the criteria to filter it, and then you state what will appear if nothing matches your criteria.<\/p>\n<p>For example, we could \u201cfilter\u201d a list of customer order data for Orders above $1,000 with this function:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31853\" title=\"Basic FILTER Functionality\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112809\/02-Basic-FILTER-1024x278.jpg\" alt=\"Basic FILTER Functionality\" width=\"600\" height=\"163\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112809\/02-Basic-FILTER-1024x278.jpg 1024w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112809\/02-Basic-FILTER-300x81.jpg 300w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112809\/02-Basic-FILTER-768x209.jpg 768w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112809\/02-Basic-FILTER.jpg 1134w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/p>\n<p>The B6:J104 part refers to the entire range of customer order data, which is to the left of this smaller area.<\/p>\n<p>This gives us a list of orders that dynamically updates as new data is added; we can reference this <strong>spill range<\/strong> with the \u201c#\u201d notation and use it in other operations, and it will keep resizing as the data changes:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31854 size-large\" title=\"FILTER and Spill Ranges\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112834\/03-FILTER-Spill-Range-1024x204.jpg\" alt=\"FILTER and Spill Ranges\" width=\"1024\" height=\"204\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112834\/03-FILTER-Spill-Range-1024x204.jpg 1024w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112834\/03-FILTER-Spill-Range-300x60.jpg 300w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112834\/03-FILTER-Spill-Range-768x153.jpg 768w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112834\/03-FILTER-Spill-Range-1536x306.jpg 1536w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112834\/03-FILTER-Spill-Range.jpg 2005w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>FILTER is incredibly useful for data analysis, but it\u2019s also useful in <a href=\"https:\/\/mergersandinquisitions.com\/financial-modeling\/\" target=\"_blank\" rel=\"noopener\">financial models<\/a> \u2013 especially when you are building <strong>asset-level forecasts<\/strong>, such as for private equity portfolio companies, properties in <a href=\"https:\/\/breakingintowallstreet.com\/kb\/real-estate-modeling\/\" target=\"_blank\" rel=\"noopener\">real estate<\/a>, or solar\/wind farms in <a href=\"https:\/\/breakingintowallstreet.com\/kb\/project-finance\/\" target=\"_blank\" rel=\"noopener\">project finance<\/a>.<\/p>\n<h3><strong>Files &amp; Resources:<\/strong><\/h3>\n<ul>\n<li><a href=\"https:\/\/youtube-breakingintowallstreet-com.s3.dualstack.us-east-1.amazonaws.com\/Excel\/Excel-Filter-Function.xlsx\" target=\"_blank\" rel=\"noopener\">Excel FILTER Function (XL)<\/a><\/li>\n<li><a href=\"https:\/\/youtube-breakingintowallstreet-com.s3.dualstack.us-east-1.amazonaws.com\/Excel\/Excel-Filter-Function-Slides.pdf\" target=\"_blank\" rel=\"noopener\">Excel FILTER Function &#8211; Slides (PDF)<\/a><\/li>\n<\/ul>\n<h3><strong>Video Table of Contents:<\/strong><\/h3>\n<ul>\n<li><strong>0:00:<\/strong> Introduction<\/li>\n<li><strong>4:24:<\/strong> Part 1: FILTER with Multiple Criteria<\/li>\n<li><strong>7:28:<\/strong> Part 2: FILTER for PE Fund Modeling<\/li>\n<li><strong>12:31:<\/strong> Part 3: FILTER with the XIRR and IRR Functions<\/li>\n<li><strong>15:31:<\/strong> Part 4: How to Make This More Dynamic<\/li>\n<li><strong>19:27:<\/strong> Recap and Summary<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Excel_FILTER_Function_with_Multiple_Criteria\"><\/span><strong>Excel FILTER Function with Multiple Criteria<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>To use FILTER with multiple criteria, one method is to \u201cmultiply together\u201d the separate fields.<\/p>\n<p>For example, let\u2019s say that we want to capture all orders by \u201cMars University\u201d for \u201cProduct G\u201d in this sales data.<\/p>\n<p>To do this, we\u2019d enter the <strong>entire range<\/strong> to filter and then use (Column1=Target1) * (Column2=Target2) in the \u201cInclude\u201d part:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31855 size-large\" title=\"FILTER with Multiple Criteria\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112859\/04-FILTER-Multiple-Criteria-1024x161.jpg\" alt=\"FILTER with Multiple Criteria\" width=\"1024\" height=\"161\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112859\/04-FILTER-Multiple-Criteria-1024x161.jpg 1024w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112859\/04-FILTER-Multiple-Criteria-300x47.jpg 300w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112859\/04-FILTER-Multiple-Criteria-768x121.jpg 768w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112859\/04-FILTER-Multiple-Criteria-1536x242.jpg 1536w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112859\/04-FILTER-Multiple-Criteria.jpg 1612w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>To make this even more robust, we can turn these inputs into <strong>dropdown menus<\/strong> using Data Validation (Alt, D, L in PC Excel) and the SORT and UNIQUE functions:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31856 size-large\" title=\"Dropdown Menus via Data Validation\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112923\/05-Dropdown-Menu-Data-Validation-1024x620.jpg\" alt=\"Dropdown Menus via Data Validation\" width=\"1024\" height=\"620\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112923\/05-Dropdown-Menu-Data-Validation-1024x620.jpg 1024w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112923\/05-Dropdown-Menu-Data-Validation-300x182.jpg 300w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112923\/05-Dropdown-Menu-Data-Validation-768x465.jpg 768w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112923\/05-Dropdown-Menu-Data-Validation.jpg 1274w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>We directly reference these ranges in the Data Validation menu after selecting \u201cList\u201d under \u201cAllow\u201d and going to the \u201cSource\u201d area.<\/p>\n<p>The FILTER function then updates the area on the right in real time as we keep changing the school\/organization name and product name:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31857 size-large\" title=\"FILTER Updating the Range Dynamically\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112950\/06-FILTER-Updates-1024x358.jpg\" alt=\"FILTER Updating the Range Dynamically\" width=\"1024\" height=\"358\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112950\/06-FILTER-Updates-1024x358.jpg 1024w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112950\/06-FILTER-Updates-300x105.jpg 300w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112950\/06-FILTER-Updates-768x269.jpg 768w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112950\/06-FILTER-Updates-1536x538.jpg 1536w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10112950\/06-FILTER-Updates.jpg 1820w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>If the underlying data changes because of new additions or deletions, FILTER automatically updates its output as well.<\/p>\n<p>We can also use NOT conditions, dates, and many other inputs with FILTER; this just scratches the surface.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"How_to_Use_the_FILTER_Function_in_Excel_for_Financial_Models\"><\/span><strong>How to Use the FILTER Function in Excel for Financial Models<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>In financial models, FILTER is useful for creating <strong>roll-ups<\/strong>, <strong>summaries<\/strong>, and <strong>aggregate tables<\/strong>, especially in asset-level models.<\/p>\n<p>For example, when modeling an <a href=\"https:\/\/breakingintowallstreet.com\/kb\/oil-gas-modeling\/\" target=\"_blank\" rel=\"noopener\">oil &amp; gas company<\/a>, you might want to summarize the production and reserves in each oil field, and in real estate, you might want to summarize the rent, net operating income (NOI), and <a href=\"https:\/\/breakingintowallstreet.com\/kb\/real-estate-modeling\/cap-rate\/\" target=\"_blank\" rel=\"noopener\">Cap Rates<\/a> for different properties.<\/p>\n<p>In this example, we\u2019ll look at a set of cash flows from a <strong>private equity fund<\/strong> that has invested in technology and services companies.<\/p>\n<p>The goal is to create a <strong>summary table<\/strong> that has the <a href=\"https:\/\/breakingintowallstreet.com\/kb\/leveraged-buyouts-and-lbo-models\/cash-on-cash-return-vs-irr\/\" target=\"_blank\" rel=\"noopener\">Gross Multiple of Invested Capital (MOIC) and Gross Internal Rate of Return (IRR)<\/a> for each company.<\/p>\n<p>These formulas are straightforward <em>if<\/em> we already have the investment and exit dates, invested capital, realizations, and unrealized values for all the companies.<\/p>\n<p>The <strong>starting point<\/strong> is retrieving the portfolio company names from this set of cash flows:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31858\" title=\"Portfolio Company Names\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113119\/07-Portfolio-Company-Names.jpg\" alt=\"Portfolio Company Names\" width=\"600\" height=\"713\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113119\/07-Portfolio-Company-Names.jpg 890w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113119\/07-Portfolio-Company-Names-253x300.jpg 253w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113119\/07-Portfolio-Company-Names-862x1024.jpg 862w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113119\/07-Portfolio-Company-Names-768x912.jpg 768w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/p>\n<p>The \u201cold way\u201d of doing this was to copy and paste the list as values, go to Data &#8211;&gt; Remove Duplicates, and then delete the \u201cN\/A\u201d from the list and copy\/paste this new set of names over to the summary area:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31859\" title=\"Remove Duplicates Demonstration\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113156\/08-Remove-Duplicates.jpg\" alt=\"Remove Duplicates Demonstration\" width=\"600\" height=\"641\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113156\/08-Remove-Duplicates.jpg 957w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113156\/08-Remove-Duplicates-281x300.jpg 281w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113156\/08-Remove-Duplicates-768x820.jpg 768w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/p>\n<p>This method works, but <strong>it\u2019s not dynamic<\/strong>.<\/p>\n<p>If the company names or cash flows ever change, the summary table will not update properly.<\/p>\n<p>We can improve it by using the FILTER and UNIQUE functions to create a <strong>dynamic list<\/strong> of company names that updates as the cash flow data changes:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31860 size-large\" title=\"FILTER and UNIQUE for Company Names\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113232\/09-FILTER-UNIQUE-Company-Names-1024x378.jpg\" alt=\"FILTER and UNIQUE for Company Names\" width=\"1024\" height=\"378\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113232\/09-FILTER-UNIQUE-Company-Names-1024x378.jpg 1024w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113232\/09-FILTER-UNIQUE-Company-Names-300x111.jpg 300w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113232\/09-FILTER-UNIQUE-Company-Names-768x284.jpg 768w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113232\/09-FILTER-UNIQUE-Company-Names-1536x567.jpg 1536w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113232\/09-FILTER-UNIQUE-Company-Names.jpg 1874w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>UNIQUE removes all the duplicate company names, and the FILTER, with the &lt;&gt;\u201cN\/A\u201d part, removes all the \u201cN\/A\u201d labels from the set of company names.<\/p>\n<p>With the investment and exit dates, we can use a similar \u201cmultiplication trick\u201d with XLOOKUP to find the dates based on criteria in <strong>2 columns in this range:<\/strong><\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31861 size-large\" title=\"XLOOKUP Multiplication Trick\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113301\/10-XLOOKUP-Multiplication-1024x349.jpg\" alt=\"XLOOKUP Multiplication Trick\" width=\"1024\" height=\"349\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113301\/10-XLOOKUP-Multiplication-1024x349.jpg 1024w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113301\/10-XLOOKUP-Multiplication-300x102.jpg 300w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113301\/10-XLOOKUP-Multiplication-768x261.jpg 768w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113301\/10-XLOOKUP-Multiplication-1536x523.jpg 1536w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113301\/10-XLOOKUP-Multiplication.jpg 1924w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Functions like this normally work by searching the top row and leftmost column in a range for matches and then returning the value at the intersection of those matches.<\/p>\n<p>However, XLOOKUP can also find a matching value based on the criteria over 2 columns.<\/p>\n<div class='code-block code-block-4' style='margin: 8px 0; clear: both;'>\n<div class=\"kb-adinsert-modal\">\n    <div class=\"kb-adinsert-top\">\n      <div class=\"media\">\n          <img decoding=\"async\" class=\"alignnone size-full wp-image-28448\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2024\/05\/07054849\/Excel-VBA-Ico.png\" alt=\"Excel & VBA\" width=\"128\" height=\"128\" \/>\n      <\/div>\n      <div class=\"content\">\n          <h3>Learn Excel Shortcuts, Formulas, Graphs, Data, and VBA for Automation<\/h3>\n      <\/div>\n    <\/div>\n    \n    <div class=\"full_text\">\n    \t<ul>\n        \t<li>\n            \t<h4>Become a shortcut, formula & formatting machine<\/h4>\n              <p>Excel will be your \u201cnative language\u201d after you finish this course<\/p>\n\t\t\t    <\/li>\n          <li>\n          \t<h4>Learn the skills with dozens of practice exercises<\/h4>\n            <p>Learn by doing and check your work against the solutions<\/p>\n\t\t\t    <\/li>\n          <li>\n          \t<h4>Shave hours off your workday with VBA and macros<\/h4>\n            <p>Automate repetitive tasks, format spreadsheets quickly, and more\n\n<\/p>\n\t\t\t  <\/li>\n      <\/ul>\n        \n      <a class=\"cta-link orange-button-medium\" href=\"https:\/\/breakingintowallstreet.com\/excel-vba\/\" target=\"_blank\">Full Details<\/a>\n      \n      <a class=\"cta-link orange-button-medium bg-blue\" href=\"https:\/\/biws-support.s3.us-east-1.amazonaws.com\/Course-Outlines\/Excel-VBA-Course-Outline.pdf\" target=\"_blank\" rel=\"noopener\">Short Outline<\/a>\n    <\/div>\n<\/div>\n<\/div>\n\n<h2><span class=\"ez-toc-section\" id=\"Combining_FILTER_with_IRR_or_XIRR\"><\/span><strong>Combining FILTER with IRR or XIRR<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>We can also combine FILTER with traditional financial functions such as IRR and XIRR to calculate fund-level stats.<\/p>\n<p>For example, what is the <strong>Gross IRR<\/strong> for this private equity fund?<\/p>\n<p>The investment dates are <strong>irregular<\/strong> (see the list above), so the standard IRR function, which assumes annual intervals, does not work.<\/p>\n<p>Also, we want to <strong>exclude<\/strong> Management Fees and Carried Interest (the performance fees the PE fund charges).<\/p>\n<p>This is a perfect use case for XIRR (to deal with the irregular dates) combined with FILTER (to exclude certain entries in the set of cash flows).<\/p>\n<p>The formula looks like this:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31862 size-large\" title=\"XIRR with FILTER\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113326\/11-XIRR-FILTER-1024x732.jpg\" alt=\"XIRR with FILTER\" width=\"1024\" height=\"732\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113326\/11-XIRR-FILTER-1024x732.jpg 1024w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113326\/11-XIRR-FILTER-300x214.jpg 300w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113326\/11-XIRR-FILTER-768x549.jpg 768w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113326\/11-XIRR-FILTER.jpg 1338w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"How_to_Make_This_PE_Fund_Summary_More_Dynamic_with_FILTER_and_XLOOKUP\"><\/span><strong>How to Make This PE Fund Summary More Dynamic with FILTER and XLOOKUP<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>One issue here is that since we\u2019re mixing traditional formulas with dynamic array functions, the \u201ctraditional formulas\u201d section does not expand when we add new companies to this set.<\/p>\n<p>For example, if we add \u201cCompany X\u201d to this set of Investments, we get a #SPILL! error because of the \u201cTotal\u201d row at the bottom that blocks the spill range:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31863 size-large\" title=\"SPILL Error with Additional Entries\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113354\/12-SPILL-ERROR-1024x352.jpg\" alt=\"SPILL Error with Additional Entries\" width=\"1024\" height=\"352\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113354\/12-SPILL-ERROR-1024x352.jpg 1024w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113354\/12-SPILL-ERROR-300x103.jpg 300w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113354\/12-SPILL-ERROR-768x264.jpg 768w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113354\/12-SPILL-ERROR-1536x529.jpg 1536w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113354\/12-SPILL-ERROR.jpg 1627w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>We can fix some of this by deleting the \u201cTotal\u201d row at the bottom, but it still doesn\u2019t solve the issue of the <em>other<\/em> formulas not spilling down as this new company name is added to the list:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31864 size-large\" title=\"Creating Space for the Company Name Spill\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113422\/13-Spill-Space-1024x578.jpg\" alt=\"Creating Space for the Company Name Spill\" width=\"1024\" height=\"578\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113422\/13-Spill-Space-1024x578.jpg 1024w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113422\/13-Spill-Space-300x169.jpg 300w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113422\/13-Spill-Space-768x433.jpg 768w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113422\/13-Spill-Space.jpg 1315w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>To make this model more robust, we can change the XLOOKUP formulas to return <strong>spill ranges<\/strong> that change dynamically as the company list changes.<\/p>\n<p>And we can use the FILTER function to limit the lookup range to just the companies in the \u201cInvestment:\u201d area and to limit the return range to dates that are within this area:<\/p>\n<p>=XLOOKUP($I13#, FILTER(Fund_Companies, (Fund_Items=K$10), &#8220;N\/A&#8221;), FILTER(Fund_Dates, (Fund_Items=K$10), &#8220;N\/A&#8221;), &#8220;N\/A&#8221;)<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-31865\" title=\"Making XLOOKUP Work with a Dynamic Array and Create a Spill Range\" src=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113452\/14-XLOOKUP-Dynamic-Array.jpg\" alt=\"Making XLOOKUP Work with a Dynamic Array and Create a Spill Range\" width=\"700\" height=\"600\" srcset=\"https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113452\/14-XLOOKUP-Dynamic-Array.jpg 945w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113452\/14-XLOOKUP-Dynamic-Array-300x257.jpg 300w, https:\/\/biwsuploads-assest.s3.amazonaws.com\/biws\/wp-content\/uploads\/2025\/09\/10113452\/14-XLOOKUP-Dynamic-Array-768x658.jpg 768w\" sizes=\"(max-width: 700px) 100vw, 700px\" \/><\/p>\n<p>We could apply a similar setup to the rest of the formulas here to make all of them dynamic as well.<\/p>\n<p>The key point is that instead of referencing just a <strong>single cell<\/strong>, such as I13, we should use the I13# notation to reference the <strong>spill range<\/strong> created by the FILTER and UNIQUE function combination for the company names on the left.<\/p>\n<p>All of this is arguably <strong>overkill<\/strong> for a quick\/simple analysis, but these features make Excel more flexible and powerful, especially in cases where a model needs to be updated continuously over long periods.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The FILTER function in Excel, added in the 365 version and Excel 2021 and beyond, lets you extract multiple matching rows from a set of data based on one or more conditions; it updates the results dynamically as the data changes and creates a spill range you can reference in other formulas.<\/p>\n","protected":false},"featured_media":0,"template":"","class_list":["post-31851","biws_kb","type-biws_kb","status-publish","hentry","kb_category-excel"],"acf":[],"_links":{"self":[{"href":"https:\/\/breakingintowallstreet.com\/wp-json\/wp\/v2\/biws_kb\/31851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/breakingintowallstreet.com\/wp-json\/wp\/v2\/biws_kb"}],"about":[{"href":"https:\/\/breakingintowallstreet.com\/wp-json\/wp\/v2\/types\/biws_kb"}],"wp:attachment":[{"href":"https:\/\/breakingintowallstreet.com\/wp-json\/wp\/v2\/media?parent=31851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}