Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Excel 如何删除单元格vba中符号或短语后的文本_Excel_Vba - Fatal编程技术网

Excel 如何删除单元格vba中符号或短语后的文本

Excel 如何删除单元格vba中符号或短语后的文本,excel,vba,Excel,Vba,我正在尝试编写一个宏,该宏将循环遍历一大组行(一个特定列),并在找到特定单词时删除文本。不幸的是,我没有取得任何进展,我希望社区能够提供帮助 这一行的一个例子是 “一个”是指一个人坐在一张桌子上,一个“六十六个”是指一个人在工作和生活中的时间 宏完成其任务后的预期结果是: “一个”Lorem ipsum dolor sit amet,献祭精英 所以所有以“六十六”开头和之后的内容都会被删除 到目前为止,我掌握的代码是: Sub removeData() Dim i As Long Dim la

我正在尝试编写一个宏,该宏将循环遍历一大组行(一个特定列),并在找到特定单词时删除文本。不幸的是,我没有取得任何进展,我希望社区能够提供帮助

这一行的一个例子是

“一个”是指一个人坐在一张桌子上,一个“六十六个”是指一个人在工作和生活中的时间

宏完成其任务后的预期结果是:

“一个”Lorem ipsum dolor sit amet,献祭精英

所以所有以“六十六”开头和之后的内容都会被删除

到目前为止,我掌握的代码是:

Sub removeData()

Dim i As Long
Dim lastRow As Long

lastRow = Cells(Rows.Count, "C").End(xlUp).Row

For i = 2 To lastRow

    If InStr(i.Value, "sixty_six") > 0 Then
        i.Value = Left(i.Value, InStr(i.Value, "sixty_six") - 1)
    End If

Next i


End Sub

我获取的错误状态为“无效限定符”,但不确定如何修复它


提前感谢您的帮助。

首先,声明一份工作表,以便您可以在此处正确限定您的对象。您也在一个无效的范围内循环-请参阅下面一列上所有行的正确循环方式(假设要更改的字符串位于
列C


假设您的值
“六十六”
将出现一次根本不出现,您可以使用
拆分
将字符串转换为两个元素,其中:

  • 第一个元素是“六十六”之前的所有元素
  • 第二个元素是“六十六”之后(包括在内)的所有内容
如果字符串中没有出现“六十六”,则整个字符串将保存在第一个元素中



可供替代的 您只需使用搜索和替换(CTRL+F),使用通配符搜索
“sixth_six”*
和替换
(空白字符串),就可以避免VBA

突出显示目标列并选择“全部替换”


@要调用非excel解决方案,请首先声明一个工作表,以便在此处正确限定对象。您也在一个无效的范围内循环-请参阅下面一列上所有行的正确循环方式(假设要更改的字符串位于
列C


假设您的值
“六十六”
将出现一次根本不出现,您可以使用
拆分
将字符串转换为两个元素,其中:

  • 第一个元素是“六十六”之前的所有元素
  • 第二个元素是“六十六”之后(包括在内)的所有内容
如果字符串中没有出现“六十六”,则整个字符串将保存在第一个元素中



可供替代的 您只需使用搜索和替换(CTRL+F),使用通配符搜索
“sixth_six”*
和替换
(空白字符串),就可以避免VBA

突出显示目标列并选择“全部替换”


@BigBen用于调用非excel解决方案

对目标值(
“Sixth_six”
)进行拆分
),然后输出结果数组的第一个元素
i
是一个
长的
,因此没有
。您还可以使用Find并用通配符替换:Find
“Sixth_six”*
i
是一个
长的
(2,3,4)…:-)。在
单元格中使用它
或在
范围内使用它
。顺便说一句,您不需要在目标值上使用循环(或VBA)。
拆分
“六十六”
)然后输出结果数组的第一个元素
i
是一个
Long
,因此没有
.Value
。您也可以使用Find并替换为通配符:Find
“sixth_six”*
i
是一个
Long
(2,3,4):-)。在
单元格中使用它
或与
范围一起使用它
。顺便说一句,这里不需要循环(或VBA)。值得注意的是,您还可以在VBA中重新创建查找和搜索功能,并删除循环altogetherMay I建议的需要:
ws.Range(“C”&I)=Split(ws.Range(“C”&I),“六十六”)(0)
=)对
拆分的赞誉
值得注意的是,您还可以在VBA中重新创建“查找和搜索”功能,并且不再需要循环altogetherMay I sugest:
ws.Range(“C”和I)=Split(ws.Range(“C”)和“六十六”)(0)
=)对
拆分的赞誉
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")

Dim i As Long, lr As Long
Dim arr

lr = ws.Range("C" & ws.Rows.Count).End(xlUp).Row

For i = 2 To lr
    arr = Split(ws.Range("C" & i), """sixty_six""")

    ws.Range("C" & i) = arr(0)

    arr = ""
Next i