我有一份数据表"订单"其中包含格式为
的数据order no Customer Sales Executive Order Status Order Date
211 nokia john cancelled 23-May-13
643 panasonic andrew fulfilled 23-May-13
209 samsung john fulfilled 4-Apr-14
453 philips andrew fulfilled 4-Apr-14
311 dell mary fulfilled 16-Apr-14
865 panasonic andrew fulfilled 16-Apr-14
201 apple john fulfilled 3-May-14
453 hp mary cancelled 3-May-14
205 nokia john fulfilled 4-May-14
643 philips andrew fulfilled 4-May-14
312 lenovo mary fulfilled 22-May-14
204 apple john fulfilled 7-Jun-14
432 hp mary fulfilled 7-Jun-14
214 nokia john pending 25-Jun-14
754 panasonic andrew fulfilled 25-Jun-14
以上是订单表中许多列中重要的列。
我有另一张工作表,我有#34;销售主管"列出并想知道他们按月完成订单的唯一客户数
Sales Executive Apr-14 May-14 Jun-14
john <value> <value> <value>
mary <value> <value> <value>
andrew <value> <value> <value>
我想编写代码来读取列中行和月中的销售主管名称,然后给出如下答案
Sales Executive Apr-14 May-14 Jun-14
john 1 2 1
andrew 2 2 1
mary 1 1 1
我正在寻找一个可以按月运行的vba代码。以上示例是实际数据的示例集。
我对VBA比较陌生,需要有关代码的帮助。
如果我得到关于代码的解释,将会有所帮助,因为我需要类似的代码来查找每个销售主管在这几个月中产生的产品数和总收入。
感谢您的提前帮助
编辑(以下OP评论中的代码):
Sub UniqueReport()
Dim dict As Object
Set dict = CreateObject("scripting.dictionary")
Dim varray As Variant, element As Variant
Dim lastrow As Long
lastrow = Sheets("Orders").Range("N" & Rows.Count).End(xlUp).Row varray = Sheets("Orders").Range("N2:N" & lastrow).Value
For Each element In varray
If dict.exists(element) Then
dict.Item(element) = dict.Item(element) + 1
Else
dict.Add element, 1
End If
Next
ActiveSheet.Range("P2").Value = dict.Count
End Sub
答案 0 :(得分:0)
只需使用工作表公式和函数,就可以在没有VBA的情况下执行此操作。
在主数据表上,在日期列旁边添加一列,在第2行的单元格中粘贴此公式:
=TEXT(E2,"mmm yyyy")
这将使月份和年份可用于比较
接下来在销售主管工作表上,在单元格B2中输入此公式
=COUNTIFS(Orders!$C2:$C$16,$A2,Orders!$F$2:$F$16,B$1)
那么这个公式在做什么?
在第一个标准中,我们指定要将A2中的名称与C列中的所有值进行比较:C, AND 我们要将ROW A中的月份与TEXT月份进行比较我们已放置在订单表中的F列。
然后,您可以将公式拖动到所需的月份,然后按每个销售主管
向下拖动另见,见:
修改强>:
您也可以通过编程方式执行此操作:
TEXT
公式的虚拟列,以提供月份和年份日期,以便在订单工作表上进行比较。试试这个:
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
With Sheets("Orders")
.Columns("E:E").Insert Shift:=xlToRight
.Range("E2:E" & .Range("D2").End(xlDown).Row).FormulaR1C1 = "=TEXT(RC[1],""mmm yyyy"")"
End With
With Sheets("Sales Executives")
.Range("B2:D" & .Range("A2").End(xlDown).Row).FormulaR1C1 = "=COUNTIFS(Orders!C3,RC1,Orders!C5,R1C)"
.Range("B2:D" & .Range("A2").End(xlDown).Row).Copy
.Range("B2:D" & .Range("A2").End(xlDown).Row).PasteSpecial Paste:=xlPasteValues
End With
Sheets("Orders").Columns("E:E").Delete Shift:=xlToLeft
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
所以你需要做的就是使用F8逐步完成代码,看看它的作用。
另一个选择当然是在SQL Server查询中进行计算,使用SQL PIVOT函数检索数据。
希望有所帮助