Добавить нули перед числом в excel vba

 

Mirai

Пользователь

Сообщений: 15
Регистрация: 14.10.2016

Здравствуйте. Не нашел нигде решение задачи.
Дело в том, что при копировании текста (selection.value=selection.value) у меня  пропадают нули перед кодами (было 00154 стало 154). И тут два варианта  копировать как текст правильно, но я не знаю как или добавить нули опять. Хорошего  решения я не нашел.
Как преобразовать формат текста в нужный (0000000) и сохранить его как текст? Как правильно копировать подобные значения?
Может кто при помощи VBA выставлял такие форматы текста?
Интересует только VBA вариант.
Range().NumberFormat = «000000» — выдает число с нулем перед ним, но это  не одно и тоже. Как сделать сохранение как текст, не пойму.

 

Mirai,Перед копированием, установите в ячейках куда будете копировать такие значения формат ячеек — текстовый, копируете — вставляете спец вставкой — значения

 

heso

Пользователь

Сообщений: 444
Регистрация: 14.08.2015

#3

14.10.2016 06:34:32

Запись макроса говорит, что

Код
Range().NumberFormat = "@"
 

kuklp

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

#4

14.10.2016 06:51:35

Код
Public Sub www()
    Dim c As Range
    [a:a].NumberFormat = "@"
    For Each c In [a1:a30].Cells
        c.Value = Format(c, "0000000")
    Next
End Sub

Я сам — дурнее всякого примера! …

 

Hugo

Пользователь

Сообщений: 23252
Регистрация: 22.12.2012

Без файла тут особо говорить нечего, т.к. возможны разные варианты — что в ячейках, что в массиве, что позже будете делать с данными?
Я бы делал так — брал в массив значения как есть в ячейках (не то что видно, а то что есть), далее при обработке/использовании каждое значение приводил к нужному формату.
Может быть достаточно перед выгрузкой установить нужный формат целевому диапазону.

Изменено: Hugo14.10.2016 08:43:26

 

Mirai

Пользователь

Сообщений: 15
Регистрация: 14.10.2016

#6

14.10.2016 10:27:59

Всем, спасибо, принцип понял.
kuklp, Ваш вариант подошел, спасибо.
Hugo, спасибо, так и буду делать.

I’m writing a function which needs to look up a code of a certain length in a different range, but not all codes are the correct length. In this range, that is fixed by having extra zeroes in front of it.

So I am trying to write part of a macro that adds the 0’s in front of the code until it is exactly 13 characters long (assuming it is not already 13 characters long).

For now, I have this, but I feel like it can be done better. Especially because I don’t know if 10 is the shortest possible length.

Function BolS(Barc As Range) As String

Dim BarA As Range

If Len(Barc.value) = 10 Then
    BarA = "000" & Barc.value
End If

If Len(Barc.value) = 11 Then
    BarA = "00" & Barc.value
End If

If Len(Barc.value) = 12 Then
    BarA = "0" & Barc.value
End If

If Len(Barc.value) = 13 Then
    BarA = Barc.value
End If

Maybe something with 13 minus the Len(Barc.value), and then adding that many 0’s?

asked Aug 6, 2021 at 9:00

Aevir Denken's user avatar

0

If it’s a number then this would work:

Public Function PadMyNumber(Target As Range) As String
    PadMyNumber = Format(Target, "0000000000000")
End Function 

The output is a string rather than a number.

answered Aug 6, 2021 at 9:59

Darren Bartrup-Cook's user avatar

Here are two examples of adding in the padding, but to pad with 0’s you need to either explicitly state it’s text by preceding with ' or by setting the cell to a text format. lengths over 13 would likely error and hasn’t been accounted for here.

Sub Pad0()
    ActiveCell.Offset(0, 1) = "'" & WorksheetFunction.Rept("0", 13 - Len(ActiveCell)) & ActiveCell
    
    With ActiveCell
        .Offset(0, 2).NumberFormat = "@"
        .Offset(0, 2) = WorksheetFunction.Rept("0", 13 - Len(ActiveCell)) & .Value
    End With
End Sub

answered Aug 6, 2021 at 9:39

Tragamor's user avatar

TragamorTragamor

3,5943 gold badges14 silver badges32 bronze badges

If you already know that you will have strings with 13 characters you can determine their actual length by
If Len(Barc.value) = 13 Then
BarA = Barc.value
End If

If Len(Barc.value) = 13 Then
    BarA = Barc.value
    'Exit Sub
Else
   'a = 13 - Len(Barc.value)
   'BarA = WorksheetFunction.Rept("0", a) & Barc.value
   BarA = WorksheetFunction.Rept("0", 13 - Len(Barc.value)) & Barc.value
End If

This part repeats the «0» character as often as needed to get to a length of 13:

WorksheetFunction.Rept("0", 13 - Len(Barc.value))

If your cell format is not in text format, you must keep an » ‘ » prior to the number to tell Excel that it’s a string and not a number (as all zeros in front of numbers are not shown by default). Your new add up would be the quote sign:

