2015-05-21 3 views
3

У меня есть таблица, которая вытаскивает тысячи строк данных с очень большого листа. Некоторые из столбцов таблицы получают свои данные из каждой пятой строки на этом большом листе. Для того, чтобы ускорить процесс создания ссылок на ячейки, я использовал формулу СМЕЩЕ, чтобы захватить клетки из каждого 5-я ряда:Excel - Заменить формулу смещения с фактической ссылкой на ячейку

=OFFSET('Large Sheet'!B$2572,(ROW(1:1)-1)*5,,) 
=OFFSET('Large Sheet'!B$2572,(ROW(2:2)-1)*5,,) 
=OFFSET('Large Sheet'!B$2572,(ROW(3:3)-1)*5,,) 
=OFFSET('Large Sheet'!B$2572,(ROW(4:4)-1)*5,,) 
=OFFSET('Large Sheet'!B$2572,(ROW(5:5)-1)*5,,) 
etc... 

OFFSET может съедают ресурсы при расчете больших таблиц, хотя, и я ища способ ускорить/упростить формулу. Есть ли простой способ преобразовать формулу СМЕЩА в только простую ссылку на ячейку, как:

='Large Sheet'!B2572 
='Large Sheet'!B2577 
='Large Sheet'!B2582 
='Large Sheet'!B2587 
='Large Sheet'!B2592 
etc... 

Я не могу просто вставить значения либо. Это должно быть активной ссылкой, потому что большой лист изменится.

Благодарим за помощь.

+0

Ответ ниже может быть немного лучше со скоростью. Если вам нужны чистые ссылки, вы можете быстро это сделать с помощью VBA. –

+0

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

ответ

1

А вот один последний подход к этому, что не использует VBA или формулы. Это просто быстрое и грязное использование AutoFilter и удаление строк.

Главная идея

  • Добавить ссылку на ячейку =Sheet1!A1 и скопировать его вниз, чтобы соответствовать столько строк, сколько есть в основных данных.
  • Добавить другую формулу в B1 быть =MOD(ROW(), 5)
  • фильтра колонки B и снимите 0s (или какой-либо один номер)
  • удалить все строки, которые видны
  • Удалить столбец B
  • Voila, формулы для каждый пятый ряд

Некоторые эталонные изображения, все они взяты на Sheet2.

Формулы с автофильтром готовы.

formulas with filter

Отфильтрованный и готов удалить

filtered

Удалить все эти строки (выберите A1, CTRL + SHIFT + СТРЕЛКА ВНИЗ, SHIFT + ПРОБЕЛ, CTRL + МИНУС)

delete rows

Удалить столбец B, чтобы получить окончательный результат с помощью «чистые» формулы каждые 5-й ряд.

result

+1

Спасибо за помощь. Это работало как прелесть. Подход VBA также был хорошим решением, но некоторые из данных мастера включают объединенные строки (не мой выбор), и он отбрасывал цикл на одну строку. Таким образом, этот подход работал лучше для меня. –

0

Вот один из подходов, использующий INDEX вместо OFFSET. Я не уверен, что это быстрее, я думаю, вы можете проверить. INDEX нестабилен, поэтому вы можете получить от этого преимущество.

Изображение диапазонов, вы можете увидеть, что Sheet1 имеет много данных и Sheet2 тянет каждую 5-ю строку из этого листа. Данные в Sheet1 идут от A1:F1000 и просто сообщают адрес текущей ячейки.

sheets

Формулы используют INDEX и копируются вниз и через дорогу от A1 на Sheet2.

=INDEX(Sheet1!$A$1:$F$1000,ROW()*5,COLUMN()) 
2

Если вы хотите принять подход VBA к этому, вы можете создавать ссылки очень быстро, используя простые For петли.

Вот очень грубый код, который может вас начать. Он использует жестко обозначенные имена и переменные. Я действительно просто пытаюсь показать часть i*5.

Sub CreateReferences() 

    For i = 0 To 12 
     For j = 0 To 5 
      Sheet2.Range("H1").Offset(i, j).Formula = _ 
       "=Sheet1!" & Sheet1.Range("A5").Offset(i * 5, j).Address 
     Next 
    Next 

End Sub 

Он работает путем создания быстрой формулы, используя Address от ссылки на ячейку на Sheet1. Единственный ключ здесь - иметь ячейки подсчета индексов в «сводных» строках и умножать на 5, чтобы получить ссылку на «главный» лист. Я начинаю с A5 только по результатам поиска от INDEX.

Результаты показать формулу для H1 и более. Я сравниваю результаты INDEX, полученные выше.

results

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