Excel заменяет символы в строке до и после «x»

Привет, у меня есть столбец со строками (именами продуктов). Теперь они отформатированы как имя LenghtxWidth , пример Green box 20×30. Теперь мне нужно изменить 20 с 30 в этом примере, чтобы получить Green box 30×20, любые идеи, как я могу это достичь? благодаря

Вот решение VBA, которое будет работать для вас:

Option Explicit Function Switch(r As Range) As String Dim measurement As String Dim firstPart As String Dim secondPart As String measurement = Right(r, Len(r) - InStrRev(r, " ")) secondPart = Right(measurement, Len(measurement) - InStr(1, measurement, "x")) firstPart = Left(measurement, InStr(1, measurement, "x") - 1) Switch = Left(r, InStrRev(r, " ") - 1) & " " & secondPart & "x" & firstPart End Function 

Вы можете вставить это в обычный модуль в VBE (Visual Basic Editor) и использовать его в качестве обычной функции / формулы. Если ваше значение находится в ячейке A1, тогда введите =Switch(A1) в ячейке B1. Надеюсь, поможет!

Вот как решение формулы, так и решение VBA с использованием регулярных выражений:

формула

 =LEFT(A1,FIND(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",99)),99)),A1)-1)& MID(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",99)),99)),SEARCH("x",TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",99)),99)))+1,99)& "x"& LEFT(TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",99)),99)),SEARCH("x",TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",99)),99)))-1) 

UDF

 Option Explicit Function RevWL(S As String) Dim RE As Object Const sPat As String = "(\d+.?\d*)x(\d+.?\d*)" 'If L or W might start with a decimal point, and not a digit, 'Then change sPat to: (\d*.?\d+)x(\d*.?\d+) Set RE = CreateObject("vbscript.regexp") With RE .Global = True .ignorecase = True .Pattern = sPat RevWL = .Replace(S, "$2x$1") End With End Function 

Ниже приведен пример данных, с которыми я тестировал:

введите описание изображения здесь

Формула работает, просматривая последнюю подстроку, разделенную LxW , которая будет LxW , а затем реверсирует часть после и до x , а затем объединяет все вместе.

В шаблоне regex фиксируются два числа (могут быть целые числа или десятичные числа, при условии, что они начинаются с целого числа – хотя это может быть изменено, если необходимо) и реверсируют их.

Ниже приведено подробное объяснение регулярного выражения (и строки замены) ссылками на учебник:

(\ D +.? \ Д *) х (\ D +.? \ Д *)

 (\d+.?\d*)x(\d+.?\d*) 

Опции: нечувствительный к регистру; ^ $ не совпадают при разрыве строк

  • Соответствуйте регулярному выражению ниже и зафиксируйте его совпадение с номером обратной ссылки 1 (\d+.?\d*)
    • Сопоставьте один символ, который является «цифрой» \d+
      • Между одним и неограниченным временем, как можно больше раз, отдавая по мере необходимости (жадный) +
    • Сопоставьте любой символ, который не является символом прерывания строки .?
      • Между ноль и один раз, сколько раз, возможно, возвращаясь по мере необходимости (жадный) ?
    • Сопоставьте один символ, который является «цифрой» \d*
      • Между нулевым и неограниченным временем, как можно больше раз, возвращаясь по мере необходимости (жадный) *
  • Сопоставьте символ «x» буквально x
  • Соответствуйте регулярному выражению ниже и запишите его соответствие в backreference number 2 (\d+.?\d*)
    • Сопоставьте один символ, который является «цифрой» \d+
      • Между одним и неограниченным временем, как можно больше раз, отдавая по мере необходимости (жадный) +
    • Сопоставьте любой символ, который не является символом прерывания строки .?
      • Между ноль и один раз, сколько раз, возможно, возвращаясь по мере необходимости (жадный) ?
    • Сопоставьте один символ, который является «цифрой» \d*
      • Между нулевым и неограниченным временем, как можно больше раз, возвращаясь по мере необходимости (жадный) *

$ 2x $ 1

  • Вставьте текст, последний раз сопоставленный с записью группы 2 $2
  • Вставить символ «x» буквально x
  • Вставьте текст, последний раз сопоставленный с записью группы номер 1 $1

Создано с помощью RegexBuddy

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

Вот небольшой пример: введите описание изображения здесь

Конечно, B1-4 являются необязательными. Здесь есть только что-то более читаемое, но вы можете использовать только одну формулу

 =CONCATENATE(LEFT(A1, SEARCH(" ",A1,1)-1)," ",RIGHT(RIGHT(A1,LEN(A1)-SEARCH(" ",A1,1)),LEN(RIGHT(A1,LEN(A1)-SEARCH(" ",A1,1)))-SEARCH("x",RIGHT(A1,LEN(A1)-SEARCH(" ",A1,1)),1)),"x",LEFT(RIGHT(A1,LEN(A1)-SEARCH(" ",A1,1)), SEARCH("x",RIGHT(A1,LEN(A1)-SEARCH(" ",A1,1)),1)-1)) 

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

 =CONCATENATE(LEFT(A1, SEARCH("^^",SUBSTITUTE(A1," ","^^",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))-1)," ",RIGHT(RIGHT(A1,LEN(A1)-SEARCH("^^",SUBSTITUTE(A1," ","^^",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))),LEN(RIGHT(A1,LEN(A1)-SEARCH("^^",SUBSTITUTE(A1," ","^^",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))))-SEARCH("x",RIGHT(A1,LEN(A1)-SEARCH("^^",SUBSTITUTE(A1," ","^^",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))),1)),"x",LEFT(RIGHT(A1,LEN(A1)-SEARCH("^^",SUBSTITUTE(A1," ","^^",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))), SEARCH("x",RIGHT(A1,LEN(A1)-SEARCH("^^",SUBSTITUTE(A1," ","^^",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))),1)-1)) 
Interesting Posts

нужна помощь с excel vlookup

Определенная по определению или объектная ошибка с двумя длинными переменными

Запуск макроса VBA при открытии любой книги

Как преобразовать эти вспомогательные процедуры для работы на двух листах?

Используя формулу Excel для SUM число, основанное на букве infront

Excel VBA TreeView, проходящий через дочерние узлы

Скопировать все листы в один лист

Текст Range.Find () с возвратом каретки Excel VBA

Как добавить команду вложения в мой код, который создает электронную почту в Excel VBA

Как сделать текущую ячейку в столбце C согласно значению ячейки в A

Печать нескольких листов сразу после выбора пользователя

Excel VBA: копирование и вставка повторяющихся значений на основе формата шрифта

Напишите «хороший» или «плохой», если значения в диапазоне истинны или ложны

Что касается различий в совпадении VBA Match и Excel

Вставка изображений (графики) в заголовок в версии Mac

Давайте будем гением компьютера.