我的请求:Excel公式删除每个'偶数'定位的字母或数字字符串,包含在一个单元格中,以分号(;)分隔,所以只有' 奇数'定位的数字\文本字符串保留。
我有一些数据,有一个可怕的混合值单元格 ......啊啊。我希望一个公式可以从一个由一系列代表“产品代码”的数字组成的单元格中删除每个“其他!”值的字符串。
详细说明:
我的有问题的单元格位于列[B
]中。典型的单元格内容为[B2
],如下所示:534222;#212;#634196;#331;#538015;#75
。
在此示例中,我的“产品代码”是:534222
; #634196
; #538015
...... ..我想要摆脱的随机数是:#212
; #331
; #75
。 为了清楚,并不总是这些数字,它们可以是任何数字。
我注意到随机数出现在我的“产品代码”之间,并且始终是第2,第4,第6 ......等。字符串中的数字。
除了在整个价值观中的位置之外,数字没有模式......总是第2,第4,第6,第8等。即in和' 甚至 '位置,每个值用分号(;
)分隔,前面有一个井号(#
)
我想要“产品代码”,它似乎出现在“奇数”排名位置第1,第3,第5,第7等... 。留下来的随机数字。
额外信息:
我仍然希望我的“产品代码”划分用逗号(,
)或分号(;
),而不是关于哈希符号(#),它可以留下或去。
答案 0 :(得分:1)
尝试此功能:
Function CleanEvenItems(value As String) As String
spl = Split(value, ";")
For i = 0 To UBound(spl) Step 2
CleanEvenItems = CleanEvenItems & spl(i) & ";"
Next
End Function
并像这样使用
= CleanEvenItems(B2)
答案 1 :(得分:0)
在标准模块中输入以下 UDF():
Public Function KeepOdd(rin As Range) As String
Dim Flip As Boolean
ary = Split(rin.Text, ";")
Flip = True
KeepOdd = ""
For Each a In ary
If Flip Then
KeepOdd = KeepOdd & ";" & a
Flip = False
Else
Flip = True
End If
Next a
KeepOdd = Mid(KeepOdd, 2)
End Function
并且 A1 中的数据,在 B1 中输入:
= KeepOdd(A1)
用户定义函数(UDF)非常易于安装和使用:
如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx
删除UDF:
从Excel使用UDF:
= KeepOdd(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
必须启用宏才能使其生效!