Изменение правильного написания заглавных букв (Microsoft Excel)
Как и многие люди, Кирк копирует информацию в листы 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 [Изменение правильного использования заглавных букв]
.