2016-05-31 10 views
1

Цените помощь кого-либо, создавая код VBA для выполнения функции копирования и вставки функциональной базы по выбранным критериям. Я думаю, что это должен быть сценарий VBA, потому что у меня есть макрос для очистки данных на вкладке New PO после того, как будет записан «заказ», и информация будет скопирована на вкладку PO. В настоящее время у меня есть сценарий копирования и вставки, который отлично работает и копирует 3 ячейки с вкладки New PO на вкладку POs, см. Ниже сценарий. Это выполняется кнопкой «Копировать данные».VBA для копирования и вставки на основе фильтра

Я сейчас ищу сценарий VBA, который будет фильтровать/проверить количество (столбец S) Колонка Z и расширенную стоимость на вкладке NEW ПО на основе категории, выбранный в колонке G и вставить, что на вкладку ЗП в правильном месяце записывается заказ, который определяется датой начала в ячейке T12 на вкладке New PO. Дополнительной проблемой является то, что когда категория изменяется, например, с 00 на 01, она должна перейти к следующей строке на вкладке PO и изменить категорию.

Вот скриншоты из двух вкладок в обсуждении и еще раз оцените понимание того, как это сделать.

PO's tab

New PO's Tab

РЕДАКТИРОВАНИЕ 6/7

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 
+0

Последующие пост ищет дальнейшую модификацию выше VBA https://stackoverflow.com/questions/44166891/vba-copy-and-paste-to-new-sheet-based-on-validating- date/44179808? noredirect = 1 # comment75388785_44179808 – Justin

ответ

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 
+0

Хорошо имеет смысл. Как я могу направить результаты AutoFilter на правильные ячейки на вкладке PO? Спасибо за помощь. – Justin

+0

Рассматривая ваше объяснение выше, вы, кажется, ищете «00» сначала «01» и так далее. Вы хотите, чтобы они были устроены как таковые, я бы догадался? Возможно, используйте счетчик циклов, начиная с 00 и каждый раз увеличивая на 1. Что-то вроде Dim Counter as Long, Counter = 0, в цикле есть счетчик if, равный или более 10, тогда Criteria1: = "=" & Counter Else Criteria1 = "= 0" & Counter ... Затем используйте последнюю строку формулу вам уже нужно найти ячейку назначения. Cant ударил следующую строку с любыми известными shorcuts для клавиатуры в этом поле для комментариев, поэтому извините за формат здесь. –

+0

Чтобы уточнить (надеюсь), VBA распознает категорию, выбранную из раскрывающегося списка в столбце G, и скопирует общее количество в столбце S и увеличенной стоимости в столбце Z до последней строки, доступной на вкладке POs, является столбец для правильный месяц, который можно найти на вкладке New Po в ячейке T12. Когда категория изменяется, например, с 00 на 01, она должна перейти к следующей строке на вкладке PO и изменить категорию. У меня есть категории от 00-99 как возможные варианты. – Justin

Смежные вопросы