This will be a gross oversimplification, but: A CPU is good at performing hundreds of different operations on a small set of data, in sequence. A GPU is good at performing hundreds of different copies of the same operation on pieces of a large set of data all at once (in parallel).
A single CPU core executes a single program at a time, running on a single set of data. CPUs are optimized to do this very fast, and use all kinds of clever tricks to do so, regardless of what the program does, how it is structured, how it’s data is structured, etc. If you have multiple CPU cores (e.g. 2-4 in a modern desktop), each runs a separate program totally independently. And if you have more programs running on your computer than cores available, the CPU cores divide their time between each program, still running just one at a time.
A GPU also executes a single program at a time, but it can perform the operations defined by that program in parallel on many different sets of data at once. A GPU might have 100-200 individual “compute units”. Each compute unit individually is much simpler and slower than a CPU core, and the compute units must also operate in lockstep: they can’t run different programs simultaneously, or even different paths of execution within the same program, e.g. two different branches of an if statement. However, if your program and data are structured in such a way that you can process 100-200 different “streams” or segments of your data identically and in parallel, they provide an enormous speedup.
This architecture (unsurprisingly) is very well-suited for graphics work, and certain computational tasks (BitCoin “mining” is simply repeatedly calculating a SHA hash with new random data until you find a hash with a sufficient number of leading zeroes). But they are not suited for general-purpose computation, primarily because of the limitations on flow control and branching: it is very rare in general purpose computation to have to perform the same set of operations identically on hundreds of different elements of data. Most general purpose computation involves performing hundreds of different operations in linear order on a small set of data, which is what a CPU is good for.
Also, programs still have to be specially written for GPUs: there are not any mature tools that will automatically port a program written for a general-purpose CPU into optimized GPU code.
A discrete-time numerical simulation, depending on the specific application, is actually probably extremely well-suited to execution on a GPU, but Excel in general certainly is not. You would have to write the simulation in a GPU-specific language in order for it to run at all, and careful structuring of the program and the layout of it’s data to avoid unnecessary loops, branching, etc. would be required to get optimal performance.