我正在尝试创建一个模块,该模块将为我的团队格式化Excel电子表格。一栏将包含单词“ CPT”和各种带有说明的CPT代码。 我需要删除5位数CPT代码之后的所有文本(CPT描述),但也要在其他单元格中保留CPT这个词。
例如:S列的第6行仅包含单词“ CPT”(未用引号引起来) 然后,S列第7行包含文本“ 99217观察护理出院”
此设置在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
当我尝试运行它时,会出现各种“编译错误”
答案 0 :(得分:0)
您的第一个错误将在这里发生:
ActiveSheet.Range("S6" & Rows.Count).End(xlUp).Text
因为您正尝试从.End(xlUp)
的{{1}}开始的最近使用范围中检索文本,这大约是Excel中行限制的58倍。您可以将Range("S61048576")
更改为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 If
之内,例如
For-Next
编辑:
出于技术准确性的考虑,您的第一个错误实际上是分解的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-Next
,因为您甚至无法编译执行代码,以碰到另外两个错误。
答案 1 :(得分:0)
我会做不同的事情。
给出:
CPT
的单元格下面的单元格
CPT
的所有大写字母和仅该内容。如果不是这种情况,则可以轻松修改。CPT
的单元格,其中下面的单元格不包含CPT代码,那么我们还必须检查下面的单元格的内容,以查看它是否看起来像CPT代码。所以我们只使用Range.Find
方法:
Sub CPT()
Dim WS As Worksheet, R As Range, C As Range
Dim sfirstAddress As String
Set WS = Worksheets("sheet4")
With WS.Cells
Set R = .Find(what:="CPT", LookIn:=xlValues, lookat:=xlWhole, _
MatchCase:=True)
If Not R Is Nothing Then
sfirstAddress = R.Address
Set C = R.Offset(1, 0)
C.Value = Left(C.Value, 5)
Do
Set R = .FindNext(R)
If Not R.Address = sfirstAddress Then
Set C = R.Offset(1, 0)
C.Value = Left(C.Value, 5)
End If
Loop Until R.Address = sfirstAddress
End If
End With
End Sub
如果保证该序列仅在列S
中,我们可以更改
With WS.Cells
至 With WS.Columns(19).Cells
这可能会加快速度。
您还可以通过在运行时添加关闭ScreenUpdating和Calculation来加快速度。
答案 2 :(得分:-1)
您可以简单地在工作表中使用Mid函数。 从您的问题中我了解到,您需要将数字分开并将其放在其他单元格中,这是真的吗? 为此,您可以像这样在单元格R6中编写此函数 =中(S6,1,5) 然后按Enter键并向下拖动该功能,您会发现所有包含数字和文本的单元格中都保留了数字