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

Вход

Регистрация

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

 

= Мир MS Excel/Замена трех последних символов в строке на рандомные. - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Замена трех последних символов в строке на рандомные. (Макросы/Sub)
Замена трех последних символов в строке на рандомные.
ИгорьВтанке Дата: Четверг, 13.05.2021, 14:04 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Добрый день!

Пытаюсь написать код по замене трех последних символов в первой строке на рандомные при определенном условии.
Но, видимо, не правильно указываю диапазон выдаёт ошибку 91. Object variable or With block variable not set

[vba]
Код
Sub Cheken()
Dim ReCheken As Range
Dim RX As Variant
Dim i As Long
With Sheets("Лист1")
i = .UsedRange.Row + .UsedRange.Rows.Count - 1
ReCheken = .Range(.Cells(1, 19), .Cells(i, 19)).Value
RX = Range("V1")
For i = 2 To Range(ReCheken, 1)
If ReCheken = "<<<< Отсутствует в базе данных, необходимо обратиться к менеджеру по продукту >>>>" Then
' замена трех последних значений на случайный код из ячейки V1
Cells(ReCheken.Row, 1) = Replace(Cells(ReCheken.Row, 1), "000", RX)
End If
Next i
End With
End Sub
[/vba]
К сообщению приложен файл: _2.xlsm (20.8 Kb)


Сообщение отредактировал ИгорьВтанке - Четверг, 13.05.2021, 14:56
 
Ответить
СообщениеДобрый день!

Пытаюсь написать код по замене трех последних символов в первой строке на рандомные при определенном условии.
Но, видимо, не правильно указываю диапазон выдаёт ошибку 91. Object variable or With block variable not set

[vba]
Код
Sub Cheken()
Dim ReCheken As Range
Dim RX As Variant
Dim i As Long
With Sheets("Лист1")
i = .UsedRange.Row + .UsedRange.Rows.Count - 1
ReCheken = .Range(.Cells(1, 19), .Cells(i, 19)).Value
RX = Range("V1")
For i = 2 To Range(ReCheken, 1)
If ReCheken = "<<<< Отсутствует в базе данных, необходимо обратиться к менеджеру по продукту >>>>" Then
' замена трех последних значений на случайный код из ячейки V1
Cells(ReCheken.Row, 1) = Replace(Cells(ReCheken.Row, 1), "000", RX)
End If
Next i
End With
End Sub
[/vba]

Автор - ИгорьВтанке
Дата добавления - 13.05.2021 в 14:04
китин Дата: Четверг, 13.05.2021, 14:34 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 7013
Репутация: 1073 ±
Замечаний: 0% ±

Excel 2007;2010;2016
ИгорьВтанке, - Прочитайте Правила форума
- Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852
 
Ответить
СообщениеИгорьВтанке, - Прочитайте Правила форума
- Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)

Автор - китин
Дата добавления - 13.05.2021 в 14:34
Pelena Дата: Четверг, 13.05.2021, 15:36 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 19163
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
ИгорьВтанке, переменная ReCheken что обозначает? Вы объявляете её как Range, а присваиваете значение .Value. Поясните Вашу задумку словами


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеИгорьВтанке, переменная ReCheken что обозначает? Вы объявляете её как Range, а присваиваете значение .Value. Поясните Вашу задумку словами

Автор - Pelena
Дата добавления - 13.05.2021 в 15:36
ИгорьВтанке Дата: Четверг, 13.05.2021, 16:11 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Код должен анализировать 19 строку на наличие в строке записи "Отсутствует в базе данных, необходимо обратиться к менеджеру по продукту " и в первом столбце заменяет три последних символа на рандомные, из ячейки V1 и так с каждой строкой. Значение в ячейке V1 записал формулой.
 
Ответить
СообщениеКод должен анализировать 19 строку на наличие в строке записи "Отсутствует в базе данных, необходимо обратиться к менеджеру по продукту " и в первом столбце заменяет три последних символа на рандомные, из ячейки V1 и так с каждой строкой. Значение в ячейке V1 записал формулой.

Автор - ИгорьВтанке
Дата добавления - 13.05.2021 в 16:11
Pelena Дата: Четверг, 13.05.2021, 16:23 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 19163
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
Не уверена, что правильно поняла
[vba]
Код
Sub Cheken()
    Dim ReCheken
    Dim RX As Variant
    Dim i As Long
    With Sheets("Лист1")
        i = .UsedRange.Row + .UsedRange.Rows.Count - 1
        ReCheken = .Range(.Cells(1, 19), .Cells(i, 19)).Value
        RX = Range("V1")
        For i = 2 To UBound(ReCheken, 1)
            If ReCheken(i, 1) = "<<<< Отсутствует в базе данных, необходимо обратиться к менеджеру по продукту >>>>" Then
                ' замена трех последних значений на случайный код из ячейки V1
                Cells(i, 18) = Replace(Cells(i, 1), "000", RX)
            End If
        Next i
    End With
