Профессиональные приемы работы в Microsoft Excel

Пожалуйста, войдите или зарегистрируйтесь.


Расширенный поиск  

Новости:

Подпишитесь на рассылку новых сообщений форума через службу рассылок: Subscribe.ru

Автор Тема: Сцепка значений ячеек по вариантам  (Прочитано 521 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тамара Кубарева

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 11

ДД, может такой вопрос где-то разбирался, но есть такая сложность. Нужно сцепить варианты цветов с вариантами размеров через " ", чтобы каждому варианту цвета присвоился вариант размера, затем этому же цвету следующий размер и т.д., затем для следующего цвета аналогично все размеры. Все значения цветов и размеров последовательно должны быть в одной ячейке на этой же строке, разделенные ",". Аналогично вниз по всем строкам. Файл во вложении. Значений цветов может быть 10, размеров 40.
Записан

boa

  • Глобальный модератор
  • Постоялец
  • *****
  • Уважение: +21/-0
  • Оффлайн Оффлайн
  • Сообщений: 412
  • Доброта спасет мир...

По ИМХО, оптимальное решение на пользовательской функции
Function SplitSeparComma(a As String, b As String) As String
    Dim str1$(), str2$(), str$, x, y
    str1 = split(a, ",")
    str2 = split(b, ",")
    For Each x In str1
        For Each y In str2
            str = str & x & " " & y & ","
        Next
    Next
    SplitSeparComma = Mid(str, 1, Len(str) - 1)
End Function
Записан
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Тамара Кубарева

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 11

boa спасибо, да вроде работает ваша функция, но вот при проверке, смотрю рубятся значения в конце ячейки. Что это ограничение экселя на кол-во знаков в ячейке? : http://prntscr.com/h4enyx
Записан

boa

  • Глобальный модератор
  • Постоялец
  • *****
  • Уважение: +21/-0
  • Оффлайн Оффлайн
  • Сообщений: 412
  • Доброта спасет мир...

начиная с 2007 Excel'я количество символов в ячейке = 32 767.
Возможно вы просто не видите все символы на экране?
попробуйте скопировать ячейку с функцией и вставить как значение, и посмотрите результат...
Записан
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Тамара Кубарева

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 11

да все символы на месте. Благодарю!
Записан

runner

  • Постоялец
  • ***
  • Уважение: +6/-0
  • Оффлайн Оффлайн
  • Сообщений: 131

А как вместо запятой после пары вставить символ перевода строки?
Внешним добавлением ПОДСТАВИТЬ и СИМВОЛ(10) всё решается, но можно ли это уместить внутрь UDF?
Записан

vikttur

  • Глобальный модератор
  • Старожил
  • *****
  • Уважение: +46/-0
  • Оффлайн Оффлайн
  • Сообщений: 938

Цитировать
можно ли это уместить внутрь UDF
где = Replace(где, что, на_что)
Записан

runner

  • Постоялец
  • ***
  • Уважение: +6/-0
  • Оффлайн Оффлайн
  • Сообщений: 131

Не совсем понял куда этот кусок вписать .. не силён в VBA, отсюда и проблемы :(
Я имел в виду этот кусок:
        For Each y In str2
            str = str & x & " " & y & ","
        Next
пытался вместо & "," вставить & СИМВОЛ(10) или & CHAR(10), но, похоже, это записывается по-другому
« Последнее редактирование: 02.11.2017, 15:23:14 от vikttur »
Записан

boa

  • Глобальный модератор
  • Постоялец
  • *****
  • Уважение: +21/-0
  • Оффлайн Оффлайн
  • Сообщений: 412
  • Доброта спасет мир...

пытался вместо & "," вставить & СИМВОЛ(10) или & CHAR(10), но, похоже, это записывается по-другому

str = str & x & " " & y & Chr(10)или
str = str & x & " " & y & vbNewLineили
str = str & x & " " & y & vbCrLf
Записан
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

runner

  • Постоялец
  • ***
  • Уважение: +6/-0
  • Оффлайн Оффлайн
  • Сообщений: 131

Спасибо! Всё работает :)
« Последнее редактирование: 02.11.2017, 15:23:50 от vikttur »
Записан

Тамара Кубарева

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 11
Re: Сцепка значений ячеек по вариантам
« Ответ #10 : 01.12.2017, 17:16:06 »

Добрый день!
Вопрос получил продолжение. Суть в том, что из пар значений для сцепки по предыдущему условию, не все пары должны включаться в сцепку, то есть некоторые пары вариантов Цвет+Размер отсутствуют. То есть, есть табличка (во вложении) где для каждого товара, то есть для каждой строки указывается какие значения пар цвет и размер присутствуют, а какие отсутствуют. Значения из этой таблички ложатся в ячейку "Таблица" второго файла в таком виде как в файле. В файле две строки - первая где все варианты присутствуют, вторая где что-то отсутствует, для второй строки как раз скрин таблицы. Суть того как ложатся значения таблицы в ячейку такова: Сначала идет слово Размер, то что находится в левом верхнем углу, затем перечисляются значения по горизонтали (цвета), т.е. столбцов таблички, затем начинается перечисление значений по вертикали (размеры), т.е. строк таблицы, где для каждого из значений (размер) указываются символы по количеству вертикальных элементов (цветов). Символы могут быть двух видов: есть или временно нет, их можно увидеть в ячейке, там еще между всеми соседними значениями много символов переноса. Ну вот, суть в том, что сцепку пар значений Цвет+Размер нужно получить, исключая отсутствующие варианты. черный и чёрный это наверное одно и то же, но в контексте задачи разные. :)
Записан

