0

こんにちは、文字列 (製品名) を含む列があります。現在、これらはName LenghtxWidthとしてフォーマットされています (例: Green box 20x30)。この例では、20 を 30 に変更する必要があるため、緑色のボックス 30x20 が得られます。これを達成する方法はありますか? ありがとう

4

3 に答える 3

4

これは、正規表現を使用した数式ソリューションと 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前後の部分を逆にし、xすべてを連結して元に戻すことで機能します。

正規表現パターンは、2 つの数値 (整数または 10 進数の場合もありますが、整数で始まる場合は必要に応じて変更できます) をキャプチャし、それらを逆にします。

正規表現 (および置換文字列) のより詳細な説明と、チュートリアルへのリンクを次に示します。

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

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

オプション: 大文字と小文字を区別しません。^$ は改行で一致しません

$2x$1

RegexBuddyで作成

于 2016-08-09T12:16:08.910 に答える
2

これがあなたのために働く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 に入力します。それが役に立てば幸い!

于 2016-08-09T12:03:19.710 に答える
2

Ok, so it is really easier to use VBA, but if you want only some formulas you can use some columns to split your text and then concatenate your cells.

Here is a little example: enter image description here

Of course B1-4 are optional. It is here only to have something more readable, but you can do use only one formula

=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))

If you have several spaces in your names, you can use this formula that will search the last space in the text

=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))
于 2016-08-09T12:02:13.167 に答える