在我的Excel文件中,我有:
A
1 10-30
2 40-45
3 30-80
任何单元格中都可以有任意数字范围。
在任何特定列(可能是任何单元格)中,我想删除从开头到连字符的所有文本。
示例:40-45将替换为45。
我之前已经问过这个问题,我得到了以下解决方案
Sub Update()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim ws As Worksheet, ur As Range, r As Range
For Each ws In Sheet
Set ur = ws.UsedRange
For Each r In ur
On Error Resume Next
r = Split(r, "-")(1)
Next
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
但是通过使用Follow脚本,所有工作表都会更新。 我希望它在选定的工作表中更新,并且只选择J,K或L等列(列)
请帮我解决这个问题。
答案 0 :(得分:2)
很抱歉,如果我在这里遗漏了一些内容,但为什么不选择列并执行Ctrl + h(替换),在查找中,写入'* - '(不带引号)并单击全部替换,不写任何内容用字段替换。
我不明白是否需要宏。再次,如果我在这里遗漏了一些东西,请道歉。
答案 1 :(得分:0)
这会将替换限制为活动工作表,列 J 至 L :
Sub Update()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim ws As Worksheet, ur As Range, r As Range
Set ur = Range("J:L").Cells.SpecialCells(xlCellTypeConstants)
For Each r In ur
If InStr(1, r.Value, "-") > 0 Then
r.Value = Split(r.Value, "-")(1)
End If
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
答案 2 :(得分:0)
您需要在所有工作表上取出for循环,并选择一个仅为所需列的范围,而不是当前它所用的整个工作表部分。这样做的基本方法:
Sub Update()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim ws As Worksheet, ur As Range, r As Range
Set ws = ActiveSheet
Set ur = ws.Range(A:A) ' sets the range as a whole column with the chosen letter
For Each r In ur
On Error Resume Next
r = Split(r, "-")(1)
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
您只需将代码中的A:A替换为您想要的任何列,例如: G:G代表G栏。取决于使用此代码时您希望如何选择列。