我有一张Excel表格,其中A列中的名称和表格B的B列中的金额。
我有另一张sheet2,其名称在A中,就像在表1中一样,B列是空白的。
如何检查工作表1要检查工作表2的名称如果匹配,则在工作表1上的该名称旁边取一个名称,然后将金额复制到名称旁边的工作表2上匹配名称旁边的单元格中? sheet1上的名称每天都会更改。
我已经尝试了这一点而一无所获。
Sub Macro1()
'
' Macro1 Macro
'
Dim RowIndex As Integer
Sheets("Sheet1").Select
RowIndex = Cells.Row
While DoOne(RowIndex)
RowIndex = RowIndex + 3
Wend
End Sub
Function DoOne(RowIndex As Integer) As Boolean
Dim Key
Dim Target
Dim Success
Success = False
If Not IsEmpty(Cells(RowIndex, 1).Value) Then
Key = Cells(RowIndex, 1).Value
Sheets("sheet2").Select
Set Target = Columns(2).Find(Key, LookIn:=xlValues)
If Not Target Is Nothing Then
Rows(Target.Row).Select
Selection.Copy
Sheets("Sheet1").Select
Rows(RowIndex + 1).Select
Selection.Insert Shift:=xlDown
Rows(RowIndex + 2).Select
Application.CutCopyMode = False
Success = True
End If
End If
DoOne = Success
End Function
表1:
A B
A One Preservation $16.00
A&D Recovery, Inc. $8,108.46
A&S Field Services, Inc. $4,941.56
A&T Jax Inc $1,842.48
表2:
A B - blank cell
A One Preservation - Calvin & Renee
A&D Recovery, Inc. - Drew & Adam
A&S Field Services, Inc. - Aaron
A&T Jax Inc - Tyson
答案 0 :(得分:1)
此代码使用索引/匹配解决方案从sheet2中的sheet1复制匹配的B值。代码将使用可变图纸名称
该代码通过仅使用值更新
来删除第二张纸上B列的公式更新:如果您的第二个工作表名称与sheet1相同,但右侧有“-some text”,则使用此更新的代码部分
With rng1.Offset(0, 1)
.FormulaR1C1 = "=IF(RC[-1]<>"""",IF(NOT(ISERROR(MATCH(LEFT(RC[-1],FIND("" -"",RC[-1])-1),'" & ws1.Name & "'!C[-1],0))),INDEX('" & ws1.Name & "'!C,MATCH(LEFT(RC[-1],FIND("" -"",RC[-1])-1),'" & ws1.Name & "'!C[-1],0)),""no match""),"""")"
.Value = .Value
End With
原始
Sub QuickUpdate()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng1 As Range
Set ws1 = Sheets(1)
Set ws2 = Sheets(2)
Set rng1 = ws2.Range(ws2.[a1], ws2.Cells(Rows.Count, "A").End(xlUp))
With rng1.Offset(0, 1)
.FormulaR1C1 = "=IF(RC[-1]<>"""",IF(NOT(ISNA(MATCH(RC[-1],'" & ws1.Name & "'!C[-1],0))),INDEX('" & ws1.Name & "'!C,MATCH(RC[-1],'" & ws1.Name & "'!C[-1],0)),""no match""),"""")"
.Value = .Value
End With
End Sub
答案 1 :(得分:0)
为什么不使用VLOOKUP功能?
Sheet1在A列中有您的名字,在B栏中有您的名字。 Sheet2在列A中有您的查找名称,在列B中,您放置:
=VLOOKUP(A1,Sheet1!$A$1:$B$n,2,FALSE)
其中'n'是Sheet1表中的行数。
唯一的问题是,如果在Sheet1中找不到名称,它会放一个#N / A.可能有一种方法可以使用条件输入备用条目。