[[20170617103203]] 『特定の形式に変換したい』(YYI) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特定の形式に変換したい』(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.