每个地区的每位负责人员都可以更改。例如。 A区:5月:179 - > 6月:220
现在,我想总结2016年5月至2016年7月的所有员工销售记录。
范围应为Set rng = Selection.SpecialCells(xlCellTypeVisible).Select
With ContextMenu.Controls.Add(Type:=msoControlButton, before:=2)
.OnAction = "'" & ThisWorkbook.Name & "'!" & "MyFunctionWithParameter" 'Here somehow I need to provide rng as input argument!
.FaceId = 59
.Caption = "Spoji R brojeve"
.Tag = "My_Cell_Control_Tag"
End With
End sub
Function MyFunctionWithParameter (rng)
MsgBox(rng)
End Function
。范围可以是硬代码。
然后将结果粘贴到D3:I21
。
示例输出应为
179 1
186 7
222 4
S24 5
...
如何在VBA中执行L3:M21
之类的SQL?
任何想法都没关系(不需要代码)。非常感谢你
是否可以在VBA中执行此操作?或者将所有数据放入虚拟空间中的两列。然后再进行计算?
我必须使用VBA,因为:
这张图只是一个例子。真正的excel背后是一个用户表单。管理员可以选择fromdate和todate。然后,根据所选范围生成报告。
删除第23行 - 总计没问题。可以考虑对表结构进行小的修改。
答案 0 :(得分:0)
提示:
使用Pivot Table将所有数据放入两列:列人员和列销售。
另外,将Range("D3:D21")
中的ID工作人员复制到Range("L3:L21")
,然后将此公式放在单元格M3中:
=E3+INDEX(F$3:G$21,MATCH(L3,F$3:F$21,0),2)+INDEX(H$3:I$21,MATCH(L3,H$3:H21,0),2)
然后将单元格M3向下拖动到单元格M21。
无论如何,你反驳自己说,“任何想法都没问题(不需要代码)”然后说“我必须使用VBA,因为”。你想要哪一个?
OP表示公式不能正常运行,但确实可行。看看this Excel file。以下是实施上述公式的VBA代码:
Sub evabb()
Dim i As Long
With Sheets("Sheet1")
For i = 3 To 21
.Cells(i, "L") = .Cells(i, "D")
.Cells(i, "M").Formula = "=E" & i & "+INDEX(F$3:G$21,MATCH(L" & i & ",F$3:F$21,0),2)+INDEX(H$3:I$21,MATCH(L" & i & ",H$3:H21,0),2)"
Next
End With
End Sub