我在Excel中有两列,所有单元格都包含文本字符串。 A列包含8000个细胞,B列包含3000个细胞。我需要检查B列中的每个单元格,看它是否包含单元格A1中的字符串。如果是这样,我需要删除该文本,留下其余的字符串。然后我需要为单元格A2,A3等执行相同的操作,一直到单元格A8000。这需要永远手动完成,我知道对于VBA程序员来说应该很容易,但我是一个新手并且在哪里开始挣扎。感谢。
答案 0 :(得分:1)
这是一个使用BULK替换的简单方法
Sub Sample()
Dim ws As Worksheet
Dim lRow As Long
Set ws = Sheets("Sheet1")
With ws
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 1 To lRow
.Columns(2).Replace What:=.Range("A" & i).Value, _
Replacement:="", _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False, _
SearchFormat:=False, _
ReplaceFormat:=False
Next
End With
End Sub
答案 1 :(得分:1)
有一种比Wolf5370更快的方式。您可以遍历A列中的所有单元格,并在B列中找到它们找到的值。
这样的事情应该让你开始。
Option Explicit
Sub Replace()
Dim wks as Worksheet
Set wks = Worksheet("Shee1") 'change to suit your needs
With wks
Dim rngLook as Range, cel as Range
Set rngLook = Intersect(.UsedRange,.UsedRange.Offset(1),.COlumns(1))
For each cel in RngLook
.Columns(2).Replace cel.Value, "", xlPart
Next
End With
End Sub
答案 2 :(得分:0)
最初我认为是排序(每列)和向下走的列(主/事务风格)。但是,我注意到你在谈论子串,所以排序顺序无济于事。 唯一的方法是将一个循环嵌套在另一个循环中,并检查所有8000个单元格3000次。
dim c1 as integer, c2 as integer
for c2=1 to 3000
for c1=1 to 8000
cells(c1,1).value = Replace(cells(c1,1).value, cells(c2,2).value, "")
next c2
next c1
请注意,这是从我的头顶手工制作(所以预计会出现错别字)。基本上它循环遍及我提到的所有那些时间,每次它都替换字符串 - 你可以通过将单元格(c1,1)复制到执行替换的变量并在写回之前查看它是否发生变化来做 - 通过测试它几个周期,看看哪个更快。
编辑:修正了一些拼写错误(实际上错过了第二学期的'价值'一词)
PS:如果单元格混乱,您可以使用Range代替 - 将Cells(c1,1)
替换为Range("A" &c1)
,将Cells(c2,2)
替换为Range("B"&c2)
答案 3 :(得分:0)
不确定您是否仅限于VBA,或者是否可以接受添加列:如下所示: Excel有一个内置的工作表函数,称为替代,可以满足您的需要(取决于Excel版本)
注意在B3中如何显示D3 TH,它的THIS和IS被删除。
EDIT 啊,但现在我看到你需要“循环”这个。我将不得不重新考虑我的回应。
答案 4 :(得分:0)
不需要VBA。只需在C列中填写此公式:
=VLOOKUP($B1,A:A,1,0)
假设您的数据在B1中开始,请将此公式填写为B3000。
现在,如果在A列中找到B列中的值,您将在C列中看到匹配值,否则您将看到#N/A
。
最后,按列C中的值对列B和列C进行排序,然后删除不需要的列。
这应该需要30秒。
我确信会有人能够发布与上述相同的VBA。