2015-02-12 2 views
1

Я использую лист 2 для извлечения данных из листа 1.Excel Сортировка динамического списка или использовать VBA затем сортировать

A9 имеет эту формулу в нем:

=(INDEX(sheet1!$G$9:$G$7000,MATCH(0,INDEX(COUNTIF($A$8:A8,sheet1!$G$9:$G$7000),0,0),0)) 

(он смотрит через колонку G и вынимает дубликаты и пробелы)

В9 имеет следующую формулу:

=IF(MAX(IF($A9=sheet1!G:G,sheet1!E:E))=MIN(IF($A9=sheet1!G:G,sheet1!E:E)),"Only 1 Entry",MAX(IF($A9=sheet1!G:G,sheet1!E:E))-MIN(IF($A9=sheet1!G:G,sheet1!E:E))) 

(это выглядит в колонке а на sheet2 затем смотрит даты, Min и Max на Лист1, чтобы определить, сколько лет определенный элемент)

C9 имеет следующую формулу:

=SUMIF(sheet1!$G$9:$G$7000,A9,sheet1!$B$9:$B$7000) 

(это на внешний вид, как колонке А в листе 2 и ссылки sheet1 добавить час)

Проблема в том, что если я сортирую колонку C на листе2, ничего не меняется. Я думаю, потому что, пытаясь отфильтровать его, динамическая формула переупорядочивает его обратно к тому, что находится на листе 1. В принципе, как бы вы ни пытались его фильтровать, список остается таким же, как и на основе sheet1. Я даже попытался отсортировать столбцы на листе 1, чтобы увидеть, изменится ли лист 2, но так как данные в столбце C листа 2 фактически не существуют на листе 1, который тоже не работает.

Как фильтровать столбцы C или даже B и другие с помощью этих динамических формул?

Я искал в Интернете, чтобы найти решение, но не могу найти что-либо, что работает. Если я не могу использовать этот динамический список, я подумал, что, возможно, я мог бы создать список в столбце A sheet 2 с VBA и сделать список статическим.

Я тоже искал VBA для удаления дубликатов и пробелов, но по какой-то причине я придумываю пробел. Я нашел некоторых, которые делали часть, но не обоих.

Sub MakeUnique() 

    Dim vaData As Variant 
    Dim colUnique As Collection 
    Dim aOutput() As Variant 
    Dim i As Long 

    'Put the data in an array 
    vaData = Sheet1.Range("A5:A7000").Value 

    'Create a new collection 
    Set colUnique = New Collection 

    'Loop through the data 
    For i = LBound(vaData, 1) To UBound(vaData, 1) 
     'Collections can't have duplicate keys, so try to 
     'add each item to the collection ignoring errors. 
     'Only unique items will be added 
     On Error Resume Next 
      colUnique.Add vaData(i, 1), CStr(vaData(i, 1)) 
     On Error GoTo 0 
    Next i 

    'size an array to write out to the sheet 
    ReDim aOutput(1 To colUnique.Count, 1 To 1) 

    'Loop through the collection and fill the output array 
    For i = 1 To colUnique.Count 
     aOutput(i, 1) = colUnique.Item(i) 
    Next i 

    'Write the unique values to column B 
    Sheet2.Range("A9").Resize(UBound(aOutput, 1), UBound(aOutput, 2)).Value = aOutput 

End Sub 

Это VBA создает список не дубликатов, но оставляет заготовки ...

Итак, как я могу иметь столбцы B и C на листе 2 будет сортируемым с колонка А быть получена из данных на листе 1 без дубликатов и пробелов? Есть ли способ сортировки и использования динамической формулы, или это должно быть сделано с помощью VBA?

ответ

1

Эта версия Опубликованная код будет не включать пробелы в уникальном списке:

Sub MakeUnique() 

    Dim vaData As Variant 
    Dim colUnique As Collection 
    Dim aOutput() As Variant 
    Dim i As Long 

    'Put the data in an array 
    vaData = Sheet1.Range("A5:A7000").Value 

    'Create a new collection 
    Set colUnique = New Collection 

    'Loop through the data 
    For i = LBound(vaData, 1) To UBound(vaData, 1) 
     'Collections can't have duplicate keys, so try to 
     'add each item to the collection ignoring errors. 
     'Only unique items will be added 
     If vaData(i, 1) <> "" Then 
      On Error Resume Next 
       colUnique.Add vaData(i, 1), CStr(vaData(i, 1)) 
      On Error GoTo 0 
     End If 
    Next i 

    'size an array to write out to the sheet 
    ReDim aOutput(1 To colUnique.Count, 1 To 1) 

    'Loop through the collection and fill the output array 
    For i = 1 To colUnique.Count 
     aOutput(i, 1) = colUnique.Item(i) 
    Next i 

    'Write the unique values to column B 
    Sheet2.Range("A9").Resize(UBound(aOutput, 1), UBound(aOutput, 2)).Value = aOutput 

End Sub 
+0

Эта часть прекрасно работает, спасибо. Теперь мне просто нужно выяснить часть сортировки :) Кажется, с уравнениями, которые у меня есть в столбце C, когда я сортирую, он оставляет кучу «пробелов» наверху .... – DA69

+0

Вы сортируете по макрос ?? –

+0

для очистки уравнения в столбце CI добавил: = IF (A9 = "", "", SUMIF (Sheet1! $ G $ 9: $ G $ 7000, A9, Sheet1! $ B $ 9: $ B $ 7000)) на листе 2 он идет от C9 до C500. Если я сортирую вручную от A до Z, он отлично работает, но если я сортирую Z-A, результат заканчивается внизу, оставляя пробелы в верхней части. Я пытаюсь сделать динамический диапазон, который будет охватывать только видимые числа, но пока не работает. Затем я хочу превратить это в VBA. – DA69

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