循环遍历行,将值均匀分配到新的电子表格中

时间:2014-08-07 23:39:51

标签: excel vba loops excel-vba

我是VBA的新手,他的任务是更新现有的宏来自动化我们工作流程的一部分。基本上,当前宏从一个电子表格中获取customer_ids,并将它们导出到一个新的CSV文件中,由经理将其销售给销售人员。我们有一个程序可以直接将客户分配给销售人员,但格式必须是仅包含customer_ids的单列CSV文件,并且每个CSV文件都需要为每个销售人员标题。当有多个销售人员分配到一个区域时,我的问题就开始了。在这种情况下,我需要循环遍历特定区域的customer_ids,并在该区域的销售人员中平均分配它们。

EX:
There are 2 salespeople for region A (call them A1 and A2),
and 2 other salespeople for region B (B1 and B2). 

customer_id | region
123                A
234                A
345                A
456                B
567                B
678                B
789                B

需要过滤掉上表,以便客户123,234,345在两个新文件之间均匀分配:一个用于A1,一个用于A2(意味着一个文件将有一个额外的客户,这很好)。对于区域B1和B2文件中的客户456,567,678和789也是如此。

我假设我需要一个递归循环才能做到这一点(虽然我听说VBA中的循环很糟糕)。但我不知道从哪里开始,以便在新文件之间均匀分配customer_ids。

我真的很感谢你的帮助!谢谢!

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

Application.ScreenUpdating = False
set A1 = Sheets.add
set A2 = Sheets.add
set B1 = Sheets.add
set B2 = Sheets.add
for each cell in customer_id column (replace this with the column)
    if cell.offset(0,1) = "A" Then
        if 1a >= 2a then
             A1.cells(1a,1) = cell
        else if 2a > 1a then
             A2.cells(2a,2) = cell
        end if
    Else If cell.offset(0,1) = "B" Then
        if 1b >= 2b then
             B1.cells(1a,1) = cell
        else if 2b > 1b then
             B2.cells(2a,2) = cell
        end if
    End if
next cell

dest = "C:\" ' Set where you want the files to be saved here

A1.SaveAs dest & A1, xlCSV '(Where A1 is your salesperson name)
A2.SaveAs dest & A2, xlCSV '(Where A2 is your salesperson name)
B1.SaveAs dest & B1, xlCSV '(Where B1 is your salesperson name)
B2.SaveAs dest & B2, xlCSV '(Where B2 is your salesperson name)
application.displayalerts = False
A1.delete
A2.delete
B1.delete
B2.delete
application.displayalerts = True
application.screenupdating = True

警告:这是未经测试的,我从今天早上7点开始工作(现在凌晨2点)