The following VBA script gets rid of unwanted characters but unfortunately only NUMBERS.
Could you please assist me, It needs to rid letters too as in the table example(bolded) below.
the Range could be anywhere from 0 to 15000+ cells
.....................................................
a new a york a times a
b new b york b times b
c new c york c watertown c ny c
6 ave 6 new 6 york 6 city 6
......................................................
The VBA script:
Sub Remove()
Application.ScreenUpdating = False
Dim R As RegExp, C As Range
For Each C In Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
If R Is Nothing Then
Set R = New RegExp
R.Global = True
R.Pattern = "\D"
C.Offset(0, 1) = R.Replace(C, "")
R.Pattern = "\d"
C = R.Replace(C, "")
End If
Set R = Nothing
Next C
Application.ScreenUpdating = True
End Sub
EDIT1
Sub Remove()
Call BackMeUp
Dim cell As Range
Dim RE As Object
Dim Whitecell As Range
Dim strFind As String, strReplace As String
Dim lLoop As Long
Dim Loop1 As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Range("A3:L3").Select
Selection.Delete Shift:=xlUp
'--------------------------------------------------Remove JUNK
Range("A3:A" & Cells(Rows.Count, 1).End(xlUp).Row).Select
On Error Resume Next
For lLoop = 1 To 100
strFind = Choose(lLoop, "~?»", "~®", "~.", "~!", "~ï", "~-", "~§", "~$", "~%", "~&", "~/", "~\", "~,", "~(", "~)", "~=", "~www", "~WWW", "~.com", "~.net", "~.org", "~{", "~}", "~[", "~]", "~ï", "~¿", "~½", "~:", "~;", "~_", "~µ", "~@", "~#", "~'", "~|", "~€", "~ä", "~ö", "~ü", "~Ä", "~Ü", "~Ö", "~+", "~<", "~>", "~nbsp", "~â", "~¦", "~©", "~Â", "~–", "~¼", "~?")
strReplace = Choose(lLoop, " ")
Selection.Replace What:=strFind, Replacement:=strReplace, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next lLoop
'--------------------------------------------------Remove Numbers
Range("A3:A" & Cells(Rows.Count, 1).End(xlUp).Row).Select
On Error Resume Next
For Loop1 = 1 To 40
strFind = Choose(lLoop, "~1", "~2", "~3", "~4", "~5", "~6", "~7", "~8", "~9", "~0")
strReplace = Choose(Loop1, " ")
Selection.Replace What:=strFind, Replacement:=strReplace, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next Loop1
'--------------------------------------------------Remove Single Letters
Set RE = CreateObject("vbscript.regexp")
RE.Global = True
RE.MultiLine = True
RE.Pattern = "^[a-z]\b | \b[a-z]\b"
For Each cell In Range("A3:A" & Cells(Rows.Count, 1).End(xlUp).Row)
cell.Value = RE.Replace(cell.Value, "")
Next
'--------------------------------------------------Remove WHITE SPACES
For Each Whitecell In Range("A3:A" & Cells(Rows.Count, 1).End(xlUp).Row)
Whitecell = WorksheetFunction.Trim(Whitecell)
Next Whitecell
'--------------------------------------------------Remove DUPES
ActiveSheet.Range("A3:A" & Cells(Rows.Count, 1).End(xlUp).Row).RemoveDuplicates Columns:=1, Header:=xlYes
ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort.SortFields.Clear
'--------------------------------------------------Copy to B - REPLACE ALL WHITE IN B
Range("A3:A" & Cells(Rows.Count, 1).End(xlUp).Row).Select
Selection.Copy
Range("B3:B" & Cells(Rows.Count, 1).End(xlUp).Row).Select
ActiveSheet.Paste
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("A:L").EntireColumn.AutoFit
'--------------------------------------------------END
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Range("a1").Select
End Sub
EDIT (deleted original answer as it was not applicable after recieving more info on what you wanted, but leaving advice)
UDPATE 2
Based one the comments below, here is how to get only occurances of two or more lowercase characters and the single spaces in-between. Instead of replacing what you DON'T want, I personally think a good way is to extract what you DO want. I have shared the below function quite a bit on this site as it's really useful. Here's an example of how to call it on the contents of Column A and put the results in Column B.
Sub test()
' Show how to run this on cells in A and transpose result in B
Dim varray As Variant
Dim i As Long
Application.ScreenUpdating = False
varray = Range("A1:A15000").Value
For i = 1 To UBound(varray, 1)
varray(i, 1) = RegexExtract(varray(i, 1), "([a-z]{2,})", " ")
Next
Range("B1").Resize(UBound(varray, 1)).Value = _
Application.WorksheetFunction.Transpose(varray)
Application.ScreenUpdating = True
End Sub
And make sure this is in the module:
Function RegexExtract(ByVal text As String, _
ByVal extract_what As String, _
Optional seperator As String = "") As String
Dim i As Long
Dim j As Long
Dim result As String
Dim allMatches As Object
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
RE.Pattern = extract_what
RE.Global = True
Set allMatches = RE.Execute(text)
For i = 0 To allMatches.Count - 1
For j = 0 To allMatches.Item(i).submatches.Count - 1
result = result & seperator & allMatches.Item(i).submatches.Item(j)
Next
Next
If Len(result) <> 0 Then
result = Right$(result, Len(result) - Len(seperator))
End If
RegexExtract = result
End Function
Your "R.Pattern = "\d" is the only line you need to change. The "\d" is a regular expression describing a "digit".
I would suggest changing "\d" to "^[a-z0-9] | [a-z0-9]\b" as a starting point.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With