我正在尝试制作一个vba代码,以允许更快地输入可能的重复数据。在我的示例中,我试图获取H列中的条目,以检查是否已经输入了库存编号。如果是这样,请将数据从匹配行的第I列-M列复制到空白的“新条目”行的I列-M列。
这是我尝试输入代码的其中之一
Private Sub finddata()
Dim stock As Integer
Dim finalrow As Integer
Dim i As Integer
finalrow = Sheet1.Range("H50").End(xlUp).Row
For i = 2 To finalrow
stock = Sheet1.Cells(i, 8).Value
If Cells(i, 8) = stock Then
Range(Cells(i, 9), Cells(i, 13)).Copy
Range("I50").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
End If
Next i
End Sub
任何建议都会很棒,我不能在excel中直接使用vlookup,单元格需要保持空白,以便在找不到匹配项的情况下可以输入数据。
谢谢!
答案 0 :(得分:0)
马特。
我一直在使用您的宏和类似于您的虚拟数据集。
我对您的代码进行了一些修改,使我能够得到您想要的结果:
Private Sub finddata()
'Dim stock As Integer
Dim finalrow As Integer
Dim i As Integer
'Modified:
finalrow = Sheet1.Range("H1").End(xlDown).Row
For i = 2 To finalrow - 1
For j = 3 To finalrow
stock = Sheet1.Cells(j, 8).Value
If Cells(i, 8) = stock Then
Range(Cells(i, 9), Cells(i, 13)).Copy
'Modified line:
Sheet1.Range("I" & j & ":M" & j).PasteSpecial Paste:=xlPasteValues
End If
Next j
Next i
Application.CutCopyMode = False
End Sub
如您所见,首先我删除了stock变量的Dim声明。覆盖值时出现错误。
第二,而不是从表格底部向上搜索,而是从H1一直搜索到最后使用的行,以进行优化。
最重要的是,我在您的for内嵌套了另一个for,检查该列上的所有其他库存编号。
然后,我检查了If块内的最后一行。我不确定您要做什么,因为我没有完全在您的代码中得到这一行。但是我尝试了我的方法,它奏效了。
结果是:在前一行中具有匹配项的每个股票编号在该行的I至M列中都具有相同的值
我不确定这是否正是您想要的目标,但这只是一个开始。
我确定必须在侦听器或按钮上实现此宏,以便于使用。
希望有帮助。