Automatic "Transfer" Matcher with Clickable Links (Google Sheets version)

Overview

This is a Google Sheets version of this Excel solution I posted a while ago (🏆 Automatic "Transfer" Matcher with Clickable Links **UPDATED 12/5/24** - #5 by alan.heatherley).

This solution provides a clickable link in your Transaction sheet that takes you to the other side of the transfer. It attempts to make the link automatically, but you have the option to make the link manually.

Installation

The sheet is available here: Transfer Link Ext - Google Sheets

Copy the Transfer Link Ext sheet into your Tiller sheet, then make a new column on your Transaction Sheet, with this formula in the row 1 cell:

={"Transfer Link";
   MAP('Transfer Link Ext'!W3,
      LAMBDA(dt,
         IF(ISNA(VLOOKUP(ROW(dt),HSTACK(INDIRECT('Transfer Link Ext'!P1),INDIRECT('Transfer Link Ext'!S1)),2,false)),
            IFERROR(1/0),
            IF(ISNUMBER(VLOOKUP(ROW(dt),HSTACK(INDIRECT('Transfer Link Ext'!P1),INDIRECT('Transfer Link Ext'!S1)),2,false)),
               HYPERLINK('Transfer Link Ext'!B12&'Transfer Link Ext'!B1&'Transfer Link Ext'!B13&'Transfer Link Ext'!B2&'Transfer Link Ext'!B14&'Transfer Link Ext'!B7&VLOOKUP(ROW(dt),HSTACK(INDIRECT('Transfer Link Ext'!P1),INDIRECT('Transfer Link Ext'!S1)),2,false)&":"&'Transfer Link Ext'!B8&VLOOKUP(ROW(dt),HSTACK(INDIRECT('Transfer Link Ext'!P1),INDIRECT('Transfer Link Ext'!S1)),2,false),'Transfer Link Ext'!B9),
               'Transfer Link Ext'!B6))))
}

Setup

The top 2 entries here are critical for the hyperlinks to work. The Tiller Sheet ID is embedded in the URL for your sheet. While looking at your sheet, copy the highlighted section from your browser bar:
https://docs.google.com/spreadsheets/d/<SHEET ID>/edit

To get the GID, make sure you’re looking at the Transactions tab, and copy the section of the URL after the “gid=”:
https://docs.google.com/spreadsheets/d/<SHEET ID>/edit?gid=<GID>

The Days Before and Days After options tell the auto-matcher how far forward and backward in time to look for a possible match for the transfer. If not enough of your transfers are being auto-matched, try making these numbers smaller.

The Transfer Type Name is the Type from your Categories sheet that your transfer categories belong to. This is how the Transfer Matcher knows which transactions to look at.

“Need help message” - this shows on the transfer when it can’t be auto-matched to another transaction

Hyperlink Start Column and Hyperlink End Colulmn - these define how much of the matching transaction row is selected when you click the link

Hyperlink friendly name - the text that appears on the hyperlink

Unfortunately there’s a high chance of a circular dependency depending on where in the Transaction sheet you put the Transfer Link column, so I couldn’t make the Sheet Lookup automatic for the Transaction sheet. Manually set the columns for your Transaction sheet here.

Usage

After everything is setup, you should see some links appear like this:

Clicking the link will take you to the matching transaction.

If you see some with the Need Help message:

Than you need to flip to the Transfer Link Ext sheet and look at the center section:

Incoming transactions are listed in the left-hand dropdown, and outgoing transactions are in the right-hand dropdown.

The dropdown is broken into sections - Unmatched Transfers, Manually Matched transfers, and Auto Matched transfers. You can use this section to manually set any unmatched transfers, as well as override an auto-matched transfer if it matched to the wrong transaction.

Permissions

Is it ok for others to copy, use, and modify your workflow?

Sure!

It’s working! i’m starting to play with it. Thanks a lot!

1 Like

This seems to have made my sheet really slow. I have ~4500 transactions in my sheet and about 60 categories 10 of which are in the ‘transfer’ group.

I’m trying to run “Sheet Size Audit Tool”^ to see what might be affecting performance, but it’s script has timed-out twice with “execution time exceeded” message.

Size My Sheet says:

Each Google Sheet spreadsheet can support up to 10 million cells. Your spreadsheet is currently 12% full with 1,172,613 cells.

Your largest sheet is “Balance History Tracker”, which contains 224,158 cells.

^ Slow Google Sheets? Here are 27 techniques you can try right now

1 Like

HI @ramerkw, I’m sorry to hear that! What happens if you delete the Transfer Link formula from the Transactions sheet? Does your performance return to normal?

For reference, I have 6200+ transactions, and about 700 of those are transfers, and I don’t see any performance issues with day-to-day stuff. Filling Tiller transaction data and adding manual transactions is a bit slower, but I added a “formula kill switch” that I flip before running those functions (I added the formula kill switch to a bunch of my reports, this transfer matcher, and a running balance I added to my Transaction sheet).

1 Like

I was going to retry adding your worksheet to my collection w/o adding the formula column to see how it goes.

This isn’t performance related, but there will be an unwanted change to this B2:B range if/when a row is inserted above row 2 (e.g. Manual Transaction or user editing).
B2:B → B3:B, etc. for every time that happens.

Wrapping the range inside a string and then using INDIRECT will fix that :slight_smile:
MAP(INDIRECT("B2:B"),

1 Like

I have also run the same audit at one time on my spreadsheet and shared my results.
Deleting any blank rows in the Transactions and Balance History could be helpful.

Maybe the Balance History Tracker is a slower performance contributor :thinking:

Here are a couple Balance History trimming solutions to consider:
Trim Balance History
Like “Trim Balance History”, but lossless

1 Like

Thank you for that tip, @Mark.S! I’ve updated the instructions to include that.

-Alan

2 Likes

Actually, @Mark.S, on second thought, I’m going to update it to use the Sheet Lookup value in the Transfer Link Ext sheet, since that will eliminate the possibility of shifting down a row, as well as eliminate scanning the blank rows after the Transactions data.

Hopefully that will help with performance, too.

-Alan

2 Likes

This is great and exactly what I have been looking for - @alan.heatherley.

My goal was to make sure that I have all transfer records matched and reconciled when I “close out” my books. However, It would be great if we could run this formula once a month so that it doesn’t need to sit in our template and kill performance

My true solution:

  1. Come into the sheet once a month - giving start and end dates (this will help with performance and to start off with years of data to review). It will exclude any transactions that have matches already
  2. Have all the automatic matches fill onto the Transaction sheet while all the manual records needed for review pop up as they do now.
  3. Once the manual review is completed it should fill onto the Transaction sheet as well.
  4. We will then be able to go into the Transaction sheet and Copy and Paste the data without any formulas to store it statically
  5. There should be a data validation and conditional logic set on the Linked Transfer column to make sure that all the datas are correct/valid

It would be amazing if we could do something like this. (I gave up after tinkering with your formulas to make this happen :slight_smile: )

1 Like

Hi @rshahk! I’m glad you like it. I have some thoughts on your wish list items:

Point 1. For my own personal use, I added a switch that turns off the transfer links when I don’t need it or for performance reasons. For example, if I’m about to add some transactions to the Transactions sheet. It’s actually pretty easy to do yourself:
a. Pick a blank cell and add a data validation dropdown of TRUE or FALSE (I did mine in cell B18)
b. Modify the formula in K3 to add a check on that cell. For example, =IF(B18,[existing filter formula],IFERROR(1/0))
c. Now, when you change B18 to FALSE, the core formula that drives the transfer matcher will blank out, and you won’t see the transfer links anymore. You can turn it back on at the end of the month or as necessary to check your transfers are all matching up. The auto-matches will be recalculated when you turn it back on, but notably, the manual matches you made in columns E and F will persist, so you don’t need to redo them every time.

Point 4. The problem with storing the links statically is that the targets move around the sheet (when adding new transactions or sorting the sheet based on different criteria). So, unfortunately, the links become stale almost as soon as they’re solidified.

Point 5. The current validation criteria use 2 data points: a pre-defined window of time before and after the transaction date, and that the absolute value of the transactions is equal. What other criteria do you think would be helpful to add?

Thanks for your feedback!

-Alan

1 Like