Найкращий спосіб видалити провідні нулі з нечислового значення в Excel


13

На аркуші 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.
Кріс Фармер

Відредаговано, щоб включити ті приклади, які відміняють нуль
Кріс Фармер

@Chris, я можу це зробити, якщо ми знаємо максимальну кількість нулів, які коли-небудь з'являться вбудованими в рядок або після (хоча це буде довга формула).
Ленс Робертс

Відповіді:


14

Ось таке рішення, яке є інтенсивним, але правильним.

Введіть свої дані у стовпчик А.

У B1 покладіть формулу:

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

Це перевіряє один провідний нуль і викреслює його.

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

Останній стовпець містить ваші дані, позбавлені провідних нулів.


Після багатьох спроб цього, це єдина версія, яка працюватиме, не вдаючись до VBA.
skamradt

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

8

Наступна формула не потребує додаткових комірок, і її не потрібно вводити як формулу масиву:

=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, що вилучите Tabs; якщо ні; використовуйте якесь інше значення в 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

Використовуйте наступну формулу в комірці С1

= ВПРАВО (B1, МАТЧ (B1, $ 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) * РІДНИЙ (A $ 1: 100 USD)))

введення за допомогою 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.