# Income and Expense Report with One Formula

**URL:** <https://community.tiller.com/t/income-and-expense-report-with-one-formula/34078>\
**Category:** Google Sheets\
**Tags:** google-sheets, one-formula-sheets\
**Created:** [January 17, 2026, 8:06pm UTC](https://community.tiller.com/t/income-and-expense-report-with-one-formula/34078 "2026-01-17T20:06:09Z")\
**Posts on this page:** 2\
**Page:** 2

<div class="post-metadata">

**Author:** ![Cowboy13](https://sea2.discourse-cdn.com/flex020/user_avatar/community.tiller.com/cowboy13/32/7668_2.png) [@Cowboy13](https://community.tiller.com/u/Cowboy13)\
**Post date:** [February 17, 2026, 5:26pm UTC](https://community.tiller.com/t/income-and-expense-report-with-one-formula/34078/21 "2026-02-17T17:26:58Z")

</div>

@ghsubs1

Here is the formula to sum the Income and Expenses items in Column D5:D…

```auto
=MAP(D4:D508, LAMBDA(item, 
  IF((item = "") + (item = " "),iferror(1/0), 
    LET(
      isExpense, (COUNTIFS(Categories!$A:$A, item, Categories!$C:$C, "Expense") + COUNTIFS(Categories!$B:$B, item, Categories!$C:$C, "Expense") + (item = "EXPENSE")) > 0,
      amt, IFERROR(
            SUM(FILTER(Transactions!$D:$D, 
                      (Transactions!$C:$C = item) + (Transactions!$E:$E = item) + (Transactions!$L:$L = item), 
                      Transactions!$A:$A >= $E$1, 
                      Transactions!$A:$A < $E$2+1)), 0),
      IF(isExpense, amt *-1, amt)
    )
  )
))

```

Some comments…

- Start date is in E1; end date is in E2
- The reason…`IF((item = "") + (item = " "),iferror(1/0)` is included because my Income and Expense list has a cell that has a space (" ") between the Income and Expense sections and I don’t want a value in that row
- This multiplies Expenses by -1
- This assumes you have Group (E), and Type (L) columns in the Transactions sheet, which they are not by default. If they aren’t, it won’t work. I have been able to use Query, Hstack, and lookup to create a virtual table with this info, but it slowed down the calculations on my machine. I can share if you want.
- If you created a sheet to share, you would want to make the locations of the Category and Transaction columns dynamic.

Thanks.

---

<div class="post-metadata">

**Author:** ![jono](https://sea2.discourse-cdn.com/flex020/user_avatar/community.tiller.com/jono/32/283_2.png) [@jono](https://community.tiller.com/u/jono)\
**Post date:** [September 28, 2026, 7:46pm UTC](https://community.tiller.com/t/income-and-expense-report-with-one-formula/34078/22 "2026-09-28T19:46:32Z")

</div>

I made another one formula sheet. I used Tiller’s new Holdings sheet and generated a “Holding Summary” sheet.

This sheet makes it easy to group, sort and summarize your holdings listed in the Holdings sheet.

See [Holding Summary Sheet](https://community.tiller.com/t/holding-summary-sheet/35270)

Using just one formula for everything makes the sheet very fast and allows for dynamic formatting.

[Previous page](https://community.tiller.com/t/income-and-expense-report-with-one-formula/34078.md?page=1)
