Страницы: 1
RSS
Разделить строку на ячейки
 
привет
есть строка
Код:97441Артикул:Q5000( TES )Бренд:PICT яблокоНаличие:>10Рек. цена:59,96 р.
62.33 р. 47.97 р.
надо всё разбить чтобы каждое поле легло в отдельную ячейку

 
КодАртикулБрендНаличиеРек. ценабылостало
97441Q5000( TES )PICTяблоко>1059,96 р.62.33 р. 47.97 р.
 
задача решена. все у вас нормально легло и тут больше нечего не добавить не убавить
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
чуть кривовато правда, но можно подровнять пробелами
 
Тимофеев,  :D
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
fedsum, готово:
 
fedsum, У Вас 166 сообщений и Вы до сих пор не прочитали привила форума, особенно п.2.3
 
Цитата
написал:
готово
а это как
 
файл примера
 
Цитата
fedsum написал:
файл примера
В Вашем примере не строка, а 2 строки. Решение делал для одной строки, как было написано в первом сообщении.
Цитата
fedsum написал:
а это как
в Power Query можно так:
Код
let
  src = Excel.CurrentWorkbook(){[ Name = "data" ]}[Content],
  fields = List.Buffer ( Excel.CurrentWorkbook(){[ Name = "fields" ]}[Content][Поля] ),
  transform = Table.TransformColumns (
    src,
    {
      {
        "Строка",
        ( x ) =>
          [
            addDelimiter = List.Accumulate ( fields, x, ( s, c ) => Text.Replace ( s, c, "|" & c ) ),
            list = List.Select ( Text.Split ( addDelimiter, "|" ), ( y ) => y <> "" ),
            toRecs = Record.FromList (
              List.Transform ( list, ( x ) => Text.AfterDelimiter ( x, ":" ) ),
              List.Transform ( list, ( x ) => Text.BeforeDelimiter ( x, ":" ) )
            ),
            price = Record.FromList (
              List.Select ( List.Transform ( Text.Split ( toRecs[Рек. цена], "р." ), Text.Trim ), ( x ) => x <> "" ),
              { "Рек. цена", "было", "стало" }
            ),
            result = try Record.RemoveFields ( toRecs, { "Рек. цена" } ) & price otherwise toRecs
          ][result]
      }
    }
  ),
  toTbl = Table.FromRecords ( transform[Строка] )
in
  toTbl
 
а как эти пользоваться pq
 
fedsum, а в Яндексе посмотреть? Или в google, пока есть возможность :) ?
 
пишет ошибку

Expression.Error: Не найдена таблица Excel с именем "data".
Подробные сведения:
   data
 
Цитата
fedsum написал:
Expression.Error: Не найдена таблица Excel с именем "data".
data - это название таблицы, откуда с текстом. Переименуйте свою таблицу.
 
Можно ещё макросом
Так как в задании
Цитата
fedsum написал:
есть строка
То макрос работает через выделение строк. Выделяйте диапазон для обработки и жмите кнопку (в примере ячейки желтым цветом), т.к. обрабатывается сразу две строки, то количество строк должно быть четным, в противном случае последняя строка не будет обрабатываться
Не понятно, по какому принципу должно делиться "Бренд" и "Артикул", поэтому делить не стал, будет для Вас домашним заданием.
Код
Sub Макрос1()
Dim arr3, arr2, arr1, n As Long, m As Byte, i As Long, v As Byte
arr1 = Selection
ReDim arr3(1 To UBound(arr1) \ 2, 1 To 7)
i = 1
For n = LBound(arr1) To (UBound(arr1) \ 2) * 2 Step 2
    arr2 = Split(Replace(Replace(Replace(Replace(Replace(arr1(n, 1), "Рек. цена", ""), "Наличие", ""), "Бренд", ""), "Артикул", ""), "Код:", ""), ":")
    v = IIf(UBound(arr2) < 4, UBound(arr2) + 1, 5)
    For m = 1 To v
        arr3(i, m) = arr2(m - 1)
    Next
    arr2 = Split(Replace(arr1(n + 1, 1), "р.", "р.:"), ":")
    v = IIf(UBound(arr2) < 1, UBound(arr2) + 1, 2)
    For m = 1 To v
        arr3(i, m + 5) = arr2(m - 1)
    Next
    i = i + 1
Next
    Range(Cells(4, 2), Cells(UBound(arr3) + 3, 8)) = arr3
End Sub
Изменено: Msi2102 - 02.03.2022 09:59:21
 
Цитата
написал:
Изменено: Msi2102  - 02.03.2022 09:59:21
выделяю и жму
ошибка
ReDim arr3(1 To UBound(arr1) \ 2, 1 To 7)
а стоп понял работает
Изменено: fedsum - 02.03.2022 14:51:00
 
Код
arr1 = Selection.Value
 
У Вас фактически было всё сделано, только надо было стать на первую ячейку с разделёнными данными и нажать Ctrl+E(eng) и так по очереди вправо каждую ячейку
 
Цитата
jakim написал:
У Вас фактически было всё сделано,
А ещё нужно было объединить первую строку со второй. Там данные в двух строках
 
jakim, если не секрет, что было сделано?
Сколько Ctrl+E(eng) ни давлю, кроме звука "плюм" ничего не извлекается
 
Цитата
jakim: Ctrl+E(eng) и так по очереди вправо каждую ячейку
Цитата
RAN: если не секрет, что было сделано? Сколько Ctrl+E(eng) ни давлю, кроме звука "плюм" ничего не извлекается
комбинация для вызова "мгновенного заполнения" - ИИ, который определяет с разной степенью точности, что нужно сделать

Цитата
jakim: стать на первую ячейку с разделёнными данными
важно дать пример ИИ, что нужно сделать. Иногда одного примера мало и приходится делать второй, третий - иначе ИИ не сработает или сработает не совсем так, как нужно

Суперсила Мгновенного заполнения (Flash Fill)
Изменено: Jack Famous - 02.03.2022 15:52:45
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
RAN, ТУТ
 
Так сразу и надо было писать, что в 2010 работать не будет.
Изменено: RAN - 02.03.2022 16:01:26
 
Цитата
написал:
data - это название таблицы, откуда с текстом. Переименуйте свою таблицу.
переименовал лист в data все равно не работает
 
Цитата
fedsum написал:
переименовал лист в data все равно не работает
Я ничего про лист и не писал :) Я говорил о таблице :)
 
Цитата
написал:
Я ничего про лист и не писал  Я говорил о таблице
не могу найти вкладку конструктор только разработчмк
 
Цитата
fedsum написал:
не могу найти вкладку конструктор
Появится после создания УМНОЙ ТАБЛИЦЫ
УМНАЯ ТАБЛИЦА ещё почитайте про Power Query ТУТ или ТУТ
Изменено: Msi2102 - 03.03.2022 08:20:30
 
ошибка
Expression.Error: Столбец "Строка" таблицы не найден.
Сведения:
   Строка
 
Цитата
написал:
surkenny
так как все таки запустить pq что то получаться совсем
Страницы: 1
Наверх