【发布时间】:2021-07-30 04:56:50
【问题描述】:
我正在尝试编写一个宏来将管家的名字放在一个单元格中,如果他们被分配到那个类别的话。到目前为止,我编写了此代码,但它不起作用。我正在尝试获取它,以便如果一个工作表中的列的单元格与另一个工作表的单元格匹配,并且如果匹配,那么它将在单独的单元格中打印管家的姓名,以识别该类别由那个人。
工作表 Demetri 中的数字在 E27 到 E38 的范围内,我想查看工作表 Share_Dump 中 BE4 到 BE163803 范围内的单元格是否在 Demetri 工作表的范围内。
Sub steward_products()
Dim d, s As Worksheet
Set d = Worksheets("Demetri")
Set s = Worksheets("Share_Dump")
For i = 4 To 163803 Step 1
For j = 27 To 38 Step 1
If s.Cells(i, 3) = d.Cells(j, 5) Then
s.Cells(i, 57) = "Demetri"
End If
Next j
Next i
【问题讨论】:
-
我想你忘了解释问题是什么。
-
顺便说一句:
Dim d, s As Worksheet表示Dim d As Variant, s As Worksheet- 你可能想要Dim d As Worksheet, s As Worksheet -
这是很多的迭代!从/向工作表单元格读取/写入可能是您在循环中可以做的最慢的事情;考虑利用
Application.WorksheetFunction.Match而不是嵌套循环......这表明=IF(ISERROR(MATCH($C4, 'Demetri'!$E$27:$E$38, 0), ""), "Demetri")在Share_Dump工作表的第57 列/第4 行中,然后一直填充到第163803 行就可以满足您的需要无需任何代码即可完成。
标签: excel vba for-loop if-statement