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

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


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

Новости:

К первому сообщению темы должен быть прикреплен файл примера в формате xls*.
Приложив пример, Вы избавите себя и других от вопросов типа "А какой критерий?", "А куда выводить результат?", "А сколько строк?" и все тех же просьб выложить файл. Рисовать за Вас Ваши же таблички с заданиями, а затем и решение к ним, никто желанием не горит. Да и, как показывает практика, в большинстве случаев без файла решения не найти.

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

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

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

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

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

boa

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

По ИМХО, оптимальное решение на пользовательской функции
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

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

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

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

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

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

runner

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

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

vikttur

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

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

runner

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

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

boa

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

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

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

runner

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

Спасибо! Всё работает :)
« Последнее редактирование: 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

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

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

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

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

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

boa

  • Глобальный модератор
  • Постоялец
  • *****
  • Уважение: +26/-0
  • Оффлайн Оффлайн
  • Сообщений: 481
  • Доброта спасет мир...
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

  • Глобальный модератор
  • Постоялец
  • *****
  • Уважение: +26/-0
  • Оффлайн Оффлайн
  • Сообщений: 481
  • Доброта спасет мир...
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

  • Глобальный модератор
  • Постоялец
  • *****
  • Уважение: +26/-0
  • Оффлайн Оффлайн
  • Сообщений: 481
  • Доброта спасет мир...
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 , спасибо за прояснение. Саму суть вопроса и правду нужно искать и решать еще на выходе из парса, а не танцевать с бубном в экселе.
Записан
 



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

22.05.2018 11:38 Скрипт написать который допишет данные в файл 171
03.03.2018 00:00 Подсчет отработанного времени, за исключением заранее определенных перерывов 597
14.02.2018 10:11 Подготовить читабельную отчетность по платежам 567
23.01.2018 13:46 Найти вероятность повторной покупки 578
12.01.2018 23:56 Сделать отчет на Power BI (Dashboard) 780
06.09.2017 10:43 Solver VBA не решает гиперболическое уравнение, но при этом решает гармоническое 846
17.08.2017 12:15 Гиперссылка и фильтр одновременно макрос 1081
23.05.2017 11:20 Копирование данных из одной таблицы в умную таблицу по условию 2530
15.03.2017 15:45 автозамена картинок PowerPoint 1567
11.03.2017 13:43 Изменить нумерацию страниц 1802





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

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