使用.Replace撤消ID

时间:2018-05-30 14:15:11

标签: excel vba excel-vba

第一次在这里发帖,如果我的格式不正确,请道歉。 这是我的问题(见下面我试图解决的问题): 我有一份工作清单,其中分配了工人的ID。 恩。在一张“ID表”中

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!错误,并且ID表没有变化。

提前感谢您的帮助。顺便说一下:我也看过使用Vlookup,但我不确定这真的适合我在这里做的事,也见过 This Page但这让我很困惑!

1 个答案:

答案 0 :(得分:0)

我假设在 ID表上,每个Id都位于自己的单元格中,此Id块来自 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

使用 Workers ,如:

enter image description here

ID表转换为:

enter image description here

我没有使用 .Replace ,因为 S15 这样的字符串会匹配 S1 S15 。我出于类似的原因使用Id s的单个单元格。

修改#1:

宏非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开了一个新模块
  3. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除宏:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 要使用Excel中的宏:

      1. ALT-F8
      2. 选择宏
      3. 触碰RUN
      4. 要了解有关宏的更多信息,请参阅:

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

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

        必须启用宏才能使其生效!