2015-12-11 38 views
1

我在单个列中列出了关键字。我需要将任何拼写错误的单词插入相邻的单元格以进行手动审阅。只有拼写错误的单词,而不是整个单元格。将拼写错误的单词复制到相邻列

这个VBA脚本让我大部分的方式,但我不知道如何复制拼写错误的单词。偏移量(0,1)也出错,但偏移量(1,0)起作用。 WTH?

现在我很高兴看到第一个拼写错误的单词被复制,但是如果它可以循环并将它们全部插入单元格的右侧,那就太好了。

Excel VBA Delete Row If Mispelled Word

Sub DeleteMispelledCells() 
Dim lRow As Long, cl As Range 

With ActiveSheet 
For lRow = .UsedRange.Rows.Count To 1 Step -1 
    For Each cl In .Rows(lRow) 
    If Not IsEmpty(cl) Then 
     If Not Application.CheckSpelling(Word:=cl.Text) 
     cl.Copy 
     cl.Offset(1, 0).Insert 'The Offset(0, 1) throws an error. Why? 
     Application.CutCopyMode = False 
     Exit For 
     End If 
    End If 
    Next cl 
Next lRow 
End With 
End Sub 
+1

每个单元格是否有多个单词? –

+3

这看起来像Cargo Cult Programming(https://en.wikipedia.org/wiki/Cargo_cult_programming)。例如,您询问是否检查单个列,但是您使用的是引用整个使用范围的代码。此外,你正在向后循环,这在这种情况下有点毫无意义,因为你没有删除。在另一个笔记 - 你真的想要*插入*新细胞?您可以直接将数值从一个单元格复制到另一个单元格,而不需要使用像“Copy”或“Paste”或“Ins​​ert”这样的方法。 –

+0

每个单元有多个单词,从1个单词到最多20个单词。 向后循环是删除整行的原始代码b/c的功能。我100%找到复制/粘贴到B列的拼写错误的单词。 – ComputerGiant

回答

0

使用VBA代码尝试此小UDF()

Public Function CheckPhrase(r As Range) As String 
    Dim MyText As String, ary, a 
    MyText = LCase(r(1).Text) 
    MyText = FixUp(MyText) 
    ary = Split(MyText, " ") 

    Dim oxlAp As Object 
    Set oxlAp = CreateObject("Excel.Application") 

    CheckPhrase = "" 
    For Each a In ary 
     If Not oxlAp.CheckSpelling(a) Then 
     CheckPhrase = CheckPhrase & vbCrLf & a 
     End If 
    Next a 

    oxlAp.Quit 
    Set oxlAp = Nothing 
End Function 



Public Function FixUp(sin As String) As String 
    Dim t As String, ary, a 
    t = sin 
    ary = Array(",", ".", ";", ":""'") 

    For Each a In ary 
     t = Replace(t, a, "") 
    Next a 
    FixUp = t 
End Function 

例如:

enter image description here

注:在含有UDF()细胞

打开文本换行。

+0

OMG它的工作原理!唯一的问题是,它将同一行上的多个拼写错误的单词聚拢在一起。可以,而只是在他们之间留下一个空间?我正在使用Excel 2013. – ComputerGiant

+0

明白了。谢谢:)给我你的贝宝地址,我会给你买一杯啤酒! CheckPhrase = CheckPhrase&“”&a – ComputerGiant

+0

@ComputerGiant感谢您的反馈! –

相关问题