我有一组复杂的要求,并且正在尝试开发一段合适的Excel VBA代码。我是一个初学者,所以任何关于这个问题的建议都将非常感谢。
背景:“A公司”表列出了部门、薪级和职位(A-C栏)。"Company B“工作表列出了他们的职务的所有上述内容,但在D和E列中,还指定每个职务是否与公司A的职务匹配(D列),如果是,则指定哪个(E列)匹配,或者是否没有匹配,然后E列单元格为空。
目的:我想将公司B中的职务与公司A中的职务相匹配,并将这些匹配的公司B中的职务作为D-F列中的链接复制/粘贴到“公司A”工作表中,但有一个问题!
问题:在每个公司中都有多个职位具有相同的部门-薪资等级-职称组合,并且这些数字在公司之间不匹配,例如在公司A中有4个职位,但在公司B中只有3个匹配的职位。我希望我的代码知道只复制公司B的职位三次,并将第四行留空(以直观地指示三个匹配的职位和第四个没有匹配的职位)。为了实现这一点,我在每个公司的每个部门中都有相同薪资级别的职位数量,并希望将这些数字用作Do While循环的计数器。
我写的代码:
Private Sub CommandButton6_Click()
Dim counter As Integer
Dim myNum As Integer
a = Worksheets("COMPANYB").Range("A" & Rows.Count).End(xlUp).Row
Worksheets("JobNumbers").Range("D:D").Value = counter
Worksheets("JobNumbers").Range("C:C").Value = myNum
Do While counter < myNum
For i = 2 To a
If Worksheets("COMPANYB").Range("D" & i).Value = "Match" And _
Worksheets("COMAPNYB").Range("E" & i).Value = Worksheets("COMPANYA").Range("C" & i).Value Then
Worksheets("COMPANYB").Range("A" & i & ":C" & i).Copy
Worksheets("COMPANYA").Activate
b = Worksheets("COMPANYA").Range("D" & Rows.Count).End(xlUp).Offset(0, 3).Row
Worksheets("COMPANYA").Range("D" & b + 1).Select
ActiveSheet.Paste Link:=True
End If
Next i
counter = counter + 1
myNum = myNum - 1
Loop
End SubWhile不工作,它只是在我的"JobNumbers“表中将全0放在列中,我希望它从哪里获取我的计数器和myNum来设置Do While循环的测试。正如你所看到的,我甚至没有读到我想要做的“复制时将行留空”这件事,因为我被这个问题卡住了。我也开始怀疑我是不是对VBA期望太高……
我认识到这是一个很大的文本,我真的道歉-我将感谢任何反馈/帮助,谢谢!
发布于 2020-04-29 23:15:41
=是一个赋值运算符。它将"0“写入列中的每个单元格的原因是因为Worksheets("JobNumbers").Range("D:D").Value引用了整个列D中的每个单元格。然后,您可以通过编写=将变量counter赋给所有这些单元格
除此之外,您将counter定义为一个整数,但是没有给=赋值,所以它一开始是空的,并且不会改变。而赋给单元格的值为空的整数将使该单元格的值为0。
https://stackoverflow.com/questions/61504561
复制相似问题