Microsoft Excel - Как скопировать ячейки на другой лист в каждой n-й строке - PullRequest
3 голосов
/ 23 января 2010

Microsoft Excel - Как скопировать ячейки на другой лист в каждой n-й строке. У меня есть интересная проблема. Это, вероятно, просто, но я не могу понять это.

У меня есть список ячеек (около 10 столбцов и более тысячи строк, которые скоро будут расширяться) A1-A10 и вниз Это мои заголовки и основные входные ячейки (назовем этот итоговый лист)

Мне нужно, чтобы эти ячейки были скопированы и предпочтительно привязаны к соседнему рабочему листу (подробный лист), но таким образом, чтобы каждая ячейка (или 10 ячеек в поперечнике) копировалась на каждую 20-ю строку.

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

Более подробная информация:
Каждая строка, в которую копируются эти ячейки, становится строкой заголовка для каждого 20-строчного модуля. 19 строк под скопированными заголовками остаются пустыми, а подробные вычисления выполняются в 19 строках справа. Каждый раздел представляет собой идентичный модуль с множеством подробных расчетов и результатами по 1 строке в каждом модуле. В настоящее время я использую только подробный лист, и добавление или удаление модулей и их заголовков занимает очень много времени.

Сводная ведомость A B C D 1 # A1 # B1 # C1… 2 # A2 # B2 # C2…
3 # A3 # B3 # C3…

Подробный лист A B C D 1 # A1 # B1 # C1… … 19 пустых строк 21 # A2 # B2 # C2…
… 19 пустых строк 31 # A3 # B3 # C3… … 19 пустых строк

Спасибо за любые ответы. Martin

Ответы [ 2 ]

0 голосов
/ 23 января 2010

Поместите кнопку на свой итоговый лист и поместите этот код позади него, изменив имена листов и название кнопки на то, что вы хотите использовать. Затем каждый раз, когда вы хотите повторить линии детализации, нажмите кнопку. Примечание. Я написал это так, что лист «Сводка» - «Лист2», а лист «Сведения» - «Лист1»:

Private Sub RedoDetailedSheet_Click()

Dim i As Integer, j As Integer

For i = 0 To Worksheets("Sheet2").UsedRange.Rows.Count - 1
    For j = 1 To Worksheets("Sheet2").UsedRange.Columns.Count

        Worksheets("Sheet1").Cells(20 * i + 1, j).Formula = "=Sheet2!" _
            & Worksheets("Sheet2").Cells(i + 1, j).Address

    Next j
Next i

End Sub

Вот код, основанный на вашем примере файла для этой конкретной ситуации. Вам нужно изменить формат столбца Модель на Общий.

Private Sub RedoDetailedSheet_Click()

Dim i As Integer, j As Integer

For i = 0 To Worksheets("Input").UsedRange.Rows.Count - 2
    For j = 1 To Worksheets("Input").UsedRange.Columns.Count

        Worksheets("Output").Cells(20 * i + 29, j + 2).Formula = "=Input!" _
            & Worksheets("Input").Cells(i + 2, j).Address

    Next j
Next i

End Sub
0 голосов
/ 23 января 2010

Это легко обрабатывается с помощью функций поиска в Excel - VBA не требуется - и это делает это более подходящим для https://superuser.com/.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...