макрос для замены текста с жесткими возвратами в Excel

макрос для замены текста с жесткими возвратами в Excel

Как написать макрос, который будет искать определенный символ (в Excel) и заменять его жестким возвратом каретки в той же ячейке, сохраняя при этом целостность ячейки?

Я часто конвертирую документы Word в Excel и перед конвертацией заменяю все жесткие переносы в документе Word на знаки решетки (@@), чтобы сохранить целостность ячеек при вставке в документ Excel (если не удалить жесткие переносы, при каждом переносе будет создана новая ячейка).

После вставки в Excel мне нужно заменить знаки "@@" на жесткие возвраты, и я не могу найти "жесткий возврат" в качестве выбора в разделе "заменить". Я считаю, что для этого нужен макрос.

Спасибо за любую помощь, которую вы можете оказать.

решение1

На самом деле вы можете сделать это с помощью функции поиска и замены.
Измените текст ячейки на: ="это @@ является @@ текстом вашей @@ ячейки @@".

Затем перейдите к поиску и замене и замените @@ (или что-то, что вы хотите заменить) на " & char(10) & ". Это изменит ваш вывод с "это @@ является @@ вашей @@ ячейкой @@ текст" на "это текст вашей ячейки".

Теперь вам нужно отформатировать ячейки, чтобы включить перенос слов (щелкните правой кнопкой мыши > Формат > вкладка Выравнивание > Проверить перенос слов). Ваш новый вывод должен быть :
Это
текст
вашей
ячейки

решение2

Для короткого макроса:

Sub DoubleAt()
    Cells.Replace What:="@@", Replacement:=Chr(10)
End Sub

решение3

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

Function hardwrap(useThis As Range, WrapAt As Integer) As String
    Dim i As Integer
    Dim Temp As String
    Dim retVal As String
    i = 0
    retVal = useThis.Value
    With useThis
        If Len(.Value) > WrapAt Then
            Temp = retVal
            Do
                i = i + WrapAt
                Do
                    If Mid(Temp, i, 1) = " " Then
                        Temp = Left(Temp, i - 1) & Chr(10) & Right(Temp, Len(Temp) - i)
                        Exit Do
                    Else
                        i = i - 1
                        If i < 0 Then
                            Exit Do
                        End If
                    End If
                Loop
            Loop While i < Len(Temp) - WrapAt
            retVal = Temp
        End If
    End With
    hardwrap = retVal
End Function

Этот код во многом основан на функции Эндрю Поулсома, которую можно найти здесь:http://www.mrexcel.com/forum/excel-questions/424309-macro-wrap-text-hard-returns.html#post2097820

В принципе, если строка длиннее, чем переменная wrap at, он переходит вперед к точке wrap и идет назад в поисках пробелов. Когда он находит один, он заменяет этот пробел на новую строку. Затем он повторяет для остатка строки.

Моя версия немного более общая (ИМХО).

Пример:

А1:

"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

А2:=hardwrap(A1,40)

"Lorem ipsum dolor sit amet,
consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea
commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa
qui officia deserunt mollit anim id est
laborum."

Надеюсь, это поможет.

Связанный контент