Формула Excel, чтобы сделать первую букву каждого слова заглавной, не меняя остальную часть слова - PullRequest
0 голосов
/ 15 марта 2020

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

Например, если кто-то входит в 221B пекарь St, Spring Hill QLD, Австралия , я бы хотел изменить это значение на 221 Baker St, Spring Hill QLD, Australia,

Если я использую для этого функцию PROPER, QLD изменяется на Qld , что неверно.

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

=IF(EXACT(UPPER(A1),A1),A1,PROPER(A1))

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

Обновление: мне это удалось, но формула не очень элегантная:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1," a"," A")," b"," B")," c"," C")," d"," D")," e"," E")," f"," F")," g"," G")," h"," H")," j"," J")," k"," K")," l"," L")," m"," M")," n"," N")," o"," O")," p"," P")," q"," Q")," r"," R")," s"," S")," t"," T")," u"," U")," v"," V")," w"," W")," x"," X")," y"," Y")," z"," Z"),", a",", A"),", b",", B"),", C",", C"),", d",", D"),", e",", E"),", f",", F"),", g",", G"),", h",", H"),", j",", J"),", k",", K"),", l",", L"),", m",", M"),", n",", N"),", o",", O"),", p",", P"),", q",", Q"),", r",", R"),", s",", S"),", t",", T"),", u",", U"),", v",", V"),", w",", W"),", x",", X"),", y",", Y"),", z",", Z")

Ответы [ 3 ]

2 голосов
/ 15 марта 2020

Это немного сложно без VBA.

Вам нужно

  1. разбить строку на слова
  2. заменить первый символ каждого слова его версия в верхнем регистре
  3. пересобрать предложение

Шаг 1 может быть достигнут с помощью FilterXML, используя пробел в качестве разделителя (Обратите внимание, это предполагает, что каждое слово отделяется по крайней мере пробелом и, возможно, другие символы)

=FILTERXML("<b><a>" & SUBSTITUTE(A1," ","</a><a>")&"</a></b>","//a")

Шаг 2 использует Replace, Upper и Left для обработки первого символа каждого слова

=REPLACE(B1#,1,1,UPPER(LEFT(B1#,1)))

Шаг 3 использует TEXTJOIN для сборки отправителя

=TEXTJOIN(" ",TRUE,C1#)

enter image description here

Собрать все вместе - это одна формула

=TEXTJOIN(" ", TRUE,REPLACE(FILTERXML("<b><a>" & SUBSTITUTE(A1," ","</a><a>")&"</a></b>","//a"),1,1,UPPER(LEFT(FILTERXML("<b><a>" & SUBSTITUTE(A1," ","</a><a>")&"</a></b>","//a"),1))))

TEXTJOIN был добавлен в версии 2017. FILETERXML в версии 2013

Чтобы заставить его работать в версиях> = 2013 и <2017, используйте <code>CONCAT вместо TEXTJOIN, плюс несколько твиков, чтобы заставить его работать .

=TRIM(CONCAT(REPLACE(FILTERXML("<b><a>" & SUBSTITUTE(A1," ","</a><a>")&"</a></b>","//a"),1,1," "&UPPER(LEFT(FILTERXML("<b><a>" & SUBSTITUTE(A1," ","</a><a>")&"</a></b>","//a"),1)))))
1 голос
/ 15 марта 2020

Попробуйте эту более длинную формулу, для которой не требуется функция TEXTJOIN или CONCAT,

In B1, введите формулу:

=REPLACE(A1,1,MATCH(2,INDEX(1/(CODE(MID(LEFT(A1,LOOKUP(99,FIND(" ",A1,ROW($1:$99)))),ROW($1:$99),1))>96),0)),PROPER(LEFT(A1,MATCH(2,INDEX(1/(CODE(MID(LEFT(A1,LOOKUP(99,FIND(" ",A1,ROW($1:$99)))),ROW($1:$99),1))>96),0)))))

enter image description here

0 голосов
/ 15 марта 2020

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

  1. A2 = 221B пекарь St, Spring Hill QLD, Australia
  2. B2 = ИГРУШКА (TRIM (ЛЕВАЯ (A2, НАЙТИ (",", A2) -1)), A2)
  3. C2 = MID (ЛЕВАЯ (A2, НАЙТИ ("^") , ЗАМЕНА (A2, ",", "^", 2)) - 1), НАЙТИ (",", A2) +1,100)
  4. D2 = TRIM (ВЛЕВО (C2, LEN (C2) - LEN (E2)))
  5. E2 = TRIM (MID (C2, НАЙТИ ("^", ЗАМЕНИТЬ (C2, "", "^", LEN (C2) -LEN (ЗАМЕНИТЬ (C2, "" , "")))) + 1100))
  6. F2 = TRIM (MID (A2, НАЙТИ ("^", ЗАМЕНА (A2, ",", "^", 2)) + 1100))

= PROPER (B2) & "," & PROPER (D2) & "" & UPPER (E2) & "," & PROPER (F2) возвращает желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...