помогите с макросом задача из диапазона № телефонов столбец А на листе "переименование" найти строку на листе "список" - далее из этой (найденной) строки сразу вернуть значение записанное в столбце В на лист "переименование" в столбец С - потом заменить его значением которое записано на строку ниже искомой с листа "переименование"
в примере на листе переименование есть образец того что должно будет получиться
помогите с макросом задача из диапазона № телефонов столбец А на листе "переименование" найти строку на листе "список" - далее из этой (найденной) строки сразу вернуть значение записанное в столбце В на лист "переименование" в столбец С - потом заменить его значением которое записано на строку ниже искомой с листа "переименование"
в примере на листе переименование есть образец того что должно будет получитьсяluny
потом заменить его значением которое записано на строку ниже искомой
Заменить значение на листе "список" ? В примере 11112, имя2 заменить на имя23. В итоге тоже самое + ещё раз имя2. Ни на одном из листов ни чего не поменялось, или я туплю.
потом заменить его значением которое записано на строку ниже искомой
Заменить значение на листе "список" ? В примере 11112, имя2 заменить на имя23. В итоге тоже самое + ещё раз имя2. Ни на одном из листов ни чего не поменялось, или я туплю.wild_pig
wild_pig, в листе "список" кроме имен ни чего не меняется - менять я не стал т.к. єто пример - заменил бы нечего менять было бы
смысл этой операции в том чтоб потом можно было проконтролировать "что на что" изменилось чтоб исключить ошибку так сказать можно конечно сравнивать 2 ячейки в строке но я не уверен что можно сравнить имя1= иванов иван иванович и имя2= иванова ивана ивановича
wild_pig, в листе "список" кроме имен ни чего не меняется - менять я не стал т.к. єто пример - заменил бы нечего менять было бы
смысл этой операции в том чтоб потом можно было проконтролировать "что на что" изменилось чтоб исключить ошибку так сказать можно конечно сравнивать 2 ячейки в строке но я не уверен что можно сравнить имя1= иванов иван иванович и имя2= иванова ивана ивановичаluny
Я так и не понял на каком листе должен быть результат и в каком виде, как на первом так и на втором есть пример "результата". Сделал на первом
[vba]
Код
Sub uuu() Application.ScreenUpdating = False With Sheets("переименование") a = .Range("A1:B" & .Cells(Rows.Count, 1).End(xlUp).Row).Value End With With Sheets("список") Set sd = CreateObject("Scripting.Dictionary") For i = 1 To UBound(a) If a(i, 1) <> "" And a(i, 1) <> "заменить на" Then sd.Item(a(i, 1)) = a(i + 1, 2) End If Next For rw = 1 To .Cells(Rows.Count, 1).End(xlUp).Row If sd.Exists(CDbl(.Cells(rw, 1))) Then .Cells(rw, 3) = sd.Item(CDbl(.Cells(rw, 1))) End If Next End With Application.ScreenUpdating = True End Sub
[/vba]
Я так и не понял на каком листе должен быть результат и в каком виде, как на первом так и на втором есть пример "результата". Сделал на первом
[vba]
Код
Sub uuu() Application.ScreenUpdating = False With Sheets("переименование") a = .Range("A1:B" & .Cells(Rows.Count, 1).End(xlUp).Row).Value End With With Sheets("список") Set sd = CreateObject("Scripting.Dictionary") For i = 1 To UBound(a) If a(i, 1) <> "" And a(i, 1) <> "заменить на" Then sd.Item(a(i, 1)) = a(i + 1, 2) End If Next For rw = 1 To .Cells(Rows.Count, 1).End(xlUp).Row If sd.Exists(CDbl(.Cells(rw, 1))) Then .Cells(rw, 3) = sd.Item(CDbl(.Cells(rw, 1))) End If Next End With Application.ScreenUpdating = True End Sub
wild_pig, спасибо - за помощь но "не оно" - как объяснить то?! во тором примере страницы с состоянием до и после поиск и замена значения со второго листа на первом но перед заменой значение с первого копируется на второй в столбец С
wild_pig, спасибо - за помощь но "не оно" - как объяснить то?! во тором примере страницы с состоянием до и после поиск и замена значения со второго листа на первом но перед заменой значение с первого копируется на второй в столбец Сluny
Ну тогда без выделываний, просто пройтись по ячейкам, запускать на листе список [vba]
Код
Sub uuu() Application.ScreenUpdating = False For rw1 = 2 To Cells(Rows.Count, 1).End(xlUp).Row With Sheets("переименование") For rw2 = 2 To .Cells(Rows.Count, 1).End(xlUp).Row If .Cells(rw2, 1) <> "" And .Cells(rw2, 1) <> "заменить на" Then If Cells(rw1, 1) = .Cells(rw2, 1) Then .Cells(rw2, 3) = Cells(rw1, 2) Cells(rw1, 2) = .Cells(rw2 + 1, 2) Exit For End If End If Next End With Next Application.ScreenUpdating = True End Sub
[/vba]
Ну тогда без выделываний, просто пройтись по ячейкам, запускать на листе список [vba]
Код
Sub uuu() Application.ScreenUpdating = False For rw1 = 2 To Cells(Rows.Count, 1).End(xlUp).Row With Sheets("переименование") For rw2 = 2 To .Cells(Rows.Count, 1).End(xlUp).Row If .Cells(rw2, 1) <> "" And .Cells(rw2, 1) <> "заменить на" Then If Cells(rw1, 1) = .Cells(rw2, 1) Then .Cells(rw2, 3) = Cells(rw1, 2) Cells(rw1, 2) = .Cells(rw2 + 1, 2) Exit For End If End If Next End With Next Application.ScreenUpdating = True End Sub
wild_pig, все работает единственно что можно заменить чтоб у кода была жесткая привязка к листу "список" а то можно так сказать напороть запустив макрос на другом листе или в данном случае проще кнопку сделать?
wild_pig, все работает единственно что можно заменить чтоб у кода была жесткая привязка к листу "список" а то можно так сказать напороть запустив макрос на другом листе или в данном случае проще кнопку сделать?luny
Sub uuu() Application.ScreenUpdating = False For rw1 = 2 To Sheets("список").Cells(Rows.Count, 1).End(xlUp).Row With Sheets("переименование") For rw2 = 2 To .Cells(Rows.Count, 1).End(xlUp).Row If .Cells(rw2, 1) <> "" And .Cells(rw2, 1) <> "заменить на" Then If Sheets("список").Cells(rw1, 1) = .Cells(rw2, 1) Then .Cells(rw2, 3) = Sheets("список").Cells(rw1, 2) Sheets("список").Cells(rw1, 2) = .Cells(rw2 + 1, 2) Exit For End If End If Next End With Next Application.ScreenUpdating = True End Sub
[/vba]
вот оно чё:
[vba]
Код
Sub uuu() Application.ScreenUpdating = False For rw1 = 2 To Sheets("список").Cells(Rows.Count, 1).End(xlUp).Row With Sheets("переименование") For rw2 = 2 To .Cells(Rows.Count, 1).End(xlUp).Row If .Cells(rw2, 1) <> "" And .Cells(rw2, 1) <> "заменить на" Then If Sheets("список").Cells(rw1, 1) = .Cells(rw2, 1) Then .Cells(rw2, 3) = Sheets("список").Cells(rw1, 2) Sheets("список").Cells(rw1, 2) = .Cells(rw2 + 1, 2) Exit For End If End If Next End With Next Application.ScreenUpdating = True End Sub