2015-07-29 1 views
0

Мне нужно скопировать каждую из 69 строк n раз. В строке также содержится n раз каждый диапазон в строке, которая должна быть скопирована. Я приложил снимок экрана, чтобы вы могли видеть данные. Я попробовал один из других ответов здесь, но это не сработало для меня. example screen shotКопирование диапазона в строке, где # из x, подлежащего копированию, находится в ячейке

Итак, в приведенном выше снимке экрана я хотел бы иметь B2, D2: G2 скопировано 284 раза. Когда я набираю это, я вижу, что это будет работать лучше, если я переключу колонки C и B.

Во всяком случае - я видел несколько примеров с VBA. Я не знаком с этим, но я вообще не знаком с кодированием. Итак, если решение VBA, то я за него, мне просто нужны инструкции для фиктивного уровня;)

+1

Не могли бы вы добавить дополнительные сведения, например, о том, где вы хотите вставить данные, хотите, чтобы вы попытались до сих пор, и в какой части задачи вы застряли? – Jane

+0

@Jane. Я попробовал формулу, которая включала создание столбца, который вычислял номер конечной строки для данных и VLOOKUP, но не возвращал ничего, кроме одной разбитой ячейки (а не ячеек n раз). Данные могут быть вставлены на второй лист или даже на том же листе. Я в порядке, чтобы c & p вставьте его в новый файл, если нужно. – shannimcg

ответ

1

В Excel вы можете скопировать некоторые данные, которые являются 1 строкой по нескольким столбцам (например, B5: Z5) , затем вставьте эти данные в диапазон, который имеет ширину в 1 столбец несколькими рядами (например, D10: D50), и данные будут повторяться в каждой строке. Вот что приведенный ниже код делает:

Sub MultiCopy() 
    Dim sourceRange As Range 
    Dim targetBook As Workbook 
    Dim targetRange As Range 
    Dim cell As Range 
    Dim count As Integer 
    Dim copyRange As Range 

    'Adjust this range to reflect the list containing the numbers 
    Set sourceRange = ActiveSheet.Range("B2:B6") 

    'We'll copy the data to a new workbook 
    Set targetBook = Workbooks.Add 
    Set targetRange = targetBook.Worksheets(1).Range("A1") 

    'Loop through the cells which contain the number of times to repeat the row 
    For Each cell In sourceRange 
     'Get the number of times that the current row will be repeated 
     count = cell.Value 
     'The range being copied starts in the cell to the right of the value, and is 5 cells wide 
     Set copyRange = cell.Offset(0, 1).Resize(1, 5) 
     'The data will be pasted in to a vertical block of cells 
     'The copied data gets repeated in each row 
     Set targetRange = targetRange.Resize(count, 1) 
     copyRange.Copy targetRange 
     'Reset the targetrange ready for the next row 
     Set targetRange = targetRange.Offset(count, 0) 
    Next 
End Sub 

Я не имею Mac, но ниже код работает отлично на Excel 2013, и я не знаю о какой-либо причине, что она не будет работать на макинтош

+0

Спасибо! Прежде чем попробовать, у меня есть несколько вопросов. Будут ли скопированные данные сохраняться в разбивке по столбцам? Каждый столбец является переменной, поэтому мне нужно, чтобы скопированные данные все еще были в столбцах. Кроме того, где в коде сколько раз я хочу, чтобы скопирована строка? Я уверен, что он есть, я просто не вижу, читает ли он его в ячейке в данных (что у меня есть), или если я его вручную ввожу (что я также могу сделать). Спасибо! – shannimcg

+0

Это будет хранить каждую строку данных, которые копируются в том же макете (т. Е. В образце, если копирует блок с высотой 1 ячейку и шириной 5 ячеек, поэтому, когда она вставлена, она будет по-прежнему иметь 5 ячеек). – Jane

+0

Число вставок, которое будет вставлено, происходит из count = cell.value. В этом случае код проходит через ячейки в указанном диапазоне (B1: B6) и получает значение из этой ячейки. Затем счетчик используется для установки количества строк, в которые вставляются данные, в (targetRange.Resize) и для сброса целевого диапазона для следующего блока данных (targetRange.Offset) – Jane