excel 使用CSE或数组公式进行子字符串操作

5cg8jx4n  于 2023-05-01  发布在  其他
关注(0)|答案(3)|浏览(130)

是否有一个CSE数组公式,将给予我这个输出?

输入字符串-“苹果”水果=Y,“芒果”水果=Y,“茄子”水果= N,“胡萝卜”水果= N,“椰子”水果= Y
输出字符串-苹果、芒果、椰子

基本上,我希望字符串包含在Fruit = Y的引号中

hs1ihplo

hs1ihplo1#

只是另一种做事的方式:

=TEXTJOIN(", ",,FILTERXML("<t><s>"&SUBSTITUTE(A1,"""","</s><s>")&"</s></t>","//s[translate(following::*[1],', ','')='Fruit=Y']"))

当进入CSE时,也应该使用Excel 2019。
对于旧版本的Excel,我相信有各种各样的方法。我喜欢使用正则表达式。例如:

Function GetFruits(s As String) As String

Static RE As Object: If RE Is Nothing Then Set RE = CreateObject("vbscript.regexp")

RE.Pattern = """([^""]+)""\s*Fruit\s*=\s*Y\s*(,)?|."
RE.Global = True
GetFruits = Application.Trim(RE.Replace(s, "$1$2 "))

End Function

使用=GetFruits(A1)调用

tvmytwxo

tvmytwxo2#

假设你整理了你的输入字符串,使它更一致,例如,始终包含“=Y”,而不是“=Y”和“=Y”的混合,并且到处都用“,”分隔,而不是有时用“,”:

=LET(
    ζ,TEXTSPLIT(A1," Fruit=",", "),
    TEXTJOIN(", ",,SUBSTITUTE(FILTER(TAKE(ζ,,1),TAKE(ζ,,-1)="Y"),"""",""))
)
wfveoks0

wfveoks03#

可以使用VBA过程或函数轻松完成:

Sub test()
  Dim S As String
  Dim result As String
  
  S = Range("A1").Value
  
  For Each s1 In Split(S, ",")
    If s1 Like "*Fruit=Y" Then
      result = result + " " + s1
    End If
  Next s1
  
  Range("B1").Value = result
End Sub

相关问题