Лучший способ удалить начальные нули из нечисловых значений в Excel


12

У меня есть много ячеек на листе Excel, использующих 9 символов от 0 до 9 и AZ, с некоторым числом нулей с префиксом:

000000123 
000001DA2 
0000009Q5
0000L210A
0000014A0
0000A5500
00K002200

Я хотел бы удалить ведущие нули, чтобы значения стали:

123 
1DA2 
9Q5
L210A
14A0
A5500
K002200

Как бы я сделал это в формуле Excel? Я бы предпочел избегать использования макроса VBA.


Если у вас есть еще несколько несоответствий в отношении данных, возможно, я смогу найти более конкретное решение.
Лэнс Робертс

Благодарю. Значения имеют начальные нули, так что они всего 9 символов. Кроме этого, значения представляют собой строки из цифр 0-9, смешанные с заглавной буквой AZ. Возможно, что конечный ноль существует, и он является частью фактического значения и не должен быть обрезан.
Крис Фармер

Чтобы быть явным, никогда не бывает встроенных пробелов. Просто 0-9 и AZ.
Крис Фармер

Отредактировано, чтобы включить эти последние нулевые примеры
Крис Фармер

@ Крис, я могу сделать это, если мы знаем максимальное количество нулей, которые когда-либо появятся встроенными в строку, или трейлинг после (хотя это будет длинная формула).
Лэнс Робертс

Ответы:


14

Вот решение, которое интенсивно использует клетки, но верно.

Поместите свои данные в столбец А.

В B1 поместите формулу:

=IF(
    LEFT(A1) = "0" ,
    RIGHT(A1, LEN(A1)-1),
    A1)

Это проверяет один ведущий ноль и удаляет его.

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

Последний столбец содержит ваши данные, лишенные лидирующих нулей.


После многих попыток это единственная версия, которая будет работать, не прибегая к VBA.
skamradt

Комментарий @Richard: Мне нравится решение Исаака. Если более одного лидирующего нуля, продолжайте копировать из ячеек, содержащих его формулу и вставляя значения, только в исходные ячейки: каждый раз будет удаляться еще один лидирующий ноль (если есть).
Иво Флипс

7

Следующая формула не требует дополнительных ячеек и не должна вводиться как формула массива:

=RIGHT(A1,LEN(A1)-FIND(LEFT(SUBSTITUTE(A1&" ","0",""),1),A1&" ")+1)

Если для строк, подобных 0или 00, должен быть возвращен один ноль, можно использовать следующую формулу:

=IF(A1="","",RIGHT(A1,LEN(A1)-FIND(LEFT(SUBSTITUTE(LEFT(A1,LEN(A1)-1)&" ","0",""),1),LEFT(A1,LEN(A1)-1)&" ")+1))

Этот ответ работает с несколькими ведущими нулями и кажется наиболее полным и простым из ответов, упомянутых здесь.
Питер

5

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

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

=SUBSTITUTE(TRIM(SUBSTITUTE(A1,"0"," "))," ","0")

Почему только если нули, которые не являются ведущими, приходят только по одному за раз ? А как насчет =CLEAN(SUBSTITUTE(TRIM(SUBSTITUTE(A1 & CHAR(9),"0"," "))," ","0"))(в надежде CLEANудалить вкладки; если нет; использовать другое значение в CHAR)
Arjan

@Arjan, я протестировал TRIM, и он заменил встроенные несколько пробелов одним пробелом, но сейчас я собираюсь изучить вашу информацию и посмотреть, что я могу найти. (Я использую 2003).
Лэнс Робертс

Функция CLEAN сохраняет встроенные пробелы, но также сохраняет все, кроме первого начального пробела.
Лэнс Робертс

Я добавил CLEAN, чтобы удалить CHAR (9), который я добавил; использование CLEAN для значения TRIMmed не должно иметь начальных пробелов ...?
Арджан

Да, но когда CHAR (9) был добавлен (к каждому нулю), он также добавил себя к ведущим нулям. Я вижу, что вы использовали его только для сохранения конечных нулей, и я включу его в ответ.
Лэнс Робертс

5

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

Сначала настройте фиксированную таблицу из десяти строк, которая содержит следующие числа в формате текста.

000000000

000000001

000000010

000000100

000001000

000010000

000100000

001000000

010000000

100000000

Допустим, таблица находится в ячейках от A1 до A10

скажем, ваше входное значение находится в ячейке B1, а ваша ячейка результата - C1

Используйте следующую формулу в ячейке C1

= ПРАВЫЙ (В1, ПОИСКПОЗ (В1, $ A $ 1: $ A $ 10,1) -1)


Умная! Что касается третьего параметра в MATCHфункции: 1 = найти наибольшее значение, которое меньше или равно lookup_value
Арджан

4

Для данных в A1 используйте следующую формулу:

= ВПРАВО (A1, LEN (A1) -MAX ((FINDB (REPT ("0", ROW (A $ 1: A $ 100)), A1 & "-" & REPT ("0", 100)) = 1) * ROW (А $ 1: $ 100)))

ввод по Ctrl + Shift + Enter. Он работает для строк длиной до 100 символов.


Вау! Некоторые незначительные замечания: Ctrl-Shift-Enter (Cmd-Shift-Return на Mac) создает формулу массива. Вставьте формулу как обычно, но вместо Enter нажмите Ctrl-Shift-Enter, чтобы сохранить ее. Затем он будет отображаться между фигурными скобками. В OpenOffice.org на Mac я не мог перетащить формулу для следующих строк (так как тогда получилась бы некоторая формула супер-массива). Но копирование и вставка работает, так что я уверен, что есть некоторые ярлыки. И OpenOffice.org не знает FINDB; использование FIND, похоже, тоже работает.
Арьян

Элегантное решение!
Уилсон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.