BarA = "'" & WorksheetFunction.Rept("0", 13 - Len(Barc.value)) & Barc.value

answered Aug 6, 2021 at 9:35

Capt.Krusty's user avatar

Capt.KrustyCapt.Krusty

5911 gold badge5 silver badges26 bronze badges

3

im only new to vba so i dont really know much about programming, anyway, i created a macro that adds a zero before a single digit string number in my selection, it only works if my selections are single digits only but doesn’t work when theres a double digits or more in my selection, this is my code:

Sub AddZero()
 Dim cell As Range
 
 For Each cell In Selection
  If Not IsNumeric(cell) = False And cell > 10 Then
   Exit Sub
    Else:
   cell = "0" & cell
  End If
 Next
End Sub

How can i make my macro skip all cells with double digits and only target single digits, pls help and thanks very much in advance.

asked Mar 26, 2021 at 4:07

Hobiron's user avatar

2

How can i make my macro skip all cells with double digits and only target single digits

No need for a Loop. You can achieve what you are doing in 1 line

Selection.NumberFormat = "00"

Also avoid the use of Selection. Try something like this

Sub AddZero()
    Dim rng As Range
    
    '~~> Change this to the relevant sheet/range
    Set rng = ThisWorkbook.Sheets("Sheet1").Range("A1:A10")
    
    rng.NumberFormat = "00"
End Sub

BEFORE

enter image description here

AFTER

enter image description here

answered Mar 26, 2021 at 4:47

Siddharth Rout's user avatar

Siddharth RoutSiddharth Rout

146k17 gold badges206 silver badges250 bronze badges

1

Skip to content

Как добавить в ячейку недостающие нули

На чтение 2 мин. Просмотров 1.5k.

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

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как этот код работает
  4. Как использовать

Как макрос работает

Все номера клиентов должны быть более 10 символов. Таким образом, для каждого номера клиента, необходимо раздуть число с нулями, чтобы получить всего 10 символов. Этот макрос делает это.

Код макроса

Sub Macro51()
'Шаг 1: Объявляем переменные
Dim MyRange As Range
Dim MyCell As Range
'‘Шаг 2: Сохранить книгу прежде, чем изменить ячейки?
Select Case MsgBox("Перед изменением ячеек. " & _
"Сохранить книгу?", vbYesNoCancel)
Case Is = vbYes
ThisWorkbook.Save
Case Is = vbCancel
Exit Sub
End Select
'Шаг 3: Определяем целевой диапазон
Set MyRange = Selection
'‘Шаг 4: Запускаем цикл по диапазону
For Each MyCell In MyRange
'Шаг 5: Добавляем нули и берем 10 знаков справа
If Not IsEmpty(MyCell) Then
MyCell.NumberFormat = "@"
MyCell = "0000000000" & MyCell
MyCell = Right(MyCell, 10)
End If
'Шаг 6: Получаем следующую ячейку в диапазоне
Next MyCell
End Sub

Как этот код работает

  1. Шаг 1 объявляет две переменные объекта Range.
  2. Мы должны сохранить книгу перед запуском макроса.
  3. Шаг 3 заполняет переменную MyRange с целевым диапазоном.
  4. Шаг 4 начинает цикл через каждую ячейку в целевом диапазоне.
  5. После того, как клетка активируется, Шаг 5 использует функцию IsEmpty, чтобы убедиться, что ячейка не пуста. Мы делаем это, чтобы немного сэкономить на производительности. Макрос гарантирует, что ячейка отформатирована, как текст. На следующей строке, мы используем свойство NumberFormat, чтобы указать, что формат @. Этот символ указывает на форматирование текста. Затем макрос объединяет ячейки с 10 нулями, вводим 10 нулей в коде, а затем с помощью амперсанд (&) объединяем их со значением ячейки. И, наконец, шаг 5 использует нужную функцию для извлечения 10 символов. Это
    фактически дает нам значение ячейки, с достаточным количеством нулей, чтобы сделать 10 символов.
  6. Шаг 6 повторяет цикл, чтобы получить следующую ячейку. После просмотра всех ячеек в целевом диапазоне макрос заканчивается.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11 на клавиатуре.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

Иногда, необходимо сделать так, чтобы нули в начале чисел автоматически не удалялись программой Excel. Например, вы составляете таблицу с артикулами и вам просто необходимо, чтобы числа отображались полностью.

Грубо говоря, нужно чтобы числа прописывались так же, как на картинке ниже.

Итак, я продемонстрирую вам несколько способов, как можно привести числа в такой вид.

У каждого способа, естественно, есть свои плюсы и минусы, подробнее об этом я расскажу в самой статье.

Содержание

  1. Способ 1: изменяем формат ячейки
  2. Способ 2: указываем формат отображения чисел
  3. Способ 3: с помощью функции ТЕКСТ
  4. Способ 4: изменяем длину строки
  5. Способ 5: используем Visual Basic

Способ 1: изменяем формат ячейки

