Дата: Воскресенье, 16.02.2014, 22:53 |
Сообщение № 1
Группа: Гости
ДАНО Имеется 3 столбца. В первом - 45000 артикулов. Во втором 2000 артикулов, каждый из который несколько раз встречается в 1ом столбце. В третьем - соответствующие 2му столбцу тексты. ЗАДАЧА Найти в первом столбце все артикулы из 2го столбца и вставить на 2 ячейки правее каждого из них соответствующее значение из третьего столбца.
P.S. Долго пыталась сама написать макрос, дошла для решения по 1 итерации. Но как довести до конца и полностью автоматизировать процесс уже не могу додуматься. Надеюсь на помощь. Вот то, что написала я: x = Range("H12").Value y = Range("J12").Value ActiveSheet.UsedRange.Cells.Find(What:=x, _ After:=ActiveCell, _ LookIn:=xlValues, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False).Select
ДАНО Имеется 3 столбца. В первом - 45000 артикулов. Во втором 2000 артикулов, каждый из который несколько раз встречается в 1ом столбце. В третьем - соответствующие 2му столбцу тексты. ЗАДАЧА Найти в первом столбце все артикулы из 2го столбца и вставить на 2 ячейки правее каждого из них соответствующее значение из третьего столбца.
P.S. Долго пыталась сама написать макрос, дошла для решения по 1 итерации. Но как довести до конца и полностью автоматизировать процесс уже не могу додуматься. Надеюсь на помощь. Вот то, что написала я: x = Range("H12").Value y = Range("J12").Value ActiveSheet.UsedRange.Cells.Find(What:=x, _ After:=ActiveCell, _ LookIn:=xlValues, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False).Select
Дата: Воскресенье, 16.02.2014, 22:58 |
Сообщение № 2
Группа: Гости
Извиняюсь, в примерах удалились пробелы и они стали нечитаемыми. Переписываю: Пример задачи: 10----------------------3-----------текст3 22----------------------7-----------текст7 3-----------------------9-----------текст9 44---------------------- 56---------------------- 62---------------------- 7---------------------- 80---------------------- 9---------------------- 3---------------------- 7----------------------
Извиняюсь, в примерах удалились пробелы и они стали нечитаемыми. Переписываю: Пример задачи: 10----------------------3-----------текст3 22----------------------7-----------текст7 3-----------------------9-----------текст9 44---------------------- 56---------------------- 62---------------------- 7---------------------- 80---------------------- 9---------------------- 3---------------------- 7----------------------
С макросами я хоть как-то знакома, а с функцией познакомилась впервые после вашего сообщения. Насколько я смогла в ней разобраться, она ВСТАВИТ ИСКОМОЕ значение. Мне же нужно ПРАВЕЕ ИСКОМОГО вставить имеющееся выражение. Поправьте, если я не права.
Прикрепляю файлы примера. Для удобства удалила строки, оставила только 30. На листе 1 - то, что есть изначально, на листе 2 - то, что надо получить.
С макросами я хоть как-то знакома, а с функцией познакомилась впервые после вашего сообщения. Насколько я смогла в ней разобраться, она ВСТАВИТ ИСКОМОЕ значение. Мне же нужно ПРАВЕЕ ИСКОМОГО вставить имеющееся выражение. Поправьте, если я не права.lmln
Если считаете, что с макросом Вам легче будет разобраться, то: [vba]
Код
Public Sub www() Dim a, b, i& a = Range("h2:j" & [h65536].End(xlUp).Row) With CreateObject("scripting.dictionary") For i = 1 To UBound(a) .Item(a(i, 1)) = i Next b = Range("d2:f" & [d65536].End(xlUp).Row) For i = 1 To UBound(b) If .Exists(b(i, 1)) Then b(i, 3) = a(.Item(b(i, 1)), 3) Next End With [d2].Resize(UBound(b), 3) = b End Sub
[/vba]
Если считаете, что с макросом Вам легче будет разобраться, то: [vba]
Код
Public Sub www() Dim a, b, i& a = Range("h2:j" & [h65536].End(xlUp).Row) With CreateObject("scripting.dictionary") For i = 1 To UBound(a) .Item(a(i, 1)) = i Next b = Range("d2:f" & [d65536].End(xlUp).Row) For i = 1 To UBound(b) If .Exists(b(i, 1)) Then b(i, 3) = a(.Item(b(i, 1)), 3) Next End With [d2].Resize(UBound(b), 3) = b End Sub
Спасибо большое, смысл поняла. Но я так понимаю, вы вручную вставляли эти формулы в соответствующие ячейки? То есть: 1) поиск первого значения из столбца "ПОИСК ПО ЭТОМУ НОМЕРУ" 2) смещаемся на 2 ячейки вправо от найденного значения 3) вставляем формулу 4) меняем аргумент ВПР "искомое значение" на номер найденной в п.1 ячейки Правильно я поняла? Если так, то эту часть мне нужно как-то автоматизировать. И снова я вижу только 1 путь - через макросы. Но такой макрос достаточно просто написать, единственное - не знаю, как на VBA написать поиск ячейки целиком (не на совпадение части значения, а на полное совпадение). Не подскажете, как это сделать, и верны ли вообще мои рассуждения?
Спасибо большое, смысл поняла. Но я так понимаю, вы вручную вставляли эти формулы в соответствующие ячейки? То есть: 1) поиск первого значения из столбца "ПОИСК ПО ЭТОМУ НОМЕРУ" 2) смещаемся на 2 ячейки вправо от найденного значения 3) вставляем формулу 4) меняем аргумент ВПР "искомое значение" на номер найденной в п.1 ячейки Правильно я поняла? Если так, то эту часть мне нужно как-то автоматизировать. И снова я вижу только 1 путь - через макросы. Но такой макрос достаточно просто написать, единственное - не знаю, как на VBA написать поиск ячейки целиком (не на совпадение части значения, а на полное совпадение). Не подскажете, как это сделать, и верны ли вообще мои рассуждения?lmln
что-то я с утра совсем тупая. Макрос пробую, но на моем рабочем файле не работает: надо что-то подкорректировать, но я не могу разобраться, что. Мой уровень в макросах куда ниже, чем в предложенном варианте Хотя наверно если почитать про каждое из выражений - станет ясно. На файле-примере макрос работает безукоризненно. Спасибо большое за помощь!
что-то я с утра совсем тупая. Макрос пробую, но на моем рабочем файле не работает: надо что-то подкорректировать, но я не могу разобраться, что. Мой уровень в макросах куда ниже, чем в предложенном варианте Хотя наверно если почитать про каждое из выражений - станет ясно. На файле-примере макрос работает безукоризненно. Спасибо большое за помощь!lmln