Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 14.02.2019
Сообщений: 32

Удаление нулей в начале числового (текстового) значения

17.03.2020, 06:51. Показов 3531. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Подскажите как в этот код (что ниже) вставить условие, чтобы поиск нулей и их удаление производилось не по всему документу а по определённому диапазону ячеек.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub SPG_del()
Dim a As Range, v(), i&, j&
  With CreateObject("vbscript.regexp")
    .Pattern = "(^|-)0+"
    .Global = True
    For Each a In Cells.SpecialCells(xlCellTypeConstants, xlTextValues).Areas
      If a.Count > 1 Then
        v = a.Value2
        For j = 1 To UBound(v, 2)
          For i = 1 To UBound(v)
            v(i, j) = .Replace(v(i, j), "$1")
          Next
        Next
        a.Value2 = v
      Else
        a.Value2 = .Replace(a.Value2, "$1")
      End If
    Next
  End With
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2020, 06:51
Ответы с готовыми решениями:

Скрипт не ставится символы нулей в начале в значениях
Приветствую Всех! Ребята помогите пожалуйста не силен в программировании нужно исправить код нашел в интернете скрипт который...

Избавление от несущественных нулей в начале числа и выделение содержимого
Здравствуйте, помогите пожалуйста доработать textbox. В форме есть textbox и кнопка, как сделать так, чтобы после нажатия на кнопку: ...

Результат на основании 2 столбцов, текстового и числового
Добрый день. Столкнулся с проблемой, прошу помощи. Есть таблица из 2 столбцов, в первом список овощей-фруктов, во втором напротив...

21
 Аватар для amd48
845 / 475 / 80
Регистрация: 18.05.2016
Сообщений: 1,266
Записей в блоге: 5
17.03.2020, 07:04
для начала надо поставить код в тэги VB и отформатировать
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub SPG_del()
Dim a As Range, v(), i&, j&
With CreateObject("vbscript.regexp")
    .Pattern = "(^|-)0+"
    .Global = True
    For Each a In Cells.SpecialCells(xlCellTypeConstants, xlTextValues).Areas
        If a.Count > 1 Then
            v = a.Value2
            For j = 1 To UBound(v, 2)
                For i = 1 To UBound(v)
                    v(i, j) = .Replace(v(i, j), "$1")
                Next
            Next
            a.Value2 = v
        Else
            a.Value2 = .Replace(a.Value2, "$1")
        End If
    Next
End With
End Sub
1
0 / 0 / 0
Регистрация: 14.02.2019
Сообщений: 32
17.03.2020, 07:10  [ТС]
Благодарю) сижу с телефона, не получилось как полагатся код вставить

Добавлено через 1 минуту
Помогите вставить условие пожалуйста
0
 Аватар для amd48
845 / 475 / 80
Регистрация: 18.05.2016
Сообщений: 1,266
Записей в блоге: 5
17.03.2020, 07:22
в 6 строке
Visual Basic
1
For Each a In Selection.Areas
1
0 / 0 / 0
Регистрация: 14.02.2019
Сообщений: 32
17.03.2020, 07:32  [ТС]
А не особо знаком с подобными кодами, чтоб по столбцу Z поиск вёлся, что нужно добавить?
0
 Аватар для amd48
845 / 475 / 80
Регистрация: 18.05.2016
Сообщений: 1,266
Записей в блоге: 5
17.03.2020, 07:41
я и сам не очень. гуглю "excel vba узнать выделенный диапазон", читаю, запускаю в режиме отладки, смотрю, какие атрибуты имеют подходящие значения, подставляю их в код
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
17.03.2020, 08:34
Цитата Сообщение от zhilinskas Посмотреть сообщение
чтоб по столбцу Z
Замените Cells на Range("Z:Z") или [Z:Z]

Но если в столбце не будет текста - константы, т.е. не являющегося результатом вычисления формул, возникнет ошибка.


Альтернативный вариант :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Del_PrefixNull()
    Dim ws As Worksheet, r As Range, a, t, i&, c&
    Set ws = ActiveSheet 'Можно указать другой рабочий лист
    Set r = Intersect(ws.Columns("Z"), ws.UsedRange.EntireRow)    
    a = r.Value
    For i = 1 To UBound(a)
        t = a(i, 1)
        While t Like "0*"
           c = c + 1
           t = Mid(t, c + 1)
        Wend
        a(i, 1) = t: c = 0
    Next
    r.Value = a
