2013-03-01 2 views
0

Итак ... Я искал хорошую сумму, как это сделать, и пока я могу получить часть ее на работу, я не могу понять, как получить все кусочки работаетВставить строки и заполнить/скопировать значения

Мои исходные данные выглядит следующим образом и говорит мне, сколько строк каждое значение в столбце Title необходимо (например, Value1 будет иметь 3 строки, Value2 будет иметь одну строку, и т.д.)

Title Audit Period Target Count 
Value1 2013-Q1     3 
Value2 2013-Q1     1 
Value3 2013-Q2     3 
Value4 2013-Q3     4 
Value5 2013-Q4     2 

Я бы хотел, чтобы через VBA был нажат кнопку, и он форматирует/заполняет приведенную выше информацию следующим образом:

Title Audit Period 
Value1 2013-Q1 
Value1 2013-Q1 
Value1 2013-Q1 
Value2 2013-Q1 
Value3 2013-Q2 
Value3 2013-Q2 
Value3 2013-Q2 
Value4 2013-Q3 
Value4 2013-Q3 
Value4 2013-Q3 
Value4 2013-Q3 
Value5 2013-Q4 
Value5 2013-Q4 

Меня не волнует, где размещены преобразованные данные ... код может перезаписывать исходные данные или помещать результаты в отдельную вкладку ... или что-то еще.

Благодарим за любую помощь, которую вы можете предложить.

+0

Почему VBA - это также может быть сделано только с формулами ;-) –

+0

@PeterAlbert ... Этого не нужно быть VBA. Я предположил, что VBA, так как я изначально разбил мозг о том, как это сделать с помощью формул, но он не нажимал на то, как выполнить –

ответ

2

Вот код VBA, чтобы сделать это - вам нужно только изменить имена листов и начать диапазоны:

Sub MultiplyRows() 
    Dim rngSource As Range, rngTarget As Range 

    Set rngSource = Sheets("Sheet1").Range("A2") 
    Set rngTarget = Sheets("Sheet2").Range("A2") 

    While rngSource <> "" 
     rngSource.Resize(, 2).Copy rngTarget.Resize(rngSource.Offset(, 2), 2) 
     Set rngTarget = rngTarget.Offset(rngSource.Offset(, 2)) 
     Set rngSource = rngSource.Offset(1) 
    Wend 
End Sub 

В качестве альтернативы, вы можете сделать это только с формулами:

enter image description here

Идея состоит в том, что вы используете некоторые вспомогательные столбцы для подсчета и извлечения данных. В деталях у меня есть 3 вспомогательных столбца со следующей логикой:

  • «Исходная строка», столбец E: Это фактическая строка в исходных данных, к которой относится эта целевая строка. «Логика столбца» состоит в том, что он такой же, как в строке выше, если только в строке выше счетчика не было равно максимальному счету. Поэтому формула в E5 равна: =IF(F4=G4,E4+1,E4). Вам также необходимо «инициализировать» столбец, т. Е. В E4 я использовал: =ROW(A3)+1
  • Макс. Количество: количество строк, необходимых для текущей строки источника. F4: =INDEX(C:C;E4)
  • Количество: Это счетчик, как часто текущая строка источника уже заполнена. Логика состоит в том, чтобы просто увеличить значение сверху на единицу - если исходная строка в этом столбце не отличается от последней строки. G4: =IF(E4<>E3,1,G3+1)

Теперь вам нужно использовать только номер, сохраненный в столбце Е в качестве аргумента для индексной функции, т.е. скопировать эту формулу из Н4 вниз, а также к колонку I: =INDEX(A:A,E4).

Теперь вам нужно только скопировать формулы для 5 столбцов до необходимого количества строк. (Не забудьте скопировать столбец E, начинающийся в строке 5, но столбцы F: I в строке 4.

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