Здравствуйте, дорогие форумчане, хочу попросить помощи, у меня на работе периодически возникает задача переделывать список организаций в столбце эксель, организации в эксель введены по разному, например ООО "Бугульма", а введено Бугульминское и т.д. есть определенные куски текста по которым можно идентифицировать и сделать замену, пытаюсь автоматизировать это. в общем на одном листе орг правильный список, на листе Рай список, который нужно привести в соответствие. В модуле 2, макрос замена 2 применил метод find, вроде бы работает, но он "не заканчивается", помогите пожалуйста. Это первый вопрос, второй вопрос, мне нужно чтобы он последовательно проверял список, а не одно значение. Пытался в модуле 1 макрос замена, но понял, что необх решить первый вопрос. Надеюсь на вашу помощь, сам далеко не программист
Здравствуйте, дорогие форумчане, хочу попросить помощи, у меня на работе периодически возникает задача переделывать список организаций в столбце эксель, организации в эксель введены по разному, например ООО "Бугульма", а введено Бугульминское и т.д. есть определенные куски текста по которым можно идентифицировать и сделать замену, пытаюсь автоматизировать это. в общем на одном листе орг правильный список, на листе Рай список, который нужно привести в соответствие. В модуле 2, макрос замена 2 применил метод find, вроде бы работает, но он "не заканчивается", помогите пожалуйста. Это первый вопрос, второй вопрос, мне нужно чтобы он последовательно проверял список, а не одно значение. Пытался в модуле 1 макрос замена, но понял, что необх решить первый вопрос. Надеюсь на вашу помощь, сам далеко не программистstap73
Dim c As Range Dim firstrow As Long Dim a, i As Long
With Sheets("орг") lastorg = .Cells(.Rows.Count, 1).End(xlUp).Row End With
With Sheets("Рай") a = .Cells(.Rows.Count, 1).End(xlUp).Row
With .Range(.Cells(1, 1), .Cells(a, 1))
For i = 2 To lastorg Set c = .Find(Sheets("орг").Cells(i, 2), LookIn:=xlValues) If Not c Is Nothing Then firstrow = c.Row Do c.Value = Sheets("орг").Cells(i, 1).Value Set c = .FindNext(c) Loop While c.Row > firstrow End If Next i
End With
End With
End Sub
[/vba]
Здравствуйте. Попробуйте такой вариант [vba]
Код
Sub замена2()
Dim c As Range Dim firstrow As Long Dim a, i As Long
With Sheets("орг") lastorg = .Cells(.Rows.Count, 1).End(xlUp).Row End With
With Sheets("Рай") a = .Cells(.Rows.Count, 1).End(xlUp).Row
With .Range(.Cells(1, 1), .Cells(a, 1))
For i = 2 To lastorg Set c = .Find(Sheets("орг").Cells(i, 2), LookIn:=xlValues) If Not c Is Nothing Then firstrow = c.Row Do c.Value = Sheets("орг").Cells(i, 1).Value Set c = .FindNext(c) Loop While c.Row > firstrow End If Next i
Без find. Хотя по идее при больших объемах данных с ним будет быстрее. [vba]
Код
Dim dict Dim i%, k% dict = Sheets("орг").Range("a2:b" & Sheets("орг").Range("a65536").End(xlUp).Row) For k = 2 To Sheets("Рай").Range("a65536").End(xlUp).Row For i = LBound(dict) To UBound(dict) If InStr(1, Sheets("Рай").Range("a" & k).Value, dict(i, 2)) > 0 Then Sheets("Рай").Range("a" & k).Value = dict(i, 1) Exit For End If Next i Next k
[/vba]
Без find. Хотя по идее при больших объемах данных с ним будет быстрее. [vba]
Код
Dim dict Dim i%, k% dict = Sheets("орг").Range("a2:b" & Sheets("орг").Range("a65536").End(xlUp).Row) For k = 2 To Sheets("Рай").Range("a65536").End(xlUp).Row For i = LBound(dict) To UBound(dict) If InStr(1, Sheets("Рай").Range("a" & k).Value, dict(i, 2)) > 0 Then Sheets("Рай").Range("a" & k).Value = dict(i, 1) Exit For End If Next i Next k
Огромное спасибо, почему-то в макросе от Pelena, (я переделал под свой файл) возникает ошибка в строке Loop While c.Row > firstrow пишет object variable or with block variable not set, посмотрел по ошибкам, set стоит, несколько раз в разработчике сделаешь reset и все делается,
Огромное спасибо, почему-то в макросе от Pelena, (я переделал под свой файл) возникает ошибка в строке Loop While c.Row > firstrow пишет object variable or with block variable not set, посмотрел по ошибкам, set стоит, несколько раз в разработчике сделаешь reset и все делается,stap73
Сообщение отредактировал stap73 - Вторник, 19.03.2024, 13:01
Переделал рабочий файл, ошибка возникает через раз, сначала первая ячейка не обрабатывается, при повторном запуске макроса возникает ошибка, но первая ячейка обрабатывается, если сделать первую ячейку выше то есть не cell( 8, 12) а сell (7, 12) то ошибка возникает сразу, но через end во всплывающем окне, работает дальше.
Переделал рабочий файл, ошибка возникает через раз, сначала первая ячейка не обрабатывается, при повторном запуске макроса возникает ошибка, но первая ячейка обрабатывается, если сделать первую ячейку выше то есть не cell( 8, 12) а сell (7, 12) то ошибка возникает сразу, но через end во всплывающем окне, работает дальше.stap73
сделать первую ячейку выше то есть не cell( 8, 12) а сell (7, 12)
метод Find начинает обрабатывать ячейки со следующей строки, поэтому если указана 8-я строка, то поиск начнется с 9-й. Попробуйте отключить обработчик ошибок
сделать первую ячейку выше то есть не cell( 8, 12) а сell (7, 12)
метод Find начинает обрабатывать ячейки со следующей строки, поэтому если указана 8-я строка, то поиск начнется с 9-й. Попробуйте отключить обработчик ошибокPelena