End Sub
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеНе уверена, что правильно поняла
[vba]
Код
Sub Cheken()
    Dim ReCheken
    Dim RX As Variant
    Dim i As Long
    With Sheets("Лист1")
        i = .UsedRange.Row + .UsedRange.Rows.Count - 1
        ReCheken = .Range(.Cells(1, 19), .Cells(i, 19)).Value
        RX = Range("V1")
        For i = 2 To UBound(ReCheken, 1)
            If ReCheken(i, 1) = "<<<< Отсутствует в базе данных, необходимо обратиться к менеджеру по продукту >>>>" Then
                ' замена трех последних значений на случайный код из ячейки V1
                Cells(i, 18) = Replace(Cells(i, 1), "000", RX)
            End If
        Next i
    End With
End Sub
[/vba]

Автор - Pelena
Дата добавления - 13.05.2021 в 16:23
ИгорьВтанке Дата: Четверг, 13.05.2021, 16:51 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Не уверена, что правильно поняла

Спасибо!
Сразу возник другой вопрос: у меня по задумке, значение "RX" для каждой изменяемой строки должен генерироваться разный, а сейчас он одинаковый. Как решить этот вопрос? Формулу генерации засунуть в внутрь цикла IF?
 
Ответить
Сообщение
Не уверена, что правильно поняла

Спасибо!
Сразу возник другой вопрос: у меня по задумке, значение "RX" для каждой изменяемой строки должен генерироваться разный, а сейчас он одинаковый. Как решить этот вопрос? Формулу генерации засунуть в внутрь цикла IF?

Автор - ИгорьВтанке
Дата добавления - 13.05.2021 в 16:51
Pelena Дата: Четверг, 13.05.2021, 17:06 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19163
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
Да, строчка [vba]
Код
RX = Range("V1")
[/vba] должна быть после [vba]
Код
For i = 2 To UBound(ReCheken, 1)
[/vba]
И да, можно формулу написать прямо в макросе


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеДа, строчка [vba]
Код
RX = Range("V1")
[/vba] должна быть после [vba]
Код
For i = 2 To UBound(ReCheken, 1)
[/vba]
И да, можно формулу написать прямо в макросе

Автор - Pelena
Дата добавления - 13.05.2021 в 17:06
ИгорьВтанке Дата: Четверг, 13.05.2021, 17:15 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Спасибо огромное!
Все заработало! :D
 
Ответить
СообщениеСпасибо огромное!
Все заработало! :D

Автор - ИгорьВтанке
Дата добавления - 13.05.2021 в 17:15
ИгорьВтанке Дата: Пятница, 14.05.2021, 11:14 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

И да, можно формулу написать прямо в макросе


Добрый день!

Попытался формулу вписать в макрос, но выдает ошибку. Что я делаю не так?

[vba]
Код
Sub Cheken()
    Dim ReCheken
    Dim RX As Variant
    Dim i As Long
    With Sheets("Лист1")
        i = .UsedRange.Row + .UsedRange.Rows.Count - 1
        ReCheken = .Range(.Cells(1, 19), .Cells(i, 19)).Value
        
        For i = 2 To UBound(ReCheken, 1)
            RX = Range.FormulaR1C1 = _
        "=MID(R1C23,RANDBETWEEN(1,LEN(R1C23)),1)&MID(R1C23,RANDBETWEEN(1,LEN(R1C23)),1)&MID(R1C23,RANDBETWEEN(1,LEN(R1C23)),1)"
            If ReCheken(i, 1) = "<<<< Отсутствует в базе данных, необходимо обратиться к менеджеру по продукту >>>>" Then
                ' замена трех последних значений на случайный код из ячейки V1
                Cells(i, 1) = Replace(Cells(i, 1), "000", RX)
            End If
        Next i
    End With
End Sub
[/vba]
 
Ответить
Сообщение
И да, можно формулу написать прямо в макросе


Добрый день!

Попытался формулу вписать в макрос, но выдает ошибку. Что я делаю не так?

[vba]
Код
Sub Cheken()
    Dim ReCheken
    Dim RX As Variant
    Dim i As Long
    With Sheets("Лист1")
        i = .UsedRange.Row + .UsedRange.Rows.Count - 1
        ReCheken = .Range(.Cells(1, 19), .Cells(i, 19)).Value
        
        For i = 2 To UBound(ReCheken, 1)
            RX = Range.FormulaR1C1 = _
        "=MID(R1C23,RANDBETWEEN(1,LEN(R1C23)),1)&MID(R1C23,RANDBETWEEN(1,LEN(R1C23)),1)&MID(R1C23,RANDBETWEEN(1,LEN(R1C23)),1)"
            If ReCheken(i, 1) = "<<<< Отсутствует в базе данных, необходимо обратиться к менеджеру по продукту >>>>" Then
                ' замена трех последних значений на случайный код из ячейки V1
                Cells(i, 1) = Replace(Cells(i, 1), "000", RX)
            End If
        Next i
    End With
