Страницы: 1
RSS
Подсчет количества знаков в каждой ячейке выделения и замена содержимого по условию, макрос
 
Здравствуйте! В очередной раз обращаюсь за помощью форумского разума. Помогите, пожалуйста, исправить макрос.

Задача, чтобы он после выделения диапазона в столбце E проверял в каждой ячейке выделения количество символов. Если оно равно 8, оставлял значение как есть, если не равно 8 - чтобы добавлял к артикулу ноль в начало. Сейчас исправленные значения могут располагаться в столбце, например, Q (внутри самих ячеек столбца E, понимаю, невозможно одновременно и брать исходные данные, и получать результат).
В настоящее время после выделения одной ячейки вроде бы работает, хотя иногда по непонятным причинам результатом становится не восьмисимвольный текст, а часть текста самого макроса =IF(LEN(RC[-11])<>8,"0"&RC[-11],RC[-11])
Преобразование в текстовый формат до замены формулы значением делается, чтобы не "съедались" нули в начале артикула.
Изменено: zav - 20.09.2019 08:41:44
 
Цитата
zav написал:
=IF(LEN(RC[-11])<>8,"0"&RC[-11],RC[-11])
этож просто формула  ;) в макросе поменяйте на такую
Код
"=TEXT(RC[-10],""00000000"")"
Лень двигатель прогресса, доказано!!!
 
Здравствуйте
Код
    With Selection
        .NumberFormat = "@"
        .Formula = Application.Text(.Value, "00000000")
    End With
 
Сергей, теперь Вашу формулу выдает. :)
Андрей Лящук, спасибо, но работает по-прежнему не для диапазона, а для одной ячейки.
 
Код
    Dim i As Long, j As Long
    i = 8
    For j = 8 To 10
        If Len(Sheets(1).Cells(i, 5)) <> 8 Then
            Sheets(1).Cells(i, 17) = CStr("0" & Sheets(1).Cells(i, 5))
        Else
            Sheets(1).Cells(i, 17) = CStr(Sheets(1).Cells(i, 5))
        End If
        i = i + 1
    Next j
файл удален по просьбе автора темы [МОДЕРАТОР]
Изменено: gena10111 - 20.09.2019 11:19:09 (Добавление файла)
 
gena10111, спасибо большое, диапазон обрабатывает прекрасно. Но нули в начале пропадают.
 
Код
    Dim i As Long, j As Long
    i = 8
    For j = 8 To 10
        If Len(Sheets(1).Cells(i, 5)) <> 8 Then
            Sheets(1).Cells(i, 17) = CStr("0" & Sheets(1).Cells(i, 5))
            Sheets(1).Cells(i, 5) = Sheets(1).Cells(i, 17)
        Else
            Sheets(1).Cells(i, 17) = CStr(Sheets(1).Cells(i, 5))
        End If
        i = i + 1
    Next j

В 17 столбце всё нормально!
Вам надо чтобы в самой таблице текст артикула менялся?
Тогда вот так
Я бы еще в конце добавил очистку столбца 17

файл удален по просьбе автора темы [МОДЕРАТОР]
Изменено: gena10111 - 20.09.2019 11:18:58 (Добавление комментария)
 
Цитата
Сергей написал:
в макросе поменяйте на такую
Цитата
zav написал:
Сергей , теперь Вашу формулу выдает.
Невнимателен был. Делает то, что нужно, но только для одной ячейки, увы.

Цитата
gena10111 написал:
Тогда вот так
Добавил предварительно изменение формата целевых ячеек на текстовый - заработало как надо.
Спасибо огромное!
 
Цитата
zav написал:
работает по-прежнему не для диапазона, а для одной ячейки.
хто это вам такое сказал?
 
Цитата
Андрей Лящук написал:
хто это вам такое сказал?
Наивно пытался Ваш макрос добавить к своему.  :D  Ваше решение до гениального просто. Это потрясающе. Спасибище!

А я нагородил...
Страницы: 1
Наверх