у нас есть «ID» товаров магазина, как на картинке ниже.

И нам нужно записывать эти самые «ID», например, как 00001, а Excel автоматически переписывает его в 1.

Дело в том, что Excel пытается привести числа в простой вид. Он сравнивает числа, к примеру, 00002 и 2, понимает что они одинаковые (именно как числа) и преобразовывает 00002 в простой вид 2.

Но нам все равно необходимо записать 00002, тогда мы можем изменить формат ячейки в текстовый.

Пошаговая инструкция:

  • Выделите ячейки с числами, которые нужно записать с нулями;
  • Щелкните в раздел «Главная» и в формате выберите «Текстовый»;

В принципе все, теперь попробуйте заново записать ваши числа (нужно именно еще раз их прописать. Числа которые Excel уже преобразовал в «простой» вид, обратно не изменятся).

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

Способ 2: указываем формат отображения чисел

Этот способ позволит вам, в дальнейшем, использовать записанные числа в расчетах.

В чем суть:

Число вы можете записать по-разному, например, 2000 и 2000.00 это одно и то же, по этой логике, мы можем просто изменить формат отображения числа. То есть придать именно отображению другой вид, при этом формат ячейки останется числовым.

Таким образом содержимое ячейки не изменится.

Пошаговая инструкция:

  • Выделите нужные ячейки;
  • Щелкните «Главная» и нажмите на стрелочку, смотрящую вниз, в разделе «Число»;

  • В открывшемся окне, во вкладке «Число», щелкните на «(все форматы)»;

  • В поле «Тип» (где сейчас написано «Основной») напишите «00000»;

  • Подтвердите.

Итак, что произошло: мы поменяли вид отображения всех чисел в выделенных ячейках на пятизначный. Это значит, что все числа в этих ячейках будут отображаться, минимум, в пятизначном формате. Например, число «2» будет отображаться как «00002». А число «372847» будет отображаться как «372847».

В общем, тут все зависит от вашей ситуации, нулей в поле «Тип» можно вписать столько, сколько вам нужно. Можно сделать десятизначный формат отображения и так далее.

Важная информация: этот способ работает только с ячейками формата «Число», если у вашей ячейки будет текстовый формат, этот вариант не сработает.

Способ 3: с помощью функции ТЕКСТ

Итак, важно понимать, что функция ТЕКСТ изменяет формат самого значения, а не всей ячейки.

Но в целом, этот способ подходит если вам просто нужно сделать, чтобы число отображалось так, как вы хотите.

Но не забывайте, что использование этой функции превратит значение в текст. Это значит что для Excel ваше число (например, 00002) будет считаться обычным текстом, т.е. в расчетах его использовать будет невозможно.

Формула:

=ТЕКСТ(A2, “00000”)

Для числа, хранящегося в ячейке «A2».

Итак, число будет записываться в пятизначном формате(если число было «3», то станет «00003»).

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

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

Способ 4: изменяем длину строки

Минус способа с использованием функции ТЕКСТ является то, что она не способна изменять формат чисел на текст тогда, когда эти числа находятся в комбинации с текстом. Она просто не будет работать.

Но в такой ситуации можно использовать метод с функциями ПОВТОР и ДЛСТР.

Формула:

=ПОВТОР(0;5-ДЛСТР(A2))&A2

При вызове такой функции, длина строки изменится на пятизначную. Это значит, что все числа будут записаны в пятизначном формате (например, число «3» будет записано как «00003»).

Что делает эта функция:

  • Функция ДЛСТР(A2) возвращает длину нашей строки с числом.
  • Функция =ПОВТОР(0;5-ДЛСТР(A2)) считает сколько нулей необходимо добавить к началу нашего числа. И так для каждой новой строки.

Грубо говоря, эта функция просто посчитает сколько нулей нужно добавить к началу числа чтобы в нем, в общем, получилось 5 знаков (т.к. в формуле мы указали 5).

Способ 5: используем Visual Basic

Способ с использованием Visual Basic отлично подойдет тем, кому очень часто нужно записывать числа определенным образом.

Этот код создает вашу собственную функцию для такого рода задачи:

Function AddLeadingZeroes(ref As Range, Length As Integer) 
Dim i As Integer 
Dim Result As String 
Dim StrLen As Integer 
StrLen = Len(ref) 
For i = 1 To Length 
If i <= StrLen Then 
Result = Result & Mid(ref, i, 1) 
Else 
Result = "0" & Result 
End If 
Next i 
AddLeadingZeroes = Result 
End Function

Нужно поместить код, данный выше, в Visual Basic модуль и тогда в вашем Excel добавится функция, которая автоматически будет прописывать числа с нулями.

А еще можно поделиться этой функцией с коллегами.

Понравилась статья? Поделить с друзьями:
  • Добавить новую строку в excel горячие клавиши
  • Добавить новую вкладку в word
  • Добавить значение в строку excel
  • Добавить знак к формуле в excel
  • Добавить знак в начало строки excel