Mirai Пользователь Сообщений: 15 |
Здравствуйте. Не нашел нигде решение задачи. |
Mirai,Перед копированием, установите в ячейках куда будете копировать такие значения формат ячеек — текстовый, копируете — вставляете спец вставкой — значения |
|
heso Пользователь Сообщений: 444 |
#3 14.10.2016 06:34:32 Запись макроса говорит, что
|
||
kuklp Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
#4 14.10.2016 06:51:35
Я сам — дурнее всякого примера! … |
||
Hugo Пользователь Сообщений: 23252 |
Без файла тут особо говорить нечего, т.к. возможны разные варианты — что в ячейках, что в массиве, что позже будете делать с данными? Изменено: Hugo — 14.10.2016 08:43:26 |
Mirai Пользователь Сообщений: 15 |
#6 14.10.2016 10:27:59 Всем, спасибо, принцип понял. |
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
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
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
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.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
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
AFTER
answered Mar 26, 2021 at 4:47
Siddharth RoutSiddharth Rout
146k17 gold badges206 silver badges250 bronze badges
1
Skip to content
Как добавить в ячейку недостающие нули
На чтение 2 мин. Просмотров 1.5k.
Что делает макрос: Многие системы требуют идентификаторы (например, номер клиента, номер заказа, или номер продукта), чтобы иметь фиксированное количество символов. Например, номера клиентов, которые выглядят следующим образом: 00000045478. Число дополняется нулями для достижения предварительных условий длины символа.
Содержание
- Как макрос работает
- Код макроса
- Как этот код работает
- Как использовать
Как макрос работает
Все номера клиентов должны быть более 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 объявляет две переменные объекта Range.
- Мы должны сохранить книгу перед запуском макроса.
- Шаг 3 заполняет переменную MyRange с целевым диапазоном.
- Шаг 4 начинает цикл через каждую ячейку в целевом диапазоне.
- После того, как клетка активируется, Шаг 5 использует функцию IsEmpty, чтобы убедиться, что ячейка не пуста. Мы делаем это, чтобы немного сэкономить на производительности. Макрос гарантирует, что ячейка отформатирована, как текст. На следующей строке, мы используем свойство NumberFormat, чтобы указать, что формат @. Этот символ указывает на форматирование текста. Затем макрос объединяет ячейки с 10 нулями, вводим 10 нулей в коде, а затем с помощью амперсанд (&) объединяем их со значением ячейки. И, наконец, шаг 5 использует нужную функцию для извлечения 10 символов. Это
фактически дает нам значение ячейки, с достаточным количеством нулей, чтобы сделать 10 символов. - Шаг 6 повторяет цикл, чтобы получить следующую ячейку. После просмотра всех ячеек в целевом диапазоне макрос заканчивается.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11 на клавиатуре.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код.
Иногда, необходимо сделать так, чтобы нули в начале чисел автоматически не удалялись программой Excel. Например, вы составляете таблицу с артикулами и вам просто необходимо, чтобы числа отображались полностью.
Грубо говоря, нужно чтобы числа прописывались так же, как на картинке ниже.
Итак, я продемонстрирую вам несколько способов, как можно привести числа в такой вид.
У каждого способа, естественно, есть свои плюсы и минусы, подробнее об этом я расскажу в самой статье.
Содержание
- Способ 1: изменяем формат ячейки
- Способ 2: указываем формат отображения чисел
- Способ 3: с помощью функции ТЕКСТ
- Способ 4: изменяем длину строки
- Способ 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 добавится функция, которая автоматически будет прописывать числа с нулями.
А еще можно поделиться этой функцией с коллегами.