Скотт задается вопросом, как заставить Excel автоматически добавлять тире между каждой буквой в данной ячейке. Например, если ячейка A1 содержит «дом», Скотт хотел бы преобразовать его в «h-o-u-s-e».

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

=CHOOSE(LEN(A1),A1,LEFT(A1,1) & "-" & RIGHT(A1,1), LEFT(A1,1) & "-" & MID(A1,2,1) & "-" & RIGHT(A1,1), LEFT(A1,1) & "-" & MID(A1,2,1) & "-" & MID(A1,3,1) & "-"

& RIGHT(A1,1),LEFT(A1,1) & "-" & MID(A1,2,1) & "-"

& MID(A1,3,1) & "-" & MID(A1,4,1) & "-" & RIGHT(A1,1), LEFT(A1,1) & "-" & MID(A1,2,1) & "-" & MID(A1,3,1)

& "-" & MID(A1,4,1) & "-" & MID(A1,5,1) & "-" & RIGHT(A1,1))

Этот конкретный пример формулы будет работать только с текстом длиной до шести символов. Таким образом, он будет работать правильно для «дома», но не для «домашнего хозяйства». Формулу можно было удлинить, но, опять же, она быстро стала очень длинной.

Лучше использовать макрос для преобразования. Если вы хотите вставить тире прямо в ячейку, вы можете использовать такой макрос:

Sub AddDashes1()

Dim Cell As Range     Dim sTemp As String     Dim C As Integer

For Each Cell In Selection         sTemp = ""

For C = 1 To Len(Cell)

sTemp = sTemp & Mid(Cell, C, 1) & "-"

Next         Cell.Value = Left(sTemp, Len(sTemp) - 1)

Next End Sub

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

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

Function AddDashes2(Src As String) As String     Dim sTemp As String     Dim C As Integer

Application.Volatile     sTemp = ""

For C = 1 To Len(Src)

sTemp = sTemp & Mid(Src, C, 1) & "-"

Next     AddDashes2 = Left(sTemp, Len(sTemp) - 1)

End Function

Чтобы использовать эту функцию, вы должны использовать в своем рабочем листе следующее:

=AddDashes2(A1)

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

Function AddDashes3(Src As String) As String     Dim sTemp As String     Dim C As Integer

Application.Volatile     sTemp = ""

For C = 1 To Len(Src)

sTemp = sTemp & Mid(Src, C, 1)

If Mid(Src, C, 1) <> " " And           Mid(Src, C + 1, 1) <> " " And           C < Len(Src) Then             sTemp = sTemp & "-"

End If     Next     AddDashes3 = sTemp End Function

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

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

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

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

Этот совет (9634) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Adding_Dashes_between_Letters [Добавление тире между буквами].