2015-03-27 2 views
-1

Если в ячейке таблицы данных содержится значение x> 1, я хотел бы скопировать и вставить строку, содержащую эту ячейку «x», количество раз. Строки будут вставляться с x = 1 в следующей доступной пустой строке.Excel VBA разделение строк


TREVDAN 2 CENTRAL 3 GAL FAB 1 Из этого.


TREVDAN 1 TREVDAN 1 CENTRAL 1 CENTRAL 1 CENTRAL 1 GAL FAB 1 Чтобы выглядеть примерно так.

+0

Добро пожаловать на ТАК! [Как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask). – FreeMan

+0

Строки содержат только значения? Или могут быть также формулы в некоторых клетках? –

ответ

0

Это будет работать на вас.

Sub SpecialCopy() 
    'Assuming A and B columns source columns 
    Dim i As Long, k As Long 
    Dim j As Long: j = 1 
    For i = 1 To Cells(Cells.Rows.Count, 1).End(xlUp).Row 
     k = 1 
     Do While k <= Range("B" & i).Value 
      'Assuming C and D are destination columns 
      Range("C" & j).Value = Range("A" & i).Value 
      Range("D" & j).Value = 1 
      j = j + 1 
      k = k + 1 
     Loop 
    Next i 
End Sub 
+0

Что делать, если мне нужно увеличить число столбцов, чтобы они были больше, чем 2? – Markus

0

здание от ответа, предоставленной @Jeanno, вы можете использовать следующее, если вы хотите, чтобы вставить результаты непосредственно поверх исходной таблицы:

Sub SpecialCopy() 

'Assuming A and B columns source columns 
Dim i As Long, k As Long 
Dim j As Long: j = 1 
Dim ArrayLength As Long: ArrayLength = Application.WorksheetFunction.Sum(ActiveSheet.Range("B:B")) 
ReDim MyArray(1 To ArrayLength) As String 

For i = 1 To Cells(Cells.Rows.Count, 1).End(xlUp).Row 
    k = 1 
    Do While k <= Range("B" & i).Value 
     MyArray(j) = Range("A" & i).Value 
     j = j + 1 
     k = k + 1 
    Loop 
Next i 

For Each MyCell In Range("a1:a" & ArrayLength) 
MyCell.Value = MyArray(MyCell.Row()) 
MyCell.Offset(0, 1).Value = 1 
Next MyCell 

End Sub 
+0

Как я могу изменить этот код для работы с количеством, находящимся в третьем столбце, а 1, 2 и 4 столбцы - это другие данные? – Markus

+0

Строка 'Do While k <= Range (" B "& i) .Value)' где вы указываете букву столбца, соответствующую тому, где столбец имеет ваши номера, вам также потребуется обновить переменную 'ArrayLength' до посмотрите на тот же столбец, если переключить его с Col B на другое. Если вам нужно сохранить дополнительные значения, вы можете создать больше массивов, как первый - 'ReDim MyArray2 (от 1 до ArrayLength) как String', скопировать значения в этот массив с помощью MyArray2 (j) = Range (« B »& i) .Value', затем вставьте эти значения в результаты со смещением - 'MyCell.Offset (0, 1) .Value = MyArray2 (MyCell.Row())' – CactusCake