第一次在这里发帖,如果我的格式不正确,请道歉。 这是我的问题(见下面我试图解决的问题): 我有一份工作清单,其中分配了工人的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但这让我很困惑!
答案 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 ,如:
ID表转换为:
我没有使用 .Replace ,因为 S15 这样的字符串会匹配 S1 和 S15 。我出于类似的原因使用Id
s的单个单元格。
修改#1:强>
宏非常易于安装和使用:
如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx
删除宏:
要使用Excel中的宏:
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
必须启用宏才能使其生效!