How to check with VBA if an excel formula has multiple terms in it?

Problem
My macro creates formulas to be displayed in word, so I don't want unnecessary brackets. The formula obtained from an excel cell will be multiplied by a factor, so a bracket will be necessary if it has many terms.

eg the factor is A20, I want the program to know that if the formula is A1, the A1*A20 is fine without bracket, however if the formula is A1+B1, then A1+B1*A20 is incorrect. It will have to be (A1+B1)*A20. I'll deal with the brackets the current function should just return if there are multiple terms.

It is fine if the answer just explains how the program should work, in case you don't use VBA. (Ideally an explanation should have enough detail for me to be able to write the correct program based on it)

Example inputs and outputs (true for multiple terms)
I: (A1-B1)/LOG(A1-B1) O: False
I: (A1+B1)/(A2-B2) O:False
I: PI()/A1 O: False
I: A1 O:False

Previous ideas
I was considering some not too elegant solutions before.
For example I could just substitute some numbers into the formula (with the factor) and see if adding a bracket returns a different value. (I think this would not always work)

I was also considering finding each + and - sign and looking for the terms next to them to see if they are enclosed in a bracket together somewhere. I'm not sure how to implement this and I can't prove to myself that it always works.

Sub Macro()res = CellRegexSimple("(A1+B1)/(A2-B2)-(C1+D1)/(C2-D2)", "[\-\+](?=\()|([\-\+])(?!.*\))")End SubFunction CellRegexSimple(Myrange As String, strPattern As String) As Boolean Dim regex As Object Set regex = CreateObject("VBScript.RegExp") Dim strInput As String If strPattern <> "" Then strInput = Myrange With regex .Global = True .MultiLine = True .IgnoreCase = False .Pattern = strPattern End With If regex.Test(strInput) Then CellRegexSimple = True Else CellRegexSimple = False End If End If Set regex = NothingEnd Function

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

you could use a function like this

Open in new window

Regards