如果满足条件,则从选定的列中复制多行

时间:2019-05-16 15:37:40

标签: excel vba

插图:
我有2张纸:ShNote =参考表,ShPPT =决赛桌。
我在决赛桌上有4个不同的桌子。

我要寻找的东西:(4个条件)

  1. 在E列中查找值= 20,然后将值和唯一的客户姓名粘贴到A列到第一张表(C:D)的最终表中

  2. 查找大于17但小于20的值,然后将值和唯一的客户姓名粘贴到A列的第二张表的最终表工作表(F:G)

  3. 查找大于15但小于17的值,然后将值和唯一的客户名称粘贴到A列的最终表的第三个表(I:J)

  4. 查找大于11且小于15的值,然后将值和仅客户名粘贴到A列上的最终表的工作表上(L:M)

我刚刚更新了代码,效果很好

显式选项

Sub Analysis_ClientRating()

Dim lastrow尽可能长,i一样长,rowppt一样长,colppt一样长 昏暗的rowppt1长,colppt1长,rowppt2长,colppt2长 昏暗的rowppt3一样长,colppt3一样长

lastrow = ShNote.Range("C" & Rows.Count).End(xlUp).Row
rowppt = ShPPT.Cells(Rows.Count, 1).End(xlUp).Row
colppt = ShPPT.Cells(Rows.Count, 1).End(xlUp).Row
rowppt1 = ShPPT.Cells(Rows.Count, 1).End(xlUp).Row
colppt1 = ShPPT.Cells(Rows.Count, 1).End(xlUp).Row
rowppt2 = ShPPT.Cells(Rows.Count, 1).End(xlUp).Row
colppt2 = ShPPT.Cells(Rows.Count, 1).End(xlUp).Row
rowppt3 = ShPPT.Cells(Rows.Count, 1).End(xlUp).Row
colppt3 = ShPPT.Cells(Rows.Count, 1).End(xlUp).Row

Call Entry_Point

For i = 6 To lastrow
    Select Case ShNote.Cells(i, 5).Value
        Case Is = 20
        ShNote.Cells(i, 3).Copy
        ShPPT.Cells(rowppt + 6, 3).PasteSpecial xlPasteValues
        ShNote.Cells(i, 5).Copy
        ShPPT.Cells(colppt + 6, 4).PasteSpecial xlPasteValues
        rowppt = rowppt + 1
        colppt = colppt + 1

        Case Is >= 17
        ShNote.Cells(i, 3).Copy
        ShPPT.Cells(rowppt1 + 6, 6).PasteSpecial xlPasteValues
        ShNote.Cells(i, 5).Copy
        ShPPT.Cells(colppt1 + 6, 7).PasteSpecial xlPasteValues
        rowppt1 = rowppt1 + 1
        colppt1 = colppt1 + 1

        Case Is >= 15
        ShNote.Cells(i, 3).Copy
        ShPPT.Cells(rowppt2 + 6, 9).PasteSpecial xlPasteValues
        ShNote.Cells(i, 5).Copy
        ShPPT.Cells(colppt2 + 6, 10).PasteSpecial xlPasteValues
        rowppt2 = rowppt2 + 1
        colppt2 = colppt2 + 1

        Case Is >= 11
        ShNote.Cells(i, 3).Copy
        ShPPT.Cells(rowppt3 + 6, 12).PasteSpecial xlPasteValues
        ShNote.Cells(i, 5).Copy
        ShPPT.Cells(colppt3 + 6, 13).PasteSpecial xlPasteValues
        rowppt3 = rowppt3 + 1
        colppt3 = colppt3 + 1


    End Select
Next i

致电Exit_Point 结束

2 个答案:

答案 0 :(得分:2)

像您这样的声音只希望通过开关来确定事情的发展方向,例如(未测试):

lrs = wss.cells(wss.rows.count,5).end(xlup).row
for i = 2 to lrs 'assumes headers in row 1
    select case wss.cells(i,5).value
        Case is = 20
            col = 3
        Case is => 17,  is < 20
            col = 6
        'fil in others
    end select
    lrd = wsd.cells(wsd.rows.count,col).end(xlup).row
    wsd.cells(lrd+1,col).value = wss.cells(i,1).value
next i

弄清楚列A的值在哪里结束,这要求在每个目标列(lrd)中找到最后一行,并将源工作表(wss)中循环的列A的值放入适当的列中目标表(wsd)。

答案 1 :(得分:0)

另一个问题

如果我不使用Call函数,我将得到这种结果 Result of function without call

[主表][2]