End Sub
1
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
17.03.2020, 08:51
можно заменить нули пробелом, а потом поставить trim$
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
17.03.2020, 08:53
fever brain, Где гарантии, что нули находятся только в начале текста ?
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
17.03.2020, 09:07
я вот что имел ввиду
Visual Basic
1
2
3
4
5
6
Sub primer()
    Dim text$
    text = "000qwerty"
    text = Trim(Replace(text, 0, " "))
    MsgBox text
End Sub
Добавлено через 1 минуту
идея конечно не совсем удачная, но можно наверное чтото подобное придумать )
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
17.03.2020, 09:09
fever brain, Так всем понятно о чём Вы говорили ~ тот же результат можно получить, если просто заменить 0 на ""

Но с текстом, типа "007 агент ликвидировал 100 человек" такой подход не проканает и у автора топика именно такой случай. Правда он сказал об этом уже после Вашего поста.
0
0 / 0 / 0
Регистрация: 14.02.2019
Сообщений: 32
17.03.2020, 09:09  [ТС]
Нули бывают и в середине, верно..их удалять не нужно, только начальные... Ваш код pashulka работает, но почему то из значения 00350Б он удаляет ещё и «3»
0
0 / 0 / 0
Регистрация: 14.02.2019
Сообщений: 32
17.03.2020, 09:13  [ТС]
В ячейках Z22, Z23 есть значения 018_ и 00350Б, нужно удалить нули в начале, если можно то и нижнее подчеркивание тоже удалить хотелось бы
Вложения
Тип файла: rar Заключение инструм.rar (481.9 Кб, 0 просмотров)
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
17.03.2020, 09:18
Лучший ответ Сообщение было отмечено pashulka как решение

Решение

А так пойдет ?
Visual Basic
1
2
3
4
5
6
7
8
Sub primer()
    Dim i&
    Const text = "000qwerty000"
    For i = 1 To Len(text)
        If Mid(text, i, 1) <> 0 Then Exit For
    Next
    MsgBox Mid(text, i)
End Sub
Изображения
 
0
0 / 0 / 0
Регистрация: 14.02.2019
Сообщений: 32
17.03.2020, 09:25  [ТС]
Тоже Выходит всплывающее окошко, что Вы добавили к сообщению..но в ячейках ничего не меняется
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
17.03.2020, 09:28
вместо msgbox исправь на cells(1,1) или [a1]=Mid(text, i)
0
 Аватар для pashulka
4138 / 2242 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
17.03.2020, 09:31
Лучший ответ Сообщение было отмечено zhilinskas как решение

Решение

zhilinskas, Это потому, что я скрестил ежа с ужом т.е. несколько своих вариантов вместе, короче мысль была примерно такая...

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub Del_PrefixNull2()
    Dim r As Range, t
    For Each r In Range("Z22:Z23")
        t = r.Value
        While t Like "0*"
           t = Mid(t, 2)
        Wend
        r.Value = t
    Next
End Sub
2
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
17.03.2020, 09:33
Цитата Сообщение от pashulka Посмотреть сообщение
короче мысль была примерно такая...
Тоже не плохо
0
0 / 0 / 0
Регистрация: 14.02.2019
Сообщений: 32
17.03.2020, 09:34  [ТС]
Ничего, только в ячейке а1 появился текст “qwerty000”
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
17.03.2020, 09:36
ну как-бы вам сказать. Текст то вы можете какой угодно вносить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2020, 09:36
Помогаю со студенческими работами здесь

Точка всегда в начале текстового поля
Добрый день ув. пользователи! Подскажите пожалуйста, как можно сделать точку по умолчанию в текстовом поле первым символом, которую нельзя...

Упорядочить файл, содержащий записи из двух полей (числового и текстового), в порядке возрастания числа
Здраствуйте, ребят подскажите, пожалуйста, как примерно написать такие программы, хотя бы идею подскажите, что использовать: 1)Напишите...

В начале каждой строки текстового файла записать количество символов в этой же строке
Написать программу которая копирует или преобразовывает текст входного текстового файла(файлов)так чтобы в выходном файле: В начале...

Удаление в начале/конце списка
Покажите, пожалуйста, как убрать элемент из конца списка или из его начала?

Удаление пробелов в начале строки
var s:string; begin while (s=' ')and(s&lt;&gt;'') do delete(s,1,1); end; почему если не ставить после s= кавычки с пробелом(а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru