GrahamG
Structural
- Apr 24, 2009
- 3
I don't know if anyone will find this useful but I recently had to clean some data of misspellings before I could use it with VLOOKUP. I found some VBA that highlighted the misspellings but nothing to extract the actual words. Eventually with some prompts I wrote the following:-
Sub CheckSpelling
'Checks a single column of data for misspellings in the string in each cell/row
'Puts misspelled words in next column
Dim CurCell As Object
Dim strCell As String
Dim vString As Variant
Dim arrWords() As String
Dim intCount As Integer
If Selection.Columns.Count > 1 Then
MsgBox "Too many columns selected"
Exit Sub
End If
Application.ScreenUpdating = False
Application.Cursor = xlWait
intCount = 1
strCell = ActiveCell.Address
For Each CurCell In Selection
For Each vString In Split(CurCell)
If Not Application.CheckSpelling(vString) Then
ReDim Preserve arrWords(intCount)
arrWords(intCount) = vString
intCount = intCount + 1
End If
Next vString
Next CurCell
If intCount > 1 Then
Dim Destination As Range
Set Destination = Range(strCell).Offset(0, 1)
Set Destination = Destination.Resize(UBound(arrWords), 1)
Destination.Value = Application.Transpose(arrWords)
Else
MsgBox ("No misspelled words found!")
End If
Application.Cursor = xlDefault
Application.ScreenUpdating = True
End Sub
GrahamG
Sub CheckSpelling
'Checks a single column of data for misspellings in the string in each cell/row
'Puts misspelled words in next column
Dim CurCell As Object
Dim strCell As String
Dim vString As Variant
Dim arrWords() As String
Dim intCount As Integer
If Selection.Columns.Count > 1 Then
MsgBox "Too many columns selected"
Exit Sub
End If
Application.ScreenUpdating = False
Application.Cursor = xlWait
intCount = 1
strCell = ActiveCell.Address
For Each CurCell In Selection
For Each vString In Split(CurCell)
If Not Application.CheckSpelling(vString) Then
ReDim Preserve arrWords(intCount)
arrWords(intCount) = vString
intCount = intCount + 1
End If
Next vString
Next CurCell
If intCount > 1 Then
Dim Destination As Range
Set Destination = Range(strCell).Offset(0, 1)
Set Destination = Destination.Resize(UBound(arrWords), 1)
Destination.Value = Application.Transpose(arrWords)
Else
MsgBox ("No misspelled words found!")
End If
Application.Cursor = xlDefault
Application.ScreenUpdating = True
End Sub
GrahamG