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