
スプレッドシートにアイテム画像を参照する行が 2000 行あり、ファイル パスを削除する必要がありますが、一部のフィールドには 1 つのセルに複数の画像参照があるため、複雑な例は次のようになります。
/2/0/2099-1.jpg、/2/0/2099-2.jpg、/2/0/2099-3.jpg、/m/a/male_headless_mannequin_-_arms_folded.jpg
次のようになります:
2099-1.jpg、2099-2.jpg、2099-3.jpg、男性_頭なし_マネキン_-_腕を組んだ.jpg
ただし、画像参照は 1 つだけになります。例:
/3/1/31-222-007.jpg、
式:
> =MID(AA2,FIND("*",SUBSTITUTE(AA2,"/","*",LEN(AA2)-LEN(SUBSTITUTE(AA2,"/",""))))+1,LEN(AA2))
jpg が 1 つだけの場合にはうまく機能しますが、複数ある場合は行き詰まってしまいます。
ありがとう
答え1
データが にある場合はA1
、次を試してください。
=CONCAT(FILTERXML("<t><s>"&SUBSTITUTE(A1,"/","</s><s>")&"</s></t>","//s[substring(., string-length(.) - 3) = '.jpg' or substring(., string-length(.) - 4) = '.jpg,']"))
Excel 2019 を実行する場合は、この数式を CSE する必要があります。Excel O365 を使用している場合は CSE は必要ありませんが、次を使用した短縮バージョンもありますLET()
。
=LET(X,FILTERXML("<t><s>"&SUBSTITUTE(A1,"/","</s><s>")&"</s></t>","//s"),CONCAT(IF(ISNUMBER(FIND(".jpg",X)),X,"")))
ご興味のある方は、リンク下記の私のコメントに記載されているQ&Aに。
答え2
この小さなユーザー定義関数を試してみてください:
Option Explicit
Public Function NoPath(sIn As String) As String
Dim arr, i As Long, v As String, L As Long
Dim j As Long
arr = Split(sIn, ",")
For i = LBound(arr) To UBound(arr)
v = arr(i)
L = Len(v)
For j = L To 1 Step -1
If Mid(v, j, 1) = "/" Then
arr(i) = Mid(v, j + 1)
Exit For
End If
Next j
Next i
NoPath = Join(arr, ",")
End Function
ユーザー定義関数(UDF)は非常に簡単にインストールそして次のように使用します:
- ALT-F11でVBEウィンドウが開きます
- ALT-I ALT-Mで新しいモジュールを開く
- 内容を貼り付けてVBEウィンドウを閉じます
ワークブックを保存すると、UDF も一緒に保存されます。2003 以降のバージョンの Excel を使用している場合は、ファイルを .xlsx ではなく .xlsm として保存する必要があります。
に取り除くUDF:
- 上記のようにVBEウィンドウを開きます
- コードを消去する
- VBEウィンドウを閉じる
に使用Excel からの UDF:
=NoPath(A1)
マクロ全般の詳細については、以下を参照してください。
http://www.mvps.org/dmcritchie/excel/getstarted.htm
そして
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
UDF の詳細については、以下を参照してください。
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
これを機能させるにはマクロを有効にする必要があります。