首页 > 解决方案 > 使用 .Replace 撤消 ID

问题描述

第一次在这里发帖,如果我的格式不正确,请见谅。这是我的问题(请参阅下面我尝试解决的问题):我有一个工作列表,其中分配有工作人员的 ID。前任。在一张“IDsheet”中

Job       Id

M1       S1 S4

M2       S15

M3       S2

M4       S6          etc

在另一张“工人”中,我有

Name    ID

Andy    S1

Dave    S2

Hilda   S3

Kerri   S4            etc

我正在尝试(失败)为 excel 编写一点 VBA,以便我可以用正确的“名称”替换所有 S1、S2 等。

我环顾四周,我以为我找到了必要的代码,但我错误地实现了它,而且我缺乏 VBA 知识可能让我错误地调用它。

我的子程序是:

**

Sub StaffReplaceAll(code As String, staffid As String)

Dim fnd As String
Dim rplc As String

fnd = code
rplc = staffid

Worksheets("IDsheet").Cells.Replace _
what:=fnd, Replacement:=rplc, _
LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=True, _
SearchFormat:=False, ReplaceFormat:=False

End Sub

**

我的调用函数是:

**

Function StaffSub(inval As String, outval As String) As Integer

Call StaffReplaceAll(inval, outval)

End Function

**

在我称之为“StaffSub”的地方,我得到了#VALUE!错误,并且 IDsheet 未更改。

提前感谢您的帮助。顺便说一句:我也看过使用 Vlookup,但我不确定它是否真的适合我在这里所做的,也看到了 这个页面,但这让我很困惑!

标签: vbaexcel

解决方案


在这里,我假设在IDsheet上,每个Id都在自己的单元格中,并且这个Ids 块从B2到最多Z100。编码:

Sub david()
    Dim i As Long, N As Long, r As Range, v1 As String, v2 As String
    With Sheets("Workers")
        N = .Cells(Rows.Count, "A").End(xlUp).Row
        For i = 2 To N
            v1 = .Cells(i, "A")
            v2 = .Cells(i, "B")
            For Each r In Sheets("IDsheet").Range("B2:Z100")
                If r.Value = v2 Then r.Value = v1
            Next r
        Next i
    End With
End Sub

像这样的工人

在此处输入图像描述

IDsheet转换为:

在此处输入图像描述

我没有使用.Replace ,因为像S15这样的字符串将同时匹配S1S15Id出于类似的原因,我将单个单元格用于s。

编辑#1:

宏非常易于安装和使用:

  1. ALT-F11 调出 VBE 窗口
  2. ALT-I ALT-M 打开一个新模块
  3. 粘贴这些东西并关闭 VBE 窗口

如果您保存工作簿,宏将与它一起保存。如果您使用的是 2003 年以后的 Excel 版本,则必须将文件另存为 .xlsm 而不是 .xlsx

要删除宏:

  1. 如上所述调出 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要使用 Excel 中的宏:

  1. ALT-F8
  2. 选择宏
  3. 轻触运行

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

必须启用宏才能使其正常工作!


推荐阅读