2014-12-29 4 views
0

У меня есть автоматизированными подали, что выходит с рядом (4) заголовкамиотфильтрованных Просмотры VBA Excel

первого столбца (A) содержит различные категории (типы оплаты), в основе конкретного типа I Would выполните другой тест, основанный на определенном листе, содержащемся в файле, над которым я работаю.

Что я делаю в данный момент, в основном создаю фильтр (из первого столбца A) в зависимости от типа оплаты, который я хочу проверить, создайте временный лист, скопируйте его в отфильтрованное представление, работайте с ним проверяет, а затем копирует/вставляет результат (содержащийся в столбце R) в основной лист.

Проблема возникает в последней части, когда я хочу скопировать пасту из-за отфильтрованного представления. Я не могу просто перейти в первую свободную ячейку под заголовком R и скопировать пасту, потому что система doesn ' Понимаю, я перехожу в отфильтрованный вид. Я должен быть уверен, что я скопирую правильные результаты в базе значения (строки), содержащегося в столбце A), можете ли вы помочь мне решить эту проблему?

Другой способ - сделать для каждого цикла, но на самом деле я не уверен, как его структурировать.

Здесь мы имеем часть кода я работаю над

Sub Payexample() 
' normal cleaning procedures 
    Sheets("Payexample").Select 
    Rows("1:10").Select 
    Selection.Delete Shift:=xlUp 

    Columns("J:J").Select 
    Selection.Replace What:="AED", Replacement:="", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 
    Selection.NumberFormat = "0.00" 


    Sheets("Sheet1").Select 

    ActiveSheet.Range("$A$4:$A$500").AutoFilter Field:=1, Criteria1:="Payfort" 
    Range("A5 : N5").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy 
    Sheets.Add After:=ActiveSheet 
    ActiveSheet.Name = "Payfort momentary" 
    Range("A1").Select 
    ActiveSheet.Paste 

    Range("$M$1").Formula = Range("B1") & (",") & Range("M1") 

    Dim Lastrow As Long 

    Application.ScreenUpdating = False 

    Lastrow = Range("J" & Rows.Count).End(xlUp).Row 
    Range("O1").FormulaR1C1 = "=IF(RC[-2]-VLOOKUP(RC[-3],'PayFort'!B:J,9,FALSE)<=0.99, ""Payfort   Payment Checked"", ""Manual Verification Needed"")" 
    Range("O1").AutoFill Destination:=Range("O1:O" & Lastrow) 
     Range("O1:O" & Lastrow).Select 
     Selection.Copy 
     Sheets("Sheet1").Select 

    ActiveSheet.Range("$A$4:$A$500").AutoFilter Field:=1, Criteria1:="Payfort" 

    Range("R5").Select 
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
      :=False, Transpose:=False 

     'Sheets("Payfort Momentary").Select 
     'ActiveWindow.SelectedSheets.Delete 

End Sub 
+0

Извините, docendo, я добавил предложенные теги. Виноват. Спасибо за редактирование – Froz

+0

Если я правильно понял, когда вы пытаетесь вставить результаты обратно в отфильтрованные данные, Excel должен разбить эти данные на отдельные диапазоны, которые он не может сделать с вставкой из коробки. Вы можете подумать, можно ли проводить проверки в VBA без необходимости создания временного листа. – Dave

ответ

0

Я думаю, что это будет делать в основном то, что вы после этого, но я не был уверен, что вы хотите сделать с вашими формулами, мы надеемся, вы сможете решить, что вы хотите с ними делать:

Sub Payexample() 
Dim rngCheck As Range 
Dim r As Range 
Dim rowNum As Long 
' normal cleaning procedures 
    Sheets("Payexample").Select 
    Rows("1:10").Select 
    Selection.Delete Shift:=xlUp 

    Columns("J:J").Select 
    Selection.Replace What:="AED", Replacement:="", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 
    Selection.NumberFormat = "0.00" 

    Sheets("Sheet1").Select 
    With ActiveSheet 
     rngCheck = .Range("$A$4:$A$500") 
     For Each r In rngCheck.Rows ' Loop through the rows in your data area 
      rowNum = r.Row 
      If .Range("A" & rowNum) = "Payfort" Then 
       ' Either 
       .Range("R" & rowNum).Formula = "" ' Your formula here 
       .Range("R" & rowNum) = .Range("R" & rowNum).Value ' Change formula to value 
       ' Or 
       .Range("R" & rowNum) = ' Do calculations in VBA without formula 
      End If 
     Next r 
    End With 

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