Страницы: 1
RSS
Перенос строчных значений в табличные
 
Доброго времени суток, уважаемые форумчане!  

Подскажите каким образом, какой формулой это лучше сделать, пример в приложении.

1) Есть порядка 15000 строк со значениями в формате(таб 1):
Бренд Свобода Тип Крем# молочко Страна Россия
и
Бренд,Свобода,Тип,Крем, молочко,Страна,Россия

2) нужно объединить первую со второй, т.е. грубо говоря наложить друг на друга чтобы получилось(таб 2):
Бренд,Свобода,Тип,Крем# молочко,Страна,Россия

причем этот знак # как может быть один так и несколько

3) далее из строчного вида значения перевести в табличные, название столбца и содержимое ячеек отделяются запятыми и идут друг за другом (таб 3):
Бренд Тип Страна
Свобода Крем# молочко Россия
4) и можно ли в последствии не тратя времени на 2-ой пункт - на объединение, переводить сразу из строчного вида в табличный зная заголовки столбцов (таб 4):
Бренд Свобода Тип Крем# молочко Страна Россия

Спасибо за ответы.
 
Подсказываю - лучше не формулой а макросом

вопрос: вот здесь
Бренд   Атяшево Тип Ветчина Нарезка нет Температурный режим# °C 0...+6 Страна Россия   Тип хранения Охлажденка Калорийность (на 100г) 210 Жиры (на 100г) 18 Белки   (на 100г) 8 Углеводы (на 100г) 4.5
заголовки всегда идут в той же последовательности что и в таблице? не может ли быть, к примеру, такого,  что в начале указан температурный режим, а потом тип продукта?
Изменено: VideoAlex - 30.10.2018 05:55:29
 
Если рассматривать именно эту строчку в столбцах фильтр и фильтр2 - то там последовательность заголовков совпадает.
а если пункт 3) при переносе всех строк документа из строчного вида значения в табличные, - такое может быть что где то в начале указан температурный режим, а потом тип продукта.
Изменено: Hawkis - 30.10.2018 09:11:54
 
Не очень изящный и универсальный вариант, но все же. Выделяем ячейку с запятыми и запускаем макрос:
Код
Sub t()
Dim arr() As String
    y = ActiveCell.Value ' значение выделенной ячейки
    arr = Split(y, ",")
j = 6 'номер столбца куда будем вставлять таблицу
c = 31 'номер строки куда будем вставлять таблицу
u = 31 'номер строки куда будем вставлять таблицу
For i = 0 To UBound(arr)
' добавляем столько четных Or i = ... сколько запятых в ячейке
    If i = 2 Or i = 4 Or i = 6 Or i = 8 Or i = 10 Or i = 12 Or i = 14 Or i = 16 Or i = 18 Or i = 20 Or i = 22 Then 'отбираем четные запятые, т.к. надо по 2 значения в столбце(заголовок + значение)
        j = j + 1
        u = c - i - 1
    Else
        c = u + i
    End If
     Cells(i + u, j) = arr(i)
    
Next

End Sub
 
Да, спасибо, макрос рабочий, это как я понял можно только по одной ячейке за раз делать и затем в общую таблицу вручную распределять? просто очень большая таблица более 15000 значений, а вообще реально сделать полностью автоматизированный макрос чтобы он все значения в итоговую таблицу загнал?
 
Для обработки всего массива сразу у него должна быть закономерность.
Взял для примера таб.4 из Вашего файла. В красным отметил чего не хватает в строках чтобы можно было составить равномерную таблицу. И дополнительная проблема что есть значения которые не должны разбираться, но также разделены пробелами. К примеру "Сто рецептов красоты" и "Единица измерения", а надо бы иной разделитель в этих значениях иначе они также заменяются на запятые.
Тогда можно будет вот таким образом:
Код
Sub t()
j = 6 'номер столбца куда будем вставлять таблицу
c = 9 'номер строки куда будем вставлять таблицу
u = 9 'номер строки куда будем вставлять таблицу
For k = 1 To 5 ' это Ваши 15000 строк. В данном примере это строки таб.4
Cells(k, 2).Replace What:="# ", Replacement:="#", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Cells(k, 2).Replace What:=" ", Replacement:=",", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

Dim arr() As String
    y = Cells(k, 2).Value ' значение выделенной ячейки
    arr = Split(y, ",")

For i = 0 To UBound(arr)
' добавляем столько четных Or i = ... сколько запятых в ячейке
    If i = 2 Or i = 4 Or i = 6 Or i = 8 Or i = 10 Or i = 12 Or i = 14 Or i = 16 Or i = 18 Or i = 20 Or i = 22 Then 'отбираем четные запятые, т.к. надо по 2 значения в столбце(заголовок + значение)
        j = j + 1
        u = c - i - 1
    Else
        c = u + i
    End If
     Cells(i + u, j) = arr(i)
     
Next
 c = c + UBound(arr) + 2
 u = u + UBound(arr) + 1
 j = 6
 Next
 
 
 For Z = u - 1 To 10 Step -1 ' до 10 т.к. в данном случае ставляли таблицу в 9 строку и нужно оставить заголовок
 If Cells(Z, j) = "Бренд" Then Rows(Z).Delete 'удаляем  лишние заголовки

 Next
End Sub
Страницы: 1
Наверх