End Sub
[/vba]

Автор - ИгорьВтанке
Дата добавления - 14.05.2021 в 11:14
Serge_007 Дата: Пятница, 14.05.2021, 11:32 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
[vba]
Код
RX = Range.FormulaR1C1 = _
[/vba]Range. - лишнее, так будет работать:[vba]
Код
RX = FormulaR1C1 = _
[/vba]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение[vba]
Код
RX = Range.FormulaR1C1 = _
[/vba]Range. - лишнее, так будет работать:[vba]
Код
RX = FormulaR1C1 = _
[/vba]

Автор - Serge_007
Дата добавления - 14.05.2021 в 11:32
ИгорьВтанке Дата: Пятница, 14.05.2021, 12:02 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Теперь вместо замены трех последних символов выводит значение Falce
К сообщению приложен файл: 2608199.png (5.9 Kb)
 
Ответить
СообщениеТеперь вместо замены трех последних символов выводит значение Falce

Автор - ИгорьВтанке
Дата добавления - 14.05.2021 в 12:02
Serge_007 Дата: Пятница, 14.05.2021, 12:47 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
Переменная RX для чего у Вас?
Вы ранее в нее значение V1 передавали, теперь хотите вместо значения формулу, которая соседнюю (пустую) ячейку использует
Не понял логику, поясните


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеПеременная RX для чего у Вас?
Вы ранее в нее значение V1 передавали, теперь хотите вместо значения формулу, которая соседнюю (пустую) ячейку использует
Не понял логику, поясните

Автор - Serge_007
Дата добавления - 14.05.2021 в 12:47
ИгорьВтанке Дата: Пятница, 14.05.2021, 13:26 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Я хочу значение из формулы подставить в функцию Replace заместо значения RX.


Сообщение отредактировал Serge_007 - Пятница, 14.05.2021, 14:34
 
Ответить
СообщениеЯ хочу значение из формулы подставить в функцию Replace заместо значения RX.

Автор - ИгорьВтанке
Дата добавления - 14.05.2021 в 13:26
Pelena Дата: Пятница, 14.05.2021, 14:09 | Сообщение № 14
Группа: Админы
Ранг: Местный житель
Сообщений: 19163
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
[vba]
Код
Range("V1").FormulaR1C1 = "=MID(R1C23,RANDBETWEEN(1,LEN(R1C23)),1)&MID(R1C23,RANDBETWEEN(1,LEN(R1C23)),1)&MID(R1C23,RANDBETWEEN(1,LEN(R1C23)),1)"
RX = Range("V1")
[/vba]
Но если Вы скажете, что у Вас находится в ячейке W1, на которую ссылается формула, можно полностью перенести расчёт в макрос


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение[vba]
Код
Range("V1").FormulaR1C1 = "=MID(R1C23,RANDBETWEEN(1,LEN(R1C23)),1)&MID(R1C23,RANDBETWEEN(1,LEN(R1C23)),1)&MID(R1C23,RANDBETWEEN(1,LEN(R1C23)),1)"
RX = Range("V1")
[/vba]
Но если Вы скажете, что у Вас находится в ячейке W1, на которую ссылается формула, можно полностью перенести расчёт в макрос

Автор - Pelena
Дата добавления - 14.05.2021 в 14:09
ИгорьВтанке Дата: Пятница, 14.05.2021, 15:03 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Но если Вы скажете, что у Вас находится в ячейке W1, на которую ссылается формула, можно полностью перенести расчёт в макрос

В этой ячейке английский алфавит и цифры:
ABCDEFGHIJKLMNPQRSTUVWXYZ0123456789
 
Ответить
Сообщение
Но если Вы скажете, что у Вас находится в ячейке W1, на которую ссылается формула, можно полностью перенести расчёт в макрос

В этой ячейке английский алфавит и цифры:
ABCDEFGHIJKLMNPQRSTUVWXYZ0123456789

Автор - ИгорьВтанке
Дата добавления - 14.05.2021 в 15:03
Serge_007 Дата: Пятница, 14.05.2021, 15:19 | Сообщение № 16
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
[vba]
Код
Sub Cheken()
    Dim ReCheken
    Dim i As Long
    With Sheets("Лист1")
        i = .UsedRange.Row + .UsedRange.Rows.Count - 1
        ReCheken = .Range(.Cells(1, 19), .Cells(i, 19)).Value
        For i = 2 To UBound(ReCheken, 1)
            If ReCheken(i, 1) = "<<<< Отсутствует в базе данных, необходимо обратиться к менеджеру по продукту >>>>" Then
                Cells(i, 18) = Replace(Cells(i, 1), "000", Mid("ABCDEFGHIJKLMNPQRSTUVWXYZ0123456789", Int((35 * Rnd) + 1), 3))
            End If
        Next i
    End With
