【问题标题】:VBA - Search & Replace offsetted valueVBA - 搜索和替换偏移值
【发布时间】:2013-08-25 05:20:08
【问题描述】:

在这里变得绝望。花一个下午的时间来完成这个,我无法弄清楚是什么导致了这里的问题。

我有一个数据工作表,在这个工作表上有一个人员列表、他们使用的系统、他们的用户名、他们的经理等。这些数据取自一个有时已经过时的外部文件,所以我编写一个将手动覆盖过时数据的宏(例如他们的经理)

此提取的数据位于名为“Extract”的工作表中。

我有另一个名为“数据”的工作表,在这个工作表中我有两个表;系统上的名称 - “NoS” - 并覆盖管理器名称 - “OMN”。这些表彼此相邻。这个想法是我的宏将在 NoS 上搜索一个名称,如果找到它,它将用 NoS 中相邻单元格中的值替换他们的管理器(右侧 7 个单元格)强>“自己的”

注意我正在使用表/命名范围,以便在添加名称时范围在 VBA 上动态更新

目前,当我运行宏时,它正在更改人员经理的名称,但是它也在更改其他行上其他单元格的值(即使“提取”中的人员名称不在“NoS”上. 我的代码和我的一些数据如下,有谁知道是什么导致了这个问题以及我该如何解决它?

Dim c, exceptionNames, extractNames, FoundOne As Range
Set exceptionNames = Range("NoS")
Set extractNames = Worksheets("Extract").Range("A1:I200")
    For Each c In exceptionNames
        With extractNames
            Set FoundOne = .Find(What:=c, LookAt:=xlPart)
            If Not FoundOne Is Nothing Then
                extractNames.Replace What:=FoundOne.Offset(0, 7), Replacement:=c.Offset(0, 1).Value, LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                ReplaceFormat:=False
            End If
        End With
    Next c
End Sub

“数据”标签

系统名称 |覆盖经理姓名

唐唐纳森 |新经理

亚伦·亚伦森 |新经理 2

大卫戴维森 |新经理 3

“提取”标签

全名 |名字 |姓氏 |部门 |用户名 |系统 |日期 |管理员权限

对不起,如果这没有多大意义。如果您需要我更详细地解释某些事情,请告诉我。

【问题讨论】:

    标签: excel vba search replace offset


    【解决方案1】:

    我可能在这里误解了您的意图,但我会在工作表“提取”的第 8 列中使用 VLOOKUP 公式。

    =IF(ISNA(VLOOKUP(Extract!A1,NameAndManager,2,FALSE)), "manager not found",VLOOKUP(Extract!A1,NameAndManager,2,FALSE))
    

    将 NoS 和 OMN 合并为一个范围,NameAndManager。

    您可以将该公式复制到“经理访问”列中的所有单元格中。

    如果您不希望出现“找不到经理”,并且希望它保持现有名称不变,只需将此公式放入新列中,如果未找到名称,则将其默认为“”。然后,您可以执行一个简单的IF 公式来创建一个包含所有正确经理名称的新列。

    【讨论】:

      【解决方案2】:

      我的第一个想法是建议您尝试使用 F8 键运行您的子程序,以查看您的代码的执行方式。这应该会有所帮助。

      但是,我认为(但我不确定,因为我无法检查)您需要添加:

         Set FoundOne = Nothing
      

      就在.Replace 方法之后但在If Not FoundOne Is Nothing Then 结构内。

      如果合适,您也可以考虑使用Exit For 退出循环。

      此外,如果我们看不到您的数据,就很难确切地提出建议。尤其是使用.Find methodLookAt:=xlPart parameter 是有风险的。

      【讨论】:

        猜你喜欢
        • 2020-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-24
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        • 2019-01-14
        相关资源
        最近更新 更多