I do not have that use case available and would need to build it from scratch. The issue, I am guessing is that you are unable to run on Projects from the expense sheet because you do not have that reference. You need to have a reference point (lookup) that can gain access to all Projects to do a “run on” and filter on the custom Project ID match. That will give you what you are looking for. This does take extra steps to work.
For example, use an object where you can run a WFR/SWFR that will add any Projects that contain a custom Project ID. I have used Topics as an example. You can add these Projects to a topic you create and when all the Projects are updated there, you can use the Topic.Related Projects as a reference point to do the RUN ON and pull the Project with the matching custom Project id. Just one possible way of doing it. I am sure there are other ways.