End Sub
[/vba]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение[vba]
Код
Sub Cheken()
    Dim ReCheken
    Dim i As Long
    With Sheets("Лист1")
        i = .UsedRange.Row + .UsedRange.Rows.Count - 1
        ReCheken = .Range(.Cells(1, 19), .Cells(i, 19)).Value
        For i = 2 To UBound(ReCheken, 1)
            If ReCheken(i, 1) = "<<<< Отсутствует в базе данных, необходимо обратиться к менеджеру по продукту >>>>" Then
                Cells(i, 18) = Replace(Cells(i, 1), "000", Mid("ABCDEFGHIJKLMNPQRSTUVWXYZ0123456789", Int((35 * Rnd) + 1), 3))
            End If
        Next i
    End With
End Sub
[/vba]

Автор - Serge_007
Дата добавления - 14.05.2021 в 15:19
ИгорьВтанке Дата: Пятница, 14.05.2021, 15:34 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Не работает :(
 
Ответить
СообщениеНе работает :(

Автор - ИгорьВтанке
Дата добавления - 14.05.2021 в 15:34
Serge_007 Дата: Пятница, 14.05.2021, 15:40 | Сообщение № 18
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2748 ±
Замечаний: ±

Excel 2016
Что не работает?

Макрос рабочий


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеЧто не работает?

Макрос рабочий

Автор - Serge_007
Дата добавления - 14.05.2021 в 15:40
ИгорьВтанке Дата: Пятница, 14.05.2021, 15:42 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 20% ±

Макрос рабочий, но 3 последних символа не заменяет на рандомные.


Сообщение отредактировал Serge_007 - Пятница, 14.05.2021, 16:31
 
Ответить
СообщениеМакрос рабочий, но 3 последних символа не заменяет на рандомные.

Автор - ИгорьВтанке
Дата добавления - 14.05.2021 в 15:42
Pelena Дата: Пятница, 14.05.2021, 15:56 | Сообщение № 20
Группа: Админы
Ранг: Местный житель
Сообщений: 19163
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
Вариант
[vba]
Код
Sub Cheken()
    Dim ReCheken
    Dim RX As Variant
    Dim i As Long, alph As String
    alph = "ABCDEFGHIJKLMNPQRSTUVWXYZ0123456789"
    Randomize
    With Sheets("Лист1")
        i = .UsedRange.Row + .UsedRange.Rows.Count - 1
        ReCheken = .Range(.Cells(1, 19), .Cells(i, 19)).Value
        For i = 2 To UBound(ReCheken, 1)
            If ReCheken(i, 1) = "<<<< Отсутствует в базе данных, необходимо обратиться к менеджеру по продукту >>>>" Then
                ' замена трех последних значений на случайный код из ячейки V1
                RX = Mid(alph, Int((35 * Rnd) + 1), 1) & Mid(alph, Int((35 * Rnd) + 1), 1) & Mid(alph, Int((35 * Rnd) + 1), 1)
                Cells(i, 18) = Replace(Cells(i, 1), "000", RX)
            End If
        Next i
    End With
End Sub
[/vba]
но проверки на повторы нет


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеВариант
[vba]
Код
Sub Cheken()
    Dim ReCheken
    Dim RX As Variant
    Dim i As Long, alph As String
    alph = "ABCDEFGHIJKLMNPQRSTUVWXYZ0123456789"
    Randomize
    With Sheets("Лист1")
        i = .UsedRange.Row + .UsedRange.Rows.Count - 1
        ReCheken = .Range(.Cells(1, 19), .Cells(i, 19)).Value
        For i = 2 To UBound(ReCheken, 1)
            If ReCheken(i, 1) = "<<<< Отсутствует в базе данных, необходимо обратиться к менеджеру по продукту >>>>" Then
                ' замена трех последних значений на случайный код из ячейки V1
                RX = Mid(alph, Int((35 * Rnd) + 1), 1) & Mid(alph, Int((35 * Rnd) + 1), 1) & Mid(alph, Int((35 * Rnd) + 1), 1)
                Cells(i, 18) = Replace(Cells(i, 1), "000", RX)
            End If
        Next i
    End With
End Sub
[/vba]
но проверки на повторы нет

Автор - Pelena
Дата добавления - 14.05.2021 в 15:56
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Замена трех последних символов в строке на рандомные. (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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