Всем привет.. Есть файл большой, который из какой то вредной программы выгружается. В нем в столбце X указано количество материала, которое заказывали определенные люди (участки). Указано "коряво" через запятую. Очень нужно макросом переместить все названия участков в столбцы начиная с Z со второй строки (или в первого пустого столбца, что одно и тоже) и количество, что они заказали. К сожалению в ячейках бывает и один участок и несколько через запятую. Количество указано через тире. Немного заполнил в ручную, как должно выглядеть, но делать все в ручную, это на смену или больше.. Есть еще один нюанс... бывает, что в ячейке столбца X указан только один участок без количества.. у меня это во второй строке так. В этом случае, если нет количества через тире нужно его взять из столбца R. В примере зеленым залил такой случай.
Всем привет.. Есть файл большой, который из какой то вредной программы выгружается. В нем в столбце X указано количество материала, которое заказывали определенные люди (участки). Указано "коряво" через запятую. Очень нужно макросом переместить все названия участков в столбцы начиная с Z со второй строки (или в первого пустого столбца, что одно и тоже) и количество, что они заказали. К сожалению в ячейках бывает и один участок и несколько через запятую. Количество указано через тире. Немного заполнил в ручную, как должно выглядеть, но делать все в ручную, это на смену или больше.. Есть еще один нюанс... бывает, что в ячейке столбца X указан только один участок без количества.. у меня это во второй строке так. В этом случае, если нет количества через тире нужно его взять из столбца R. В примере зеленым залил такой случай.ovechkin1973
Добрый день. Если перенести в 1 строку все названия участков, то можно вот такой функцией пользователя обработать [vba]
Код
Function ovechkin(t, p) If t.Value = p.Value Then ovechkin = t.Offset(0, -6).Value: Exit Function With CreateObject("VBScript.RegExp") .Pattern = Replace(Replace(p, ")", "\)"), "(", "\(") & "-(\d+)" If .test(t) Then ovechkin = CDbl(.Execute(t)(0).Submatches(0)) Else: ovechkin = "" End If End With End Function
[/vba]
Добрый день. Если перенести в 1 строку все названия участков, то можно вот такой функцией пользователя обработать [vba]
Код
Function ovechkin(t, p) If t.Value = p.Value Then ovechkin = t.Offset(0, -6).Value: Exit Function With CreateObject("VBScript.RegExp") .Pattern = Replace(Replace(p, ")", "\)"), "(", "\(") & "-(\d+)" If .test(t) Then ovechkin = CDbl(.Execute(t)(0).Submatches(0)) Else: ovechkin = "" End If End With End Function
А почему именно макросом? Чем Вас Текст по столбцам не устраивает?
придется часто пользоваться в разных версиях файла.. и еще его дорабатывать придеться макросами. И еще если значений очень много, то файл тормозить начинает.
А почему именно макросом? Чем Вас Текст по столбцам не устраивает?
придется часто пользоваться в разных версиях файла.. и еще его дорабатывать придеться макросами. И еще если значений очень много, то файл тормозить начинает.ovechkin1973
Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
Уважаемый sboy, впервые моей фамилией называют функцию.. и она самая понятная для меня часть кода Но пока формулы не увидел на листе не смог пользоваться.. Не совсем то, что просил, но работает как надо! Огромное человеческое..
Уважаемый sboy, впервые моей фамилией называют функцию.. и она самая понятная для меня часть кода Но пока формулы не увидел на листе не смог пользоваться.. Не совсем то, что просил, но работает как надо! Огромное человеческое..ovechkin1973
Плохо когда не знаешь, да еще забудешь. Правильно сформулированный вопрос содержит половину ответа.
Сообщение отредактировал ovechkin1973 - Вторник, 15.05.2018, 20:17