首页 > 解决方案 > 需要在我的代码中排除一个单词(或字符数)

问题描述

我正在尝试创建一个模块,它将为我的团队在工作中格式化一个 Excel 电子表格。有一列将包含“CPT”一词和各种带有描述的 CPT 代码。我需要删除 5 位 CPT 代码后的所有文本(CPT 描述),但还要在其他单元格中保留单词 CPT。

例如: S 列第 6 行仅包含单词“CPT”(不在引号中) 然后 S 列第 7 行包含文本“99217 Observation Care Discharge”

此设置在整个 S 列中重复多次。

我希望第 6 行保持不变(“CPT”),但在第 7 行我只想保留“99217”

不幸的是,这是不可能手动完成的,因为有几个人需要这个宏,我们的电子表格可以在这个列中使用不同的 CPT 代码和描述重复数百次这个措辞。

我尝试过各种 If/Then 语句,If/Then/Else

Sub CPTcolumn()
Dim celltxt As String
celltxt = ActiveSheet.Range("S6" & Rows.Count).End(xlUp).Text
Dim LR As Long, i As Long
LR = Range("S6" & Rows.Count).End(xlUp).Row

For i = 1 To LR
    If InStr(1, celltxt, "CPT") Then
Next i

Else
    With Range("S6" & i)
    .Value = Left(.Value, InStr(.Value, " "))
End With
Next i

End If
End Sub

当我尝试运行它时,我得到各种“编译错误”

标签: excelvba

解决方案


您的第一个错误将发生在这里:

ActiveSheet.Range("S6" & Rows.Count).End(xlUp).Text

因为您正试图从从 开始的最后使用范围中检索文本.End(xlUp)Range("S61048576")这大约是 Excel 中行限制的 58 倍。您可能会更改Range("S6" & Rows.Count)Range("S" & Rows.Count)

您的第二个错误将发生在这里:

LR = Range("S6" & Rows.Count).End(xlUp).Row

这将是相同的错误。

这里会出现第三个错误:

For i = 1 To LR
    If InStr(1, celltxt, "CPT") Then
Next i

你不能If-End If在循环中嵌套一半的块,For-Next反之亦然,你已经完成了这两个。如果要迭代并执行If-End If每次迭代,则需要If-End IfFor-Nextlike中包含

For i = 1 To LR
    If InStr(1, celltxt, "CPT") Then
    'Is the purpose here to do nothing???
    Else
        With Range("S" & i)
            .Value = Left(.Value, InStr(.Value, " "))
        End With
    End If
Next i

编辑:

为了技术准确性,您的第一个错误实际上是您的分解For-NextIf-End If因为您甚至无法编译以执行代码以遇到其他两个错误。


推荐阅读