Тамара Кубарева

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 11
Re: Сцепка значений ячеек по вариантам
« Ответ #11 : 01.12.2017, 17:27:58 »

P.S. Все значения и пары нужно получить именно из ячейки таблица, нет перечислений через запятую как в прошлой задаче.
Записан

boa

  • Глобальный модератор
  • Постоялец
  • *****
  • Уважение: +21/-0
  • Оффлайн Оффлайн
  • Сообщений: 412
  • Доброта спасет мир...
Re: Сцепка значений ячеек по вариантам
« Ответ #12 : 02.12.2017, 10:33:18 »

Здравствуйте, Тамара
Приложите пример с табличками и примерами готовых результатов.
тот файл, что вы прикрепили к сообщению не читабелен
Записан
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Тамара Кубарева

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 11
Re: Сцепка значений ячеек по вариантам
« Ответ #13 : 02.12.2017, 14:36:31 »

Теперь должно стать понятнее, вся таблица ассортимента с картинки содержится в одной ячейке, в прошлом варианте файла там все есть, оно в ячейке, но там много переносов. В этом варианте при получении исходника применена замена переносов и табуляций на пробел. В файле .xlsx примечания.
Записан

boa

  • Глобальный модератор
  • Постоялец
  • *****
  • Уважение: +21/-0
  • Оффлайн Оффлайн
  • Сообщений: 412
  • Доброта спасет мир...
Re: Сцепка значений ячеек по вариантам
« Ответ #14 : 02.12.2017, 16:45:30 »

Тамара, как бы вам объяснить...
то, что вы прислали - обрезок xml кода
обрабатывать искаженный Userом код - не благодарное занятие, т.к. в следующий раз User исказит его по новому
надо либо оригинал XML обрабатывать, либо правильно импортировать xml в Excel.

P.S. Вы не заметили, что ваш XLSX отличается от JPG?
« Последнее редактирование: 02.12.2017, 19:32:55 от boa »
Записан
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Тамара Кубарева

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 11
Re: Сцепка значений ячеек по вариантам
« Ответ #15 : 02.12.2017, 17:46:22 »

В ячейке B3 файла Excel находится Xpath данной таблицы "assortment" и к результату применена замена переносов и табуляций на пробел. Без применения переносов и табуляций, было в файле, который в сообщении от 02.12.: http://prntscr.com/hi4omo
Вот ссылка на саму страницу товара: http://cool-kids.ru/product_info.php/info/p3569_Trusy-zhenskie-CONTE-Day-by-Day-RP-0002.html
Искажаться ничего не будет, вот так как есть так и получается.
Записан

boa

  • Глобальный модератор
  • Постоялец
  • *****
  • Уважение: +21/-0
  • Оффлайн Оффлайн
  • Сообщений: 412
  • Доброта спасет мир...
