Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在单元格内查找并替换(对于特定工作表ans列)_Vba_Excel_Excel 2010 - Fatal编程技术网

Vba 在单元格内查找并替换(对于特定工作表ans列)

Vba 在单元格内查找并替换(对于特定工作表ans列),vba,excel,excel-2010,Vba,Excel,Excel 2010,在我的Excel文件中,我有: A 1 10-30 2 40-45 3 30-80 在任何单元格中都可以有以-分隔的任何数字范围 在任何特定列(可能是任何单元格)中,我希望删除从开始到-连字符的所有文本 示例:40-45将替换为45 我以前问过这个问题,我得到了以下解决方案 Sub Update() Application.ScreenUpdating = False Application.EnableEvents = False Di

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


请帮助我解决此问题。

这将限制对活动工作表、列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

您需要在所有工作表上取出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列。这取决于您在使用此代码时选择列的准确程度。

如果我在此处遗漏了一些内容,很抱歉,但您为什么不选择该列并执行Ctrl+h(替换),然后在“查找”中,写入“*-”(不带引号)并单击“全部替换”,没有在替换为字段中写入任何内容


我不明白宏的必要性。如果我遗漏了什么,再次表示歉意。

您有什么理由更改已接受的答案吗?来到这里,要求VBA代码来解决您的问题,并接受答案,这意味着您原来的问题已经解决。选择非VBA解决方案适合超级用户,但在这里,对于stackoverflow,问题和答案都应该与编程相关。+1好建议:)