[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特定の形式に変換したい』(YYI)
2D-94I-1
2D-112AB-1
R-17AB-1
R-17W1AB-1
KF-05AB-3
という文字列を、それぞれ
A1 B1
2D 94-I-1
2D 112-AB-1
R 17-AB-1
R 17W1-AB-1
KF 05-AB-3
に変換できるようにしたいのですが、使用する関数がよく分かりません
最初を抜き出すのは=LEFT(A1,FIND("-",A1)-1)くらいは分かるのですが
以降がまるで思い付かず力をお貸し頂きたいのです
< 使用 Excel:Excel2016、使用 OS:Windows8 >
別セルでいいなら
左から数えて最初の「-」まで =LEFT(A1,FIND("-",A1,1)-1)
左から数えて最初の「-」から右側 =RIGHT(A1,LEN(A1)-LEN(B1)-1) (カリーニン) 2017/06/17(土) 10:58
↓を見落としてました。
>R-17W1AB-1 >KF-05AB-3
これを R 17W1-AB-1 KF 05-AB-3 に分ける条件をアップしてください。 (カリーニン) 2017/06/17(土) 11:02
R 17W1-AB-1
KF 05-AB-3
に関しては
Wを含む場合右の数字を許容したあとに-が付くのと
KFのようにアルファベット二文字で開始するものは0*という表記になってしまうというものです。
17W1-と05-のような-は条件がファジーすぎて対応が難しいと思いますし、
今のままでも十分助かりましたので、後は置き換えなどで対応します。
丁寧に回答していただけて助かりました。
(YYI) 2017/06/17(土) 11:16
VBAでもよければ
Sub test() Dim r As Range, temp As String With CreateObject("VBScript.RegExp") .Global = True For Each r In Range("a1", Range("a" & Rows.Count).End(xlUp)) .Pattern = "^(.*?)(?=-)(.+)$" r(, 2).Value = .Replace(Trim$(r.Value), "$1") temp = Replace(.Replace(Trim$(r.Value), "$2"), "-", "") .Pattern = "(\d+|\D+)(?!$)" temp = .Replace(temp, "$1-") .Pattern = "-(W)-(\d)" r(, 3).Value = .Replace(temp, "$1$2") Next End With End Sub (seiya) 2017/06/17(土) 12:21
数式頑張って考えてみました B列が作業列です。 C、D列がそれぞれ求める結果です。 |[A] |[B] |[C]|[D] [1]|2D-94I-1 | 94|2D |94-I-1 [2]|2D-112AB-1| 112|2D |112-AB-1 [3]|R-17AB-1 | 17|R |17-AB-1 [4]|R-17W1AB-1|17W1|R |17W1-AB-1 [5]|KF-05AB-3 | 05|KF |05-AB-3
B1=LEFT(MID(A1,LEN(C1&"-")+1,100),SUMPRODUCT(NOT(ISERROR(LEFT(SUBSTITUTE(MID(A1,LEN(C1&"-")+1,100),"W",0),COLUMN(1:1))*1))*1)) C1=LEFT(A1,FIND("-",A1)-1) D1=B1&"-"&RIGHT(A1,LEN(A1)-LEN(C1&B1&"-")) (稲葉) 2017/06/17(土) 12:40
こんなのでもいいのか? 一番後ろの英字の塊の前に"-"を入れるものだが。
B1:=LEFT(A1,FIND("-",A1)-1) C1:=REPLACE(REPLACE(A1,MATCH(1,INDEX(0/MID(LEFT(A1,MATCH(1,INDEX(0/(MID(A1,ROW($1:$20),1)="-"),0),1)-1),ROW($1:$20),1),0),1)+1,0,"-"),1,LEN(B1)+1,"")
(ねむねむ) 2017/06/19(月) 09:42
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.