Re: Сцепка значений ячеек по вариантам
« Ответ #16 : 02.12.2017, 19:28:33 »

Если копипастить (во вложении), то можно результат обрабатывать в Excel
Ну а если парсить страницу, то это в коммерческие заказы...
Записан
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Тамара Кубарева

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 11
Re: Сцепка значений ячеек по вариантам
« Ответ #17 : 03.12.2017, 04:16:54 »

Это и есть результат парсинга страницы, в ячейке B3 в частности результат Xpath таблицы "assortment". Необходимость есть теперь этот результат записать в виде последовательности записанных пар Цвет Размер в одной ячейке через "," как в той задаче, которая была в начале этой темы, и по которой Вы предложили пользовательскую функцию. Но там нужно было последовательно перечислить все размеры и цвета по вариантам для каждого цвета каждый размер. Теперь же не все пары цвет_размер могут быть в этом перечислении. Возможно ли на основании данных в ячейке B3 получить такую последовательность на основании анализа символов, присутствующих в этой ячейке, там два вида символов - есть или нет? 
Записан

boa

  • Глобальный модератор
  • Постоялец
  • *****
  • Уважение: +21/-0
  • Оффлайн Оффлайн
  • Сообщений: 412
  • Доброта спасет мир...
Re: Сцепка значений ячеек по вариантам
« Ответ #18 : 03.12.2017, 12:33:08 »

Здравствуйте, Тамара,
я то написал функцию под ваши условия, но она вряд ли кому-то пригодится из читателей форума :(,
потому я и рекомендовал вам создать тему в "Заказы - платное решение задач по Excel", ведь это частный случай.
Option Explicit
Option Base 0

Public Function NewSplit(a As String) As String
Dim FirstArr$(), NewArr$()
Dim Str, x&, y&, i&, j&
a = Application.WorksheetFunction.Trim(a)
a = Replace(Replace(a, "<!-- -->", "Есть"), "<!-- Временно отсутствует --> ---", "Нет")
FirstArr = Split(a, " ")
For Each Str In FirstArr
    If IsNumeric(Str) Then y = y + 1
    If Not IsNumeric(Str) And y = 0 Then x = x + 1
Next
x = x - 1
ReDim NewArr(x, y)
For Each Str In FirstArr
    NewArr(i, j) = Str
    If i = x Then i = 0: j = j + 1 Else i = i + 1
Next
For i = 1 To x
    For j = 1 To y
    If NewArr(i, j) = "Есть" Then Str = Str & NewArr(i, 0) & " " & NewArr(0, j) & ","
    Next j
Next i
NewSplit = Mid(Str, 1, Len(Str) - 1)
End Function
« Последнее редактирование: 03.12.2017, 14:56:03 от boa »
Записан
Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Тамара Кубарева

  • Пользователь
  • **
  • Уважение: +0/-0
  • Оффлайн Оффлайн
  • Сообщений: 11
Re: Сцепка значений ячеек по вариантам
« Ответ #19 : 06.12.2017, 14:52:07 »

boa , спасибо за прояснение. Саму суть вопроса и правду нужно искать и решать еще на выходе из парса, а не танцевать с бубном в экселе.
Записан
 



Темы без ответов

12.01.2018 23:56 Сделать отчет на Power BI (Dashboard) 52
06.09.2017 10:43 Solver VBA не решает гиперболическое уравнение, но при этом решает гармоническое 344
17.08.2017 12:15 Гиперссылка и фильтр одновременно макрос 480
23.05.2017 11:20 Копирование данных из одной таблицы в умную таблицу по условию 1535
15.03.2017 15:45 автозамена картинок PowerPoint 1064
11.03.2017 13:43 Изменить нумерацию страниц 1283
18.02.2017 11:31 Изменить ввод данных помогите...из столбца в таблицу. 1317
07.02.2017 18:43 Блокировка ячеек по наступлению даты 1510
12.12.2016 23:39 Расчет заказа по формуле, или использовать [abbr=Вводится через Ctrl+Shift+Enter]формулу массива[/abbr] 1562
28.08.2016 19:29 Одинаковые заголовки после обновления оглавления 2037





Яндекс цитирования msexcel.ru Яндекс.Метрика

Страница сгенерирована за 0.175 секунд. Запросов: 122.