-1

在我的 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

但是通过使用以下脚本,所有工作表都得到更新。我希望它在选定的工作表中更新,并且只在 J、K 或 L 等选定的列中更新。(列)

请帮我解决这个问题。

4

3 回答 3

2

抱歉,如果我在这里遗漏了一些东西,但你为什么不直接选择列并执行 Ctrl+h(替换)并在查找中输入“*-”(不带引号)并单击全部替换,而不用在替换中写任何内容场地。

我不明白宏的需要。再次道歉,如果我在这里遗漏了什么。

于 2013-09-26T12:35:08.770 回答
0

这会将替换限制为活动工作表,JL列:

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
于 2013-09-26T11:38:18.930 回答
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。这取决于您在使用此代码时想要选择列的准确程度。

于 2013-09-26T11:42:12.743 回答