Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/найти куски текст в списке и заменить на значен из др списка - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » найти куски текст в списке и заменить на значен из др списка (найти куски текст в списке и заменить на значен из др списка)
найти куски текст в списке и заменить на значен из др списка
stap73 Дата: Вторник, 19.03.2024, 08:41 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

2013
Здравствуйте, дорогие форумчане, хочу попросить помощи, у меня на работе периодически возникает задача переделывать список организаций в столбце эксель, организации в эксель введены по разному, например ООО "Бугульма", а введено Бугульминское и т.д. есть определенные куски текста по которым можно идентифицировать и сделать замену, пытаюсь автоматизировать это.
в общем на одном листе орг правильный список, на листе Рай список, который нужно привести в соответствие. В модуле 2, макрос замена 2 применил метод find, вроде бы работает, но он "не заканчивается", помогите пожалуйста. Это первый вопрос, второй вопрос, мне нужно чтобы он последовательно проверял список, а не одно значение. Пытался в модуле 1 макрос замена, но понял, что необх решить первый вопрос. Надеюсь на вашу помощь, сам далеко не программист
К сообщению приложен файл: zamena.xlsm (15.8 Kb)
 
Ответить
СообщениеЗдравствуйте, дорогие форумчане, хочу попросить помощи, у меня на работе периодически возникает задача переделывать список организаций в столбце эксель, организации в эксель введены по разному, например ООО "Бугульма", а введено Бугульминское и т.д. есть определенные куски текста по которым можно идентифицировать и сделать замену, пытаюсь автоматизировать это.
в общем на одном листе орг правильный список, на листе Рай список, который нужно привести в соответствие. В модуле 2, макрос замена 2 применил метод find, вроде бы работает, но он "не заканчивается", помогите пожалуйста. Это первый вопрос, второй вопрос, мне нужно чтобы он последовательно проверял список, а не одно значение. Пытался в модуле 1 макрос замена, но понял, что необх решить первый вопрос. Надеюсь на вашу помощь, сам далеко не программист

Автор - stap73
Дата добавления - 19.03.2024 в 08:41
Pelena Дата: Вторник, 19.03.2024, 09:46 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19185
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте.
Попробуйте такой вариант
[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

        End With

    End With

End Sub
[/vba]
К сообщению приложен файл: zamena1.xlsm (17.9 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Попробуйте такой вариант
[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

        End With

    End With

End Sub
[/vba]

Автор - Pelena
Дата добавления - 19.03.2024 в 09:46
mgt Дата: Вторник, 19.03.2024, 09:48 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 98
Репутация: 25 ±
Замечаний: 0% ±

Excel 2010
Без 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
[/vba]

Автор - mgt
Дата добавления - 19.03.2024 в 09:48
stap73 Дата: Вторник, 19.03.2024, 13:00 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

2013
Огромное спасибо, почему-то в макросе от Pelena, (я переделал под свой файл) возникает ошибка в строке Loop While c.Row > firstrow пишет object variable or with block variable not set, посмотрел по ошибкам, set стоит, несколько раз в разработчике сделаешь reset и все делается,


Сообщение отредактировал stap73 - Вторник, 19.03.2024, 13:01
 
Ответить
СообщениеОгромное спасибо, почему-то в макросе от Pelena, (я переделал под свой файл) возникает ошибка в строке Loop While c.Row > firstrow пишет object variable or with block variable not set, посмотрел по ошибкам, set стоит, несколько раз в разработчике сделаешь reset и все делается,

Автор - stap73
Дата добавления - 19.03.2024 в 13:00
Pelena Дата: Вторник, 19.03.2024, 13:11 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 19185
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
(я переделал под свой файл) возникает ошибка

надо видеть переделанный макрос и расположение данных, всё имеет значение


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
(я переделал под свой файл) возникает ошибка

надо видеть переделанный макрос и расположение данных, всё имеет значение

Автор - Pelena
Дата добавления - 19.03.2024 в 13:11
stap73 Дата: Среда, 20.03.2024, 05:16 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

2013
Переделал рабочий файл, ошибка возникает через раз, сначала первая ячейка не обрабатывается, при повторном запуске макроса возникает ошибка, но первая ячейка обрабатывается, если сделать первую ячейку выше то есть не cell( 8, 12) а сell (7, 12) то ошибка возникает сразу, но через end во всплывающем окне, работает дальше.
К сообщению приложен файл: zamena2.xlsm (42.7 Kb)
 
Ответить
СообщениеПеределал рабочий файл, ошибка возникает через раз, сначала первая ячейка не обрабатывается, при повторном запуске макроса возникает ошибка, но первая ячейка обрабатывается, если сделать первую ячейку выше то есть не cell( 8, 12) а сell (7, 12) то ошибка возникает сразу, но через end во всплывающем окне, работает дальше.

Автор - stap73
Дата добавления - 20.03.2024 в 05:16
Pelena Дата: Среда, 20.03.2024, 10:23 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19185
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
сделать первую ячейку выше то есть не cell( 8, 12) а сell (7, 12)

метод Find начинает обрабатывать ячейки со следующей строки, поэтому если указана 8-я строка, то поиск начнется с 9-й.
Попробуйте отключить обработчик ошибок
К сообщению приложен файл: 0214476.xlsm (38.6 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
сделать первую ячейку выше то есть не cell( 8, 12) а сell (7, 12)

метод Find начинает обрабатывать ячейки со следующей строки, поэтому если указана 8-я строка, то поиск начнется с 9-й.
Попробуйте отключить обработчик ошибок

Автор - Pelena
Дата добавления - 20.03.2024 в 10:23
stap73 Дата: Пятница, 22.03.2024, 10:18 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

2013
Огромное спасибо, работает, дай Вам бог здоровья!!!
 
Ответить
СообщениеОгромное спасибо, работает, дай Вам бог здоровья!!!

Автор - stap73
Дата добавления - 22.03.2024 в 10:18
Мир MS Excel » Вопросы и решения » Вопросы по VBA » найти куски текст в списке и заменить на значен из др списка (найти куски текст в списке и заменить на значен из др списка)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!