0

我在 Excel 中有两列,所有单元格都包含文本字符串。A 列包含 8000 个单元格,B 列包含 3000 个单元格。我需要检查 B 列中的每个单元格,看看它是否包含单元格 A1 中的字符串。如果是这样,我需要删除该文本,保留字符串的其余部分。然后我需要对单元格 A2、A3 等执行相同的操作,一直到单元格 A8000。这将永远需要手动完成,我知道这对于 VBA 程序员来说应该很容易,但我是一个完全的菜鸟,并且在从哪里开始挣扎。谢谢。

4

5 回答 5

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
于 2012-06-26T20:10:40.673 回答
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
于 2012-06-26T20:11:23.580 回答
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)复制到执行替换的变量并在写回之前查看它是否更改来做到这一点-在a上测试它几个周期,看看哪个更快。

编辑:修正了几个错别字(实际上错过了第二个学期的“价值”一词)

PS:如果单元格令人困惑,您可以改用 Range -替换Cells(c1,1)Range("A" &c1)Cells(c2,2)Range("B"&c2)

于 2012-06-26T19:57:18.983 回答
0

不需要VBA。只需在 C 列中填写此公式:

=VLOOKUP($B1,A:A,1,0)

假设您的数据从 B1 开始,请将此公式填入 B3000。

现在,如果在 A 列中找到 B 列中的值,您将在 C 列中看到匹配值,否则您将看到#N/A.

最后,按 C 列中的值对 B 列和 C 列进行排序,然后删除您不想要的那些。

这应该需要 30 秒。

我敢肯定会有人来发布与上述等效的VBA。

于 2012-06-26T20:10:49.570 回答
0

不确定您是否仅限于 VBA 或者是否可以接受添加列:如下所示:Excel 有一个内置的工作表功能,称为替代品,可以满足您的需要(取决于 Excel 版本)

在此处输入图像描述

请注意,在 D3 中,当在 B3 中它的 THIS 和 IS 被丢弃时,TH 是如何显示的。

编辑啊,但现在我看到你需要“循环”这个。我将不得不重新考虑我的回应。

于 2012-06-26T20:10:01.937 回答