根据过滤器进行复制和粘贴

时间:2016-05-31 21:11:39

标签: excel vba vlookup

我想根据所选的某些标准执行复制和粘贴功能。

一旦写入“订单”并且信息被复制到“PO”标签,我就会有一个宏来清除“新PO”标签中的数据。

复制和粘贴脚本将3个单元格从“新PO”标签复制到“PO”标签。

Sub Copy_Data()

Dim Count, Qty As Long
Dim CatRng, MonthRng, SDate, CxlDate, PoNumb, Vendor As Range
Dim Total As Currency
Dim StrTarget As String
Dim Row, PORow, Col As Integer

Set CatRng = Sheets("NEW PO").Range("G20:G43")
Set MonthRng = Sheets("POs").Range("L122:W122")
StrTarget = Sheets("New PO").Range("V12")
Set SDate = Sheets("New PO").Range("T12")
Set CxlDate = Sheets("New PO").Range("T13")
Set PoNumb = Sheets("New PO").Range("N10")
Set Vendor = Sheets("New PO").Range("D14")
Count = 0

For Count = 0 To 99

    Total = 0
    Qty = 0
    'So that the values reset each time the cat changes

    For Each cell In CatRng
        'To get the row number then total the required information
        If cell.Value = Count Then
            Row = cell.Row
            Qty = Qty + Sheets("NEW PO").Range("S" & Row).Value
            Total = Total + Sheets("NEW PO").Range("Z" & Row).Value
            'I guessed ext cost only as it has been totaled at the bottom,
            'this is easily changed though
        End If
    Next cell

    'Now put the totals into a PO only if there is a quantity of items
    If Qty > 0 Then
        PORow = Sheets("POs").Range("K1048576").End(xlUp).Row + 1

        'I'll let you sort the PO number and other fields out but the main 3     are done below
        With Sheets("POs")
            .Range("I" & PORow).Value = Qty
            .Range("K" & PORow).Value = Count
            .Range("C" & PORow).Value = SDate
            .Range("D" & PORow).Value = CxlDate
            .Range("B" & PORow).Value = PoNumb
            .Range("F" & PORow).Value = Vendor
            'My understanding here is that the target month in T12 is in the same format as
            'the anticipated Receipt month, I hope this is what you were looking for

            For Each cell In MonthRng
                If cell.Value = StrTarget Then
                    Col = cell.Column
                    .Cells(PORow, Col).Value = Total
                    'Used .cells here as both column and row are now integers
                    '(only way i can ever get it to work)
                End If
            Next cell

        End With
    End If

Next Count

End Sub

我想根据在G列中选择的类别过滤/验证数量(第S列)列Z和“新PO”标签的延期费用。然后我想将其粘贴到“订单”选项卡,在正确编写订单的月份下,由“新订单”选项卡上单元格T12中的开始日期确定。

此外,当类别更改时,例如从00更改为01,它应该放到“PO”选项卡上的下一行并更改类别。

两个标签的屏幕截图。

PO tab

New PO Tab

1 个答案:

答案 0 :(得分:0)

好的,这似乎符合您的要求,如果没有,请告诉我。

有点长,因为我只是在会议之间一起打破了这个但是它完成了工作。您可以使用行索引和列索引来操纵您希望提取的任何其他数据,或修改您想要总计的成本。

Sub Test()

Dim Count, Qty As Long
Dim CatRng, MonthRng As Range
Dim Total As Currency
Dim Row, PORow, Col As Integer


Set CatRng = Sheets("NEW PO").Range("G19:G43")
Set MonthRng = Sheets("POs").Range("L122:W122")
Count = 0


    For Count = 0 To 99

    Total = 0
    Qty = 0
    'So that the values reset each time the cat changes

            For Each Cell In CatRng
            'To get the row number then total the required information
                If Cell.Value = Count Then
                Row = Cell.Row
                Qty = Qty + Sheets("NEW PO").Range("T" & Row).Value
                Total = Total + Sheets("NEW PO").Range("AA" & Row).Value
                'I guessed ext cost only as it has been totaled at the bottom,
                'this is easily changed though
                End If
            Next Cell


        'Now put the totals into a PO only if there is a quantity of items
        If Qty > 0 Then
        PORow = Sheets("POs").Range("J1048576").End(xlUp).Row + 1

        'I'll let you sort the PO number and other fields out but the main 3 are done below
        With Sheets("POs")
            .Range("I" & PORow).Value = Qty
            .Range("J" & PORow).Value = Count
            'My understanding here is that the target month in T12 is in the same format as
            'the anticipated Receipt month, I hope this is what you were looking for

        For Each Cell In MonthRng
            If Cell.Value = .Range("T12").Value Then
                Col = Cell.Column
                .Cells(PORow, Col).Value = Total
                'Used .cells here as both column and row are now integers
                '(only way i can ever get it to work)
            End If
        Next Cell

        End With
        End If


    Next Count

End Sub