Vba 使用.Replace撤消ID

Vba 使用.Replace撤消ID,vba,excel,Vba,Excel,第一次在这里发布,所以如果我的格式不正确,我深表歉意。 以下是我试图解决的问题,请参见下文: 我有一个工作列表,以及分配给他们的工人ID。 例如:一页一张 Job Id M1 S1 S4 M2 S15 M3 S2 M4 S6 etc 在另一个床单工人我有 Name ID Andy S1 Dave S2 Hilda S3 Kerri S4 etc 我试图

第一次在这里发布,所以如果我的格式不正确,我深表歉意。 以下是我试图解决的问题,请参见下文: 我有一个工作列表,以及分配给他们的工人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知识,这可能使我不能正确地调用它

我的次级程序是:

**

**

我的调用函数是:

**

**

在我叫StaffSub的地方我得到了价值!错误,并且ID表未更改

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

这里,我假设在IDsheet上,每个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
有这样的工人:

IDsheet将转换为:

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

编辑1:

宏非常易于安装和使用:

ALT-F11将显示VBE窗口 ALT-I ALT-M打开一个新模块 粘贴内容并关闭VBE窗口 如果保存工作簿,宏将与工作簿一起保存。 如果在2003年以后使用Excel版本,则必须保存 文件的格式为.xlsm而不是.xlsx

要删除宏,请执行以下操作:

如上所述打开VBE窗口 清除代码 关闭VBE窗口 要使用Excel中的宏,请执行以下操作:

ALT-F8 选择宏 触跑 要了解有关宏的更多信息,请参阅:


必须启用宏才能使其工作

如果一个作业有多个ID,那么它们之间总是有一个空格吗?还是在单独的单元格中?只有一个空格,但我可以先拆分单元格,如果这使得编码更容易,那么StaffSub函数似乎是多余的。如果你从工作表中调用一个函数,除了它所在的单元格外,它不能更改任何内容。好的,太好了,那我该如何运行这个子程序呢?我已经尝试在excel中调用StaffReplaceAllB2、A2,但是…什么都没有…您不能从工作表中调用StaffReplaceAllB2、A2,因为它是一个子函数而不是一个函数。您需要从另一艘潜艇上呼叫潜艇。谢谢!很好的提示。替换-我不知道!。现在,正如你所看到的,我是一个完全的新手。如何从excel中调用此sub?thanks@david见我的编辑1非常感谢你。a行得通,b我明白为什么-非常感谢您的帮助,链接非常有用。干杯
Function StaffSub(inval As String, outval As String) As Integer

Call StaffReplaceAll(inval, outval)

End Function
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