Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Searching for text within formula

29 views
Skip to first unread message

kittronald

unread,
Jul 21, 2011, 9:36:55 PM7/21/11
to
Is it possible to search the contents of a formula ?

For example, searching for the text "SUM" in A1 where A1 is
=SUM(1,2).

Using Search appears to only work with the result of a formula.

Is this something a UDF could do ?

- Ronald K.

kittronald

unread,
Jul 21, 2011, 9:41:30 PM7/21/11
to
Forgot to add the purpose of this problem.

I'm trying to search the contents of a cell's formula and replace
the function name.

- Ronald K.

Gord

unread,
Jul 21, 2011, 9:53:03 PM7/21/11
to
What do you want to do with SUM when you find it?

Edit>Find will find cells with SUM in formulas.

Edit>Replace will allow you to replace SUM with PRODUCT or any
function name in a formula or formulas.

The SEARCH or FIND function will only work with the results of
formulas, as you surmised.

Is this a follow-up to your previous question about a variable formula
based upon the text string in B1?


Gord Dibben Microsoft Excel MVP

Gord

unread,
Jul 21, 2011, 11:03:29 PM7/21/11
to
Edit>Replace


Gord

isabelle

unread,
Jul 22, 2011, 9:18:04 AM7/22/11
to
hi,

x = Application.Search("SUM", Range("A1").Formula)

--
isabelle

kittronald

unread,
Jul 22, 2011, 7:08:44 PM7/22/11
to
Gord,

Yes, I'm taking a different tack on globally changing a function.

I've used SEARCH so many times, I forgot I could record a macro
using Home\Find & Select\Find or Replace within a formula.

Of course, I realized that shortly after pressing the Send button
on the second post of this thread.

Thanks for your attention.


- Ronald K.

kittronald

unread,
Jul 22, 2011, 7:24:03 PM7/22/11
to
Isabelle,

That's close to what I was trying to accomplish.

How could I shorten the macro below to select Sheet1, replace the
text "Sum" with "Product" in the formula only in the named cell on
that worksheet called "First_Cell" ?

Sub Test()
'
' Test Macro
'

'
Sheets("Sheet1").Select
Application.Goto Reference:="First_Cell"
ActiveCell.Replace What:="Sum", Replacement:="Product",
LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False,
_
ReplaceFormat:=False
Cells.Find(What:="Sum", After:=ActiveCell, LookIn:=xlFormulas,
LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:=False _
, SearchFormat:=False).Activate
End Sub


I need to find a good book on writing macros in Excel.


- Ronald K.

isabelle

unread,
Jul 22, 2011, 10:11:24 PM7/22/11
to
hi Ronald,

Sub Macro1()
x = Sheets("Sheet1").Range("First_Cell").Formula
y = Application.Substitute(x, "PRODUCT", "SUM")
Sheets("Sheet1").Range("First_Cell").Formula = y
End Sub

Sub Macro2()
x = Sheets("Sheet1").Range("First_Cell").Formula
y = Application.Substitute(x, "SUM", "PRODUCT")
Sheets("Sheet1").Range("First_Cell").Formula = y
End Sub

--
isabelle

kittronald

unread,
Jul 23, 2011, 7:18:34 PM7/23/11
to
Isabelle,

I added two names to the macro.


Sub Macro1()
x = Sheets("Sheet1").Range("First_Cell").Formula
y = Application.Substitute(x,

Sheets("Sheet1").Range("Current_Function"),
Sheets("Sheet1").Range("Selected_Function"))


Sheets("Sheet1").Range("First_Cell").Formula = y
End Sub


The name "Current_Function" comes from using the SEARCH function to
find the current function in "First_Cell".

The name "Selected_Function" changes based on selecting a value
from a ComboBox.

It works, but for brevity, do I really need to write
"Sheets("Sheet1").Range("NAME") for each argument ?


- Ronald K.

kittronald

unread,
Jul 23, 2011, 8:47:44 PM7/23/11
to
Isabelle,

Regarding the name "Current_Function" mentioned above, I haven't
found a way to search for text in a cell's formula using a function.

Is this something that should be done with a UDF ?

For example, SearchFormula(find_text,within_text) where find_text
could be a named range.

- Ronald K.

isabelle

unread,
Jul 24, 2011, 9:03:32 AM7/24/11
to
hi,

not because they're all cells named , but otherwise you can write

With Sheets("Sheet1")
x = .Range("First_Cell").Formula
y = Application.Substitute(x, .Range("Current_Function"), .Range("Selected_Function"))


.Range("First_Cell").Formula = y

End With

--
isabelle

kittronald

unread,
Jul 24, 2011, 7:49:16 PM7/24/11
to
Isabelle,

Thanks ... that works and is a lot easier to read !

I'm stuck on creating a UDF that will search a cell's formula for
specific text.

=SearchFormula(find_text,within_text) where find_text could
be a single value or a multi-valued named range.

For example. ...

If A1 contained =VLOOKUP("Two",$A:$C,3,FALSE)

and D1=One, D2=Two, D3=Three

and $D$1:$D$3 was a named range called "Numbers"

The formula would look like ...

=SearchFormula(Numbers,A1) and would return the matched value
- in this case "Two".

- Ronald K.

isabelle

unread,
Jul 24, 2011, 8:38:29 PM7/24/11
to
hi,

i'm not sure if my understanding is correct for your request,

Sub test()
MsgBox SearchFormula(Range("A1"))
End Sub

Function SearchFormula(rng As Range) As String
x = Split(rng.Formula, Chr(34))
SearchFormula = x(1)
End Function

--
isabelle

kittronald

unread,
Jul 25, 2011, 12:31:11 AM7/25/11
to
Isabelle,

Thank you for all your help.

Can you recommend a book for learning how to write UDFs and Excel
macros ?

- Ronald K.

isabelle

unread,
Jul 25, 2011, 10:10:16 AM7/25/11
to

kittronald

unread,
Jul 26, 2011, 4:57:30 PM7/26/11
to
Isabelle,

OK, it figures that as soon as I declare something working ... it
stops working.

When I run the macro, I get the following error:

Run-time error '1004'

Application-defined or object defined error

When I click on the Debug button, the Visual Basic editor
highlights the following line:

y =
Application.Substitute(x, .Range("Current_Function"), .Range("Selected_Function"))

Any ideas ?

- Ronald K.

isabelle

unread,
Jul 26, 2011, 5:36:41 PM7/26/11
to
hi,

on which excel version are you working ?
can you show your code ?

--
isabelle

kittronald

unread,
Jul 26, 2011, 6:24:39 PM7/26/11
to
Isabelle,

I'm using Excel 2007 SP2.

Sub Macro_Change_Function()
'
' Macro_Change_Function Macro
'

'
With Sheets("Data")
x = .Range("First_Data_Cell").Formula


y =
Application.Substitute(x, .Range("Current_Function"), .Range("Selected_Function"))

.Range("First_Data_Cell").Formula = y
End With
Application.Goto Reference:="First_Data_Cell"
Range(Selection, Selection.End(xlToRight)).Select
Selection.FillRight
Selection.SpecialCells(xlCellTypeLastCell).Select
Selection.FillDown
End Sub

Changes I made:

1) Changed the worksheet name from Sheet1 to Data

2) Changed the name "First_Cell" to "First_Data_Cell"

3) Added VBA code for filling right and down

- Ronald K

isabelle

unread,
Jul 26, 2011, 7:33:28 PM7/26/11
to
did you put on one line ?


y = Application.Substitute(x, .Range("Current_Function"), .Range("Selected_Function"))


--
isabelle

kittronald

unread,
Jul 26, 2011, 7:43:09 PM7/26/11
to
Isabelle,

Yes, but the line got wrapped when I pasted it in the posting
above.

- Ronald K.

isabelle

unread,
Jul 26, 2011, 9:12:56 PM7/26/11
to
hi Ronald,

ok, i had tried to reproduce the bug but i was not able,
i prepared a littel file. can you tell me if there the same problem

http://cjoint.com/?AGBdlOkiKEu

--
isabelle

kittronald

unread,
Jul 27, 2011, 1:58:56 AM7/27/11
to
Isabelle,

Thank you for going the extra distance to create your example
worksheet.

I downloaded your file and I think I see the problem in my
workbook.

With my limited development skills, I deduced the problem as being
caused by my workbook using two worksheets.

The cells for the names "Current_Function" and "Selected_Function"
exist on a worksheet called "Settings" as does the button that's
associated with the macro.

The name "First_Data_Cell" exists on the worksheet called "Data".

With the macro you created, it appears the With Sheets("Data") line
sets a default for everything between With and End With.

By prefixing the "Current_Function" and "Selected_Function" names
with "Sheets("Settings")", the macro works.

Below is the functioning macro:


Sub Macro_Change_Function()
'
' Macro_Change_Function Macro
'

'
With Sheets("Data")
x = .Range("First_Data_Cell").Formula
y = Application.Substitute(x,

Sheets("Settings").Range("Current_Function"),
Sheets("Settings").Range("Selected_Function"))


.Range("First_Data_Cell").Formula = y
End With
Application.Goto Reference:="First_Data_Cell"
Range(Selection, Selection.End(xlToRight)).Select
Selection.FillRight

Range(Selection,
Selection.SpecialCells(xlCellTypeLastCell)).Select
Selection.FillDown
End Sub


Thanks for hanging in there.

For the time being, ... it works (fingers and toes crossed) :b


- Ronald K.

0 new messages