2016-11-10 3 views
0

Я зациклился на том, как двигаться вперед с этой проблемой.Показать значения, соответствующие нескольким операторам

У меня есть лист Excel, похожий на прилагаемые изображения. То, что я хочу сделать, это на другом листе, представленном всеми отзывами, в которых есть комментарий.

Что я хочу сделать, так это то, что в листе (отчете) я хочу показать список, состоящий из всех оценок Good/Bad, связанных с командой A на 42 неделе, где был сделан комментарий. Таким образом, в этом примере список будет concisting из строки 2 и 4.

enter image description here

В списке источников состоит из более чем 100k строк так что для моей первой попытки, чтобы ограничить формулу со смещением, чтобы смотреть только на строк в заданную неделю. Но может быть, код vba - это более быстрый способ сделать это?

+0

Существует нет * nice * способ сделать это. Я бы предложил просто использовать фильтры для доступа к необходимым вам данным - в противном случае это довольно значительный проект VBA. – CallumDA

+0

Чтобы добавить к предложению CallumDA33, почему бы не конвертировать ваши данные в таблицу, и фильтр будет автоматически добавлен, а также форматирование. – SJR

ответ

0

Попробуйте этот код:

Sub Test() 
Dim row As Integer, lastrow As Long, rng As Range 

'This filters the data and copies the result to a second worksheet - Sheet2 (rename to suit) 

With Sheet1 

    On Error Resume Next 
     .ShowAllData 
    On Error GoTo 0 

    lastrow = .Cells(Rows.Count, 1).End(xlUp).row 

    .Range("A1:D" & lastrow).AutoFilter field:=1, Criteria1:="a" 
    .Range("A1:D" & lastrow).AutoFilter field:=2, Criteria1:="42" 
    .Range("A1:D" & lastrow).AutoFilter field:=4, Criteria1:="<>" 

     Set rng = .Range("A1:D" & .Cells(Rows.Count, 1).End(xlUp).row).SpecialCells(xlCellTypeVisible) 

     If rng.Cells(Rows.Count, 1).End(xlUp).row > 1 Then ' If Not just header row visible i.e your filter has some actual results 

      Set rng = .Range("A2:D" & lastrow).SpecialCells(xlCellTypeVisible) 'A2 to exclude header 
      rng.Copy Destination:=Sheet2.Range("A" & Sheet2.Cells(Rows.Count, 1).End(xlUp).row + 1) 'Copy to next available row in sheet 2 

     End If 

End With 

End Sub 
+0

Спасибо, я должен был сказать, что я не могу использовать фильтр в этом отчете. Необработанные данные используются на нескольких листах, поэтому при попытке фильтрации данных запускается пересчет, который убивает компьютер. –

+0

Хорошо, плохо используйте другой метод и опубликуйте его позже. – Nick

0

я, наконец, нашел функцию, которая умудряется делать то, что я хотел.

Этот код показывает данные в 7-й колонке. Изменяя 7 в конце формулы, я могу выбрать показать столбцы, которые я хочу иметь, а затем просто скопировать формулу до конца, насколько мне нужно.

Если кто-либо использует этот код, не забывайте, что это массив, после того как вы положили его в Excel вместо нажатия ввода, вам нужно нажать ctrl + shift + enter.

`=IFERROR(INDEX('Raw ticket'!$1:$1048576; 
SMALL(
IF((44='Raw ticket'!M:M)*(1='Raw ticket'!H:H)*("a"='Raw ticket'!C:C)*(ISTEXT('Raw ticket'!G:G)); ROW('Raw ticket'!A:A)-ROW('Raw ticket'!$A$2)+2); ROW(1:1));7);"")` 
Смежные вопросы