Delete characters from a string

R

Ron

Hi,

I need some help with my code please.
I am attempting to loop though all the cells in a column and delete th
characters within a set of parentheses including the parentheses.
want the user to verify the string before deletion using a message box
I am also open to any suggestions to improve the code.

Thanks.
Ron

Sub DeleteRefNo()

Dim SearchString As String
Dim SearchChar1 As String
Dim SearchChar2 As String
Dim sStart As String
Dim sEnd As String
Dim rCount As Integer
Dim dString As String
Dim length As Integer

rCount = 2

Do

Cells(rCount, 4).Select

SearchString = ActiveCell.Value
SearchChar1 = "("
SearchChar2 = ")"

'cycle through search string
For X = 1 To Len(SearchString)

sStart = InStr(1, SearchString, SearchChar1, 1)
sEnd = InStr(1, SearchString, SearchChar2, 1)

If sStart <> 0 And sEnd <> 0 Then
length = sEnd - sStart + 1
dString = Mid(SearchString, sStart, length)
MsgBox ("Delete string? " & dString), vbYesNo
If vbYes Then
'????? statement to delete the string in dString ???????
End If
End If

Next X

rCount = rCount + 1

Loop Until IsEmpty(ActiveCell.Offset(1, 0))

Cells(1, 1).Select

End Su
 
B

Bob Phillips

Ron,

Insert these 2 lines

SearchString = Left(SearchString, sStart - 1) & Right(SearchString,
Len(SearchString) - sEnd)
ActiveCell.Value = SearchString


--

HTH

Bob Phillips
... looking out across Poole Harbour to the Purbecks
(remove nothere from the email address if mailing direct)
 
T

Tom Ogilvy

Sub DeleteRefNo()

Dim SearchString As String
Dim SearchChar1 As String
Dim SearchChar2 As String
Dim sStart As Long
Dim sEnd As Long
Dim sStrL As String
Dim sStrR As String
Dim cell As Range
Dim rCount As Integer
Dim dString As String

rCount = 2

SearchChar1 = "("
SearchChar2 = ")"
sPattern = "*" & SearchChar1 & "*" & SearchChar2 & "*"

Do

Set cell = Cells(rCount, 4)
SearchString = cell.Value


If SearchString Like sPattern Then
sStart = InStr(1, SearchString, SearchChar1, 1)
sEnd = InStr(1, SearchString, SearchChar2, 1)

sStrL = Left(SearchString, sStart)
sStrR = Mid(SearchString, sEnd)
dString = Mid(SearchString, sStart, sEnd - sStart + 1)

MsgBox "Delete string? " & dString, vbYesNo
If vbYes Then
cell.Value = Left(sStrL, Len(sStrL) - 1) & _
Right(sStrR, Len(sStrR) - 1)
End If
End If


rCount = rCount + 1

Loop Until IsEmpty(cell.Offset(1, 0))

Cells(1, 1).Select

End Sub
 
J

Jonathan Rynd

sStart = InStr(1, SearchString, SearchChar1, 1)
sEnd = InStr(1, SearchString, SearchChar2, 1)

You want to find things BETWEEN parentheses, right?

So you should use this:
sStart = InStr(1, SearchString, SearchChar1, 1)
sEnd = InStr(sStart, SearchString, SearchChar2, 1)
 
M

Macroman

Would the "Replace" function be better ?

myVar = "this is a test"
newVar = Replace(myVar, "test", "")
MsgBox newVar

Macroman


Tom Ogilvy said:
Sub DeleteRefNo()

Dim SearchString As String
Dim SearchChar1 As String
Dim SearchChar2 As String
Dim sStart As Long
Dim sEnd As Long
Dim sStrL As String
Dim sStrR As String
Dim cell As Range
Dim rCount As Integer
Dim dString As String

rCount = 2

SearchChar1 = "("
SearchChar2 = ")"
sPattern = "*" & SearchChar1 & "*" & SearchChar2 & "*"

Do

Set cell = Cells(rCount, 4)
SearchString = cell.Value


If SearchString Like sPattern Then
sStart = InStr(1, SearchString, SearchChar1, 1)
sEnd = InStr(1, SearchString, SearchChar2, 1)

sStrL = Left(SearchString, sStart)
sStrR = Mid(SearchString, sEnd)
dString = Mid(SearchString, sStart, sEnd - sStart + 1)

MsgBox "Delete string? " & dString, vbYesNo
If vbYes Then
cell.Value = Left(sStrL, Len(sStrL) - 1) & _
Right(sStrR, Len(sStrR) - 1)
End If
End If


rCount = rCount + 1

Loop Until IsEmpty(cell.Offset(1, 0))

Cells(1, 1).Select

End Sub
 
B

Bob Phillips

Probably not because you would need to construct the string to replace in a
very similar way to constructing the string without that part. Interesting
alternative, but not 'better' (IMO).

--

HTH

Bob Phillips
... looking out across Poole Harbour to the Purbecks
(remove nothere from the email address if mailing direct)

Macroman said:
Would the "Replace" function be better ?

myVar = "this is a test"
newVar = Replace(myVar, "test", "")
MsgBox newVar

Macroman
 
T

Tom Ogilvy

if the string might contain

"abc) cde ( efg ) hij"

your approach might make sense - otherwise, it doesn't make a difference.
 
R

Ron

Thanks for everyone’s prompt response. I’m new at this so it’s ver
interesting and helpful to see several options and the discussions
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top