Удалить начальные или конечные пробелы, но не пробелы между текстом или словами в Excel - PullRequest
0 голосов
/ 30 января 2019

Как удалить один или несколько пробелов до и после фактической строки.Пробелы между строками должны оставаться на месте.Количество пробелов (начальное / конечное / между) варьируется.

Примеры:

"1234   456abc    "
"  1234  456bac    "
"    1234 456cab    "

Результат должен быть:

"1234   456abc"
"1234  456bac"
"1234 456cab"

Ответы [ 3 ]

0 голосов
/ 30 января 2019

VBA должно быть самым простым, если вы хотите формулу, попробуйте это

enter image description here

= MID (A1, НАЙТИ (ВЛЕВО (TRIM (А1), 1), А1), (LEN (А1) -match (ПРАВЫЙ (TRIM (А1), 1), ИНДЕКС (MID (A1, LEN (A1) -строка (ДВССЫЛ ( "1": & LEN (A1))) + 1,1), 0), 0) -FIND (ВЛЕВО (TRIM (A1), 1), A1) +2))

0 голосов
/ 30 января 2019

Если вы хотите удалить начальные / конечные пробелы на месте, выберите столбец значений, которые нужно изменить, и выполните эту подпроцедуру.

Sub removeLeadingTrailingSpaces()

    With Selection
        .TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, _
                       FieldInfo:=Array(0, 2)
    End With

End Sub
0 голосов
/ 30 января 2019

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

Function vbaTRIM(S As String) As String
    vbaTRIM = Trim(S)
End Function

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

=MID(A1,MATCH(TRUE,(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)<>CHAR(32)),0),
LOOKUP(2,1/(MID(A1&" ",ROW(INDIRECT("1:"&LEN(A1)+1)),1)<>CHAR(32)),
ROW(INDIRECT("1:"&LEN(A1)+1)))-MATCH(TRUE,(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)<>CHAR(32)),0)+1)

Чтобы ввести / подтвердить формулу массива , удерживайте нажатой клавишу ctrl + shift при нажатии , введите .Если вы сделаете это правильно, Excel поместит фигурные скобки {...} вокруг формулы, отображаемой в строке формул.

Эта функция состоит из двух основных частей:

Найти первый не-пробел

=MATCH(TRUE,(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)<>CHAR(32)),0)

Найти последний не пробел

=LOOKUP(2,1/(MID(A1&" ",ROW(INDIRECT("1:"&LEN(A1)+1)),1)<>CHAR(32)),ROW(INDIRECT("1:"&LEN(A1)+1)))

Итак, чтобы вернуть только пробелы, удаленные из начала и конца:

=mid(a1,firstNonSpace,lastNonSpace-firstNonSpace+1)

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

РЕДАКТИРОВАТЬ

Если у вас более новая версия Excel с функцией FILTERXML, вы можете попробовать:

=FILTERXML("<s>" & A1 & "</s>", "//s")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...