Добрый день. Собственно есть столбец с данными. Его нужно разбить на 2 столбца, так чтобы данные соответствующие другим данным заполнились автоматом. Например, список: фрукты, яблоко, груша, овощи, огурец, ягоды, арбуз, вишня, малина. А получится должно 2 столбца: во 2-м яблоко, груша, огурец ..., а в 1 фрукты, фрукты, овощи ... Только тут вместо фрукты, овощи ... всегда числа с определенным количеством цифр, а вместо яблоко ... - текст. Причем этих текстов относящихся к числам может быть любое количество. Подскажите пожалуйста как это сделать. Спасибо.
Добрый день. Собственно есть столбец с данными. Его нужно разбить на 2 столбца, так чтобы данные соответствующие другим данным заполнились автоматом. Например, список: фрукты, яблоко, груша, овощи, огурец, ягоды, арбуз, вишня, малина. А получится должно 2 столбца: во 2-м яблоко, груша, огурец ..., а в 1 фрукты, фрукты, овощи ... Только тут вместо фрукты, овощи ... всегда числа с определенным количеством цифр, а вместо яблоко ... - текст. Причем этих текстов относящихся к числам может быть любое количество. Подскажите пожалуйста как это сделать. Спасибо.Gespenst
Предполагается, что в строке 1 находится заголовок, поэтому макрос анализирует данные, начиная со строки 2.
[vba]
Код
Sub Разбить()
Dim arr1(), arr2(), lr As Long, i As Long, r As Long
lr = Cells(Rows.Count, "A").End(xlUp).Row
arr1() = Range("A1:B" & lr).Value For i = 2 To UBound(arr1) If IsNumeric(arr1(i, 1)) = True Then arr1(i, 2) = arr1(i, 1) arr1(i, 1) = Null Else arr1(i, 2) = arr1(i - 1, 2) End If Next i
ReDim arr2(1 To UBound(arr1), 1 To 2) For i = 2 To UBound(arr1) If IsNull(arr1(i, 1)) = False Then r = r + 1 arr2(r, 1) = arr1(i, 2) arr2(r, 2) = arr1(i, 1) End If Next i
Range("D2").Resize(r, 2).Value = arr2()
MsgBox "Готово!", vbInformation
End Sub
[/vba]
Предполагается, что в строке 1 находится заголовок, поэтому макрос анализирует данные, начиная со строки 2.
[vba]
Код
Sub Разбить()
Dim arr1(), arr2(), lr As Long, i As Long, r As Long
lr = Cells(Rows.Count, "A").End(xlUp).Row
arr1() = Range("A1:B" & lr).Value For i = 2 To UBound(arr1) If IsNumeric(arr1(i, 1)) = True Then arr1(i, 2) = arr1(i, 1) arr1(i, 1) = Null Else arr1(i, 2) = arr1(i - 1, 2) End If Next i
ReDim arr2(1 To UBound(arr1), 1 To 2) For i = 2 To UBound(arr1) If IsNull(arr1(i, 1)) = False Then r = r + 1 arr2(r, 1) = arr1(i, 2) arr2(r, 2) = arr1(i, 1) End If Next i