Как и многие люди, Кирк копирует информацию в листы Excel, которые происходят из других источников. Информация, которую Кирк копирует, обычно написана ЗАГЛАВНЫМИ буквами, и он хочет преобразовать ее в то, что Excel называет «правильным регистром» (заглавными являются только первые буквы каждого слова). Проблема в том, что функция рабочего листа PROPER, выполняющая преобразование, не обращает внимания на слова, которые используются с заглавной буквы. Таким образом, такие слова, как a, an, in, and, the и with, начинаются с заглавных букв. Кирк не хочет, чтобы эти слова (и, возможно, некоторые другие) были написаны с заглавной буквы.

Есть несколько способов решить эту проблему. Один из них — использовать довольно длинную формулу для преобразования:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( SUBSTITUTE(SUBSTITUTE(PROPER($B$13);" A ";" a "); " An ";" an ");" In ";" in ");" And ";" and "); " The ";" the ");" With ";" with ")

Помните, что это все одна формула. Он выполняет преобразование регистра, но затем заменяет нужные слова в нижнем регистре (a, an, in и, the, with). Хотя это относительно просто, полезность формулы становится ограниченной по мере увеличения количества слов, для которых следует выполнять замены.

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

Function MyProper(str As String)

Dim vExclude     Dim i As Integer     vExclude = Array("a", "an", "in", "and", _       "the", "with", "is", "at")



Application.Volatile     str = StrConv(str, vbProperCase)

For i = LBound(vExclude) To UBound(vExclude)

str = Application.WorksheetFunction. _           Substitute(str, " " & _           StrConv(vExclude(i), vbProperCase) _           & " ", " " & vExclude(i) & " ")

Next     MyProper = str End Function

Слова могут быть добавлены в массив, и код автоматически распознает добавления и проверяет эти добавленные слова. Также обратите внимание, что код добавляет пробел перед и после каждого слова в массиве при его проверке. Это сделано для того, чтобы у вас не было кода, изменяющего частичные слова (например, «и», находящиеся внутри «stand») или слова в начале предложения. Вы можете использовать функцию на листе следующим образом:

=MyProper(B7)

Это использование возвращает измененный текст без изменения исходного текста в B7.

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

Function ProperSpecial(cX As Range)

' rng = target Cell

Dim c As Range     Dim sTemp As String

sTemp = Application.WorksheetFunction.Proper(cX.Value)

For Each c In Worksheets("WordList").Range("MyList")

sTemp = Application.WorksheetFunction.Substitute( _           sTemp, Application.WorksheetFunction.Proper( _           " " & c.Value & " "), (" " & c.Value & " "))

Next c

ProperSpecial = sTemp End Function

_Примечание: _

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

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (11267) относится к Microsoft Excel 2007 и 2010. Вы можете найти версию этого совета для более старого интерфейса меню Excel здесь:

link: / excel-Modifying_Proper_Capitalization [Изменение правильного использования заглавных букв].