在单元格内查找和替换(特定工作表和列)

时间:2013-09-26 11:15:26

标签: vba excel-vba excel-2010 excel

在我的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等列(列)

请帮我解决这个问题。

3 个答案:

答案 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栏。取决于使用此代码时您